Подключаемся к удалённому рабочему столу по VNC на этапе экрана авторизации (GDM, KDM, Lightdm, MDM)
Довольно часто бывает нужен доступ к графической среде удалённого окружения, и не всегда это удобно делать через SSH X Forwarding, и тут часто бывают удобны удалённые рабочие столы такие как RDP или VNC.
В данном посте, я расскажу как настроить VNC сервер с использованием x11vnc и возможностью подключаться на этапе экрана логина.
Всё что нам нужно - это запустить x11vnc во время загрузки передав с аргументом -auth
MIT-MAGIC-COOKIE нашего дисплей менеджера.
MIT-MAGIC-COOKIE - это своеобразная авторизация используемая X сервером.
Установим x11vnc:
sudo apt-get install x11vnc
Создадим файл с паролем для авторизации:
sudo x11vnc -storepasswd /etc/x11vnc.pass
В основном vnc сервера используют 5900 порт. Мы будем использовать именного его. Необходимо, чтобы были разрешены подключения к нему в iptables:
iptables -A INPUT -p tcp -m tcp --dport 5900 -j ACCEPT
Запустим x11vnc:
sudo x11vnc -display :0 -rfbauth /etc/x11vnc.pass -rfbport 5900 -o /var/log/x11vnc.log
И проверим:
vncviewer localhost
Если всё хорошо, то мы увидим много копий нашего рабочего стола, которые очень быстро плодятся. :)
И последний штрих - запуск вместе с системой. По непонятным мне причинам, x11vnc с опцией -auth guess
не находит MIT-MAGIC-COOKIE (хотя судя по документации должен), поэтому в скрипте небольшой костыль которым мы находим её сами.
На домашнем ПК у меня последняя ubuntu в которой используется upstart. Для автоматического запуска во время старта системы, и удобного управления нашим VNC сервером создадим задание для upstart.
Cоздадим файл /etc/init/x11vnc.conf
со следующим содержимым:
# x11vnc
# Script for automatically run x11vnc as server
description "x11vnc server"
start on login-session-start
stop on runlevel [!2345]
respawn
respawn limit 10 5
umask 022
script
authfile=`ps wwaux | grep -v grep |
grep '/X .*-auth' |
sed -e 's/^.*-auth *//' -e 's/ .*$//' |
head -n 1`
/usr/bin/x11vnc -xkb -noxrecord
-display :0
-auth $authfile
-noxfixes
-noxdamage
-ncache 10
-rfbauth /etc/x11vnc.pass
-forever
-rfbport 5900
-o /var/log/x11vnc.log
end script
Запустить сервер можно как обычный сервис: service x11vnc start
. При загрузке он будет так же автоматически запускаться.