Работа а-ля винда с RDP: подключились со стороны - локальная консоль блокируется, по выходу - сессия заблокирована паролем.
Скрипт для блокировки-разблокировки устройств ввода и отключения-включения экрана (через настройки системной яркости), потянут с Хабра, чуть допилен напильником, чтобы корректно работал от демона, а не только из терминальной сессии пользователя:
/usr/local/bin/switch_console:
#!/bin/sh
case $1 in
1|on)
desired=1
;;
0|off)
desired=0
;;
*)
echo "USAGE: $0 0|1|on|off"
exit 1
;;
esac
export DISPLAY=:0
export XAUTHORITY=/var/run/lightdm/root/:0
keyboards=$(xinput | grep -v "XTEST" | grep "slave keyboard" | sed -re 's/^.*\sid=([0-9]+)\s.*$/\1/')
mouses=$(xinput | grep -v "XTEST" | grep "slave pointer" | sed -re 's/^.*\sid=([0-9]+)\s.*$/\1/')
monitors=$(xrandr | grep " connected" | sed -re 's/^(.+) connected.*$/\1/')
for device in $mouses
do
xinput --set-prop $device "Device Enabled" $desired
done
for device in $keyboards
do
xinput --set-prop $device "Device Enabled" $desired
done
for device in $monitors
do
xrandr --output $device --brightness $desired
done
На случай подключения новых устройств в процессе работы - сажаем этот скрипт в цикле:
/usr/local/bin/disable_console:
#!/bin/sh
while [ $(pgrep x11vnc | wc -l) -ne "0" ]
do
/usr/local/bin/switch_console 0
sleep 1
done
x11vnc будем запускать через сокет systemd:
/etc/systemd/system/xvnc.socket:
[Unit]
Description=XVNC Server
[Socket]
ListenStream=5900
Accept=yes
[Install]
WantedBy=sockets.target
/etc/systemd/system/xvnc@.service:
[Unit]
Description=XVNC Per-Connection Daemon
[Service]
ExecStart=/usr/local/bin/startx11vnc
ExecStartPost=/sbin/start-stop-daemon --start -b --exec /usr/local/bin/disable_console
StandardInput=socket
StandardError=syslog
Собственно скрипт для запуска x11vnc и разблокировки локальной консоли по завершении работы:
/usr/local/bin/startx11vnc:
#!/bin/sh
/usr/bin/x11vnc -inetd -xkb -skip_keycodes 187,188 -auth /var/run/lightdm/root/:0 -noxrecord -noxfixes -noxdamage -unixpw -o /var/log/x11vnc.log -enc none
sleep 4
for i in $(loginctl list-sessions | grep seat | awk '{ print $1; }'); do loginctl lock-session $i; done
/usr/local/bin/switch_console 1
logger -t startx11vnc local console enabled
Скриптам разрешаем выполнение (chmod a+x), конфигурацию systemd перечитываем (systemctl daemon-reload; systemctl enable xvnc.socket; systemctl start xvnc.socket), подключаемся, наслаждаемся.
comments powered by Disqus