UMGUM.COM (лучше) 

Xorg session + VNC ( Подключение к сеансу пользователя в Xorg с помощью VNC. )

1 февраля 2011  (обновлено 15 августа 2016)

OS: Linux Debian Squeeze.

Задача: обеспечить возможность подключения к активной сессии Xorg. Цель состоит именно в подключении к уже существующей сессии, а не создании новой. Зачем? Элементарно - для помощи пользователю в вопросах работы с графическим интерфейсом.

Самое толковое средство - x11vnc:

# aptitude show x11vnc

Description: VNC server to allow remote access to an existing X session x11vnc allows one to view remotely and interact with real X displays (i.e. a display corresponding to a physical monitor, keyboard, and mouse) with any VNC viewer. It has built-in SSL encryption and authentication, UNIX account and password  support, server-side scaling, single port HTTPS and VNC, mDNS service advertising, and TightVNC and UltraVNC file-transfer.
Homepage: http://www.karlrunge.com/x11vnc/


# aptitude install x11vnc

Сразу создадим файл для журналирования событий VNC сервера:

# touch /var/log/x11vnc.log
# chmod ugo+rw /var/log/x11vnc.log

В принципе, можно сразу запустить VNC-сервер в рамках сеанса Xorg пользователя, для пробы:

$ x11vnc

Нас предостерегут и обругают за "несекурное" использование инструмента удалённого доступа, и правильно.

Первым делом задаём пароль для VNC-сервера, для каждого пользователя индивидуально (у x11vnc есть богатый набор возможностей удостоверения подключающегося клиента, но мы воспользуемся самым простым):

$ mkdir -p ~/.vnc
$ x11vnc -storepasswd strongPassword ~/.vnc/passwd

stored passwd in file: ~/.vnc/passwd

Защищаем пароль от чтения кем бы то ни было, кроме пользователя сеанса:

# chmod go-rwx ~/.vnc/passwd

После задания пароля сервер следует запускать с опцией "-usepw". Опция эта очень симпатичная. Работает следующим образом:

Если в профиле пользователя, от имени которого запускается x11vnc есть файл ~/.vnc/passwd, то сервер запустится и при подключении будет требовать указанный в файле пароль;
Если в профиле пользователя, от имени которого запускается x11vnc нет файла ~/.vnc/passwd, то сервер попросту не запускается.

Всем рекомендую почитать "man x11vnc". Такой великолепно детализированной документации я давненько не встречал. Считаю - это образчик того, как следует сопровождать программное обеспечение.

Изучаем опции и, из множества, формируем минимально необходимый набор:

$ /usr/bin/x11vnc -usepw -quiet -forever -logappend /var/log/x11vnc.log

Где:

"-quiet" - уменьшаем разговорчивость x11vnc;
"-forever" - задаём режим безостановочной работы;
"-logappend /var/log/x11vnc.log" - указываем месторасположение файла для журналирования.

Автоматический запуск сессий x11vnc обеспечим с помощью функционала KDM. Ищем способ запустить приложение от имени пользователя при инициализации сеанса такового:

$ man kdm

....
/etc/kde4/kdm/Xsession - script to run as user after login of user
....

То, что надо. Модифицируем скрипт таким образом, чтобы запустить наш VNC сервер до точки возможной передачи управления наружу:

# cat /etc/kde4/kdm/Xsession

....
/usr/bin/x11vnc -usepw -quiet -forever -logappend /var/log/x11vnc.log &

# invoke global X session script
. /etc/X11/Xsession
....

Для GDM, "запускальщика" Gnome, модифицируем аналогичного назначения скрипт:

# cat /etc/gdm/Xsession

....
/usr/bin/x11vnc -usepw -quiet -forever -logappend /var/log/x11vnc.log &

# run /etc/X11/Xsession.d/
....

Вот и всё. Теперь при инициализации сессии Xorg пользователя, имеющего файл с паролем для x11vnc, будет запущена сессия VNC от имени такового. Запустите второй сеанс - будет инициирована вторая сессия VNC. Третий - третья, и так далее. При этом, по умолчанию, первая сессия VNC будет слушать порт TCP:5900, вторая - TCP:5901, третья - TCP:5902 и так далее. Естественно, для доступа к сессиям на портах, отличных от "5900", следует его явно указывать в адресе (например: xxx.xxx.xxx.xxx:5901). Протокол VNC использует особое соглашение, позволяющее указывать дополнительно к значению "сетевого порта" номер "виртуального экрана", для которого запущена сессия VNC (например: xxx.xxx.xxx.xxx:5901:1). По умолчанию, первая сессия запускается для "экрана" ":0", вторая - для ":1" и так далее. Номер "сетевого порта" можно не указывать в том случае, если сервером используется набор портов по умолчанию, начиная с "5900" (например: xxx.xxx.xxx.xxx:1, для экрана ":1" на сетевом порту "5901", по умолчанию); в противном случае клиент VNC просто не сможет найти точку подключения к серверу и согласовать номер "экрана" и "сетевого порта".

Пример множественных сессий x11vnc:

# netstat -ap | grep -i tcp | grep -i x11vnc

tcp    0    0 *:5900    *:*    LISTEN      6868/x11vnc
tcp    0    0 *:5901    *:*    LISTEN      7068/x11vnc
tcp    0    0 *:5902    *:*    LISTEN      8021/x11vnc

К сеансам можно подключится разными способами.

К первому из приведённого выше списка:

$ vnc-client xxx.xxx.xxx.xxx

Ко второму:

$ vnc-client xxx.xxx.xxx.xxx:5901:1

К третьему:

$ vnc-client xxx.xxx.xxx.xxx:5902

Ясное дело, что сеанс удалённого управления требует защиты. VNC сервер x11vnc может обеспечивать её самыми разнообразными способами, от работы внутри SSH "туннеля", до шифрования непосредственно трафика с помощью SSL.


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )