Задача: обеспечить возможность подключения к активной сессии 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/
Homepage: http://www.karlrunge.com/x11vnc/
# aptitude install x11vnc
Сразу создадим файл для журналирования событий VNC сервера:
# touch /var/log/x11vnc.log
# chmod ugo+rw /var/log/x11vnc.log
# chmod ugo+rw /var/log/x11vnc.log
В принципе, можно сразу запустить VNC-сервер в рамках сеанса Xorg пользователя, для пробы:
$ x11vnc
Нас предостерегут и обругают за "несекурное" использование инструмента удалённого доступа, и правильно.
Первым делом задаём пароль для VNC-сервера, для каждого пользователя индивидуально (у x11vnc есть богатый набор возможностей удостоверения подключающегося клиента, но мы воспользуемся самым простым):
$ mkdir -p ~/.vnc
$ x11vnc -storepasswd strongPassword ~/.vnc/passwd
$ x11vnc -storepasswd strongPassword ~/.vnc/passwd
stored passwd in file: ~/.vnc/passwd
Защищаем пароль от чтения кем бы то ни было, кроме пользователя сеанса:
# chmod go-rwx ~/.vnc/passwd
После задания пароля сервер следует запускать с опцией "-usepw". Опция эта очень симпатичная. Работает следующим образом:
Если в профиле пользователя, от имени которого запускается x11vnc есть файл ~/.vnc/passwd, то сервер запустится и при подключении будет требовать указанный в файле пароль;
Если в профиле пользователя, от имени которого запускается 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" - указываем месторасположение файла для журналирования.
"-forever" - задаём режим безостановочной работы;
"-logappend /var/log/x11vnc.log" - указываем месторасположение файла для журналирования.
Автоматический запуск сессий x11vnc обеспечим с помощью функционала KDM. Ищем способ запустить приложение от имени пользователя при инициализации сеанса такового:
$ man kdm
....
/etc/kde4/kdm/Xsession - script to run as user after login of user
....
/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
....
/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/
....
/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
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.
11 марта 2011 в 10:51
11 марта 2011 в 16:29