Запускаем VNC на :0 display
Несколько дней назад, будучи вдалеке от дома, понадобилось мне переслать одно письмецо с домашнего компа. Проблема была в том, что я не пользуюсь консольными MUA (да простят меня адепты mutt и pine). Доступ к компутеру есть, но только по ssh. Вот и захотелось организовать себе доступ к графическим рюшекам.
Погуглив немного и почесав затылок, решил что для моих целей как нельзя лучше подходит протокол VNC. Или, говоря по честному, я просто не нашел ничего более преемлимого. Сюрпризом оказалось то, что большинство VNC-серверов запускают для удаленных клиентов ещё один Х-сервер на :1, что мне категорически не понравилось. Но есть и серверы, которые могут работать с дефолтным :0. Это — realvnc и x11vnc.
C первым решил не связыватся, т.к. для запуска на :0 нужно его подгружать в качесте . Этот путь не для нас.
Второй оказался куда более гибким в этом отношении. О нем и пойдет речь.
Пролистал man, я нашел чудестную опцию -inetd, которой и решил воспользоваться. Плюсы такого подхода: сервер стартует только по требованию, не отжирая системные ресурсы, и возможность некого контроля входящих соединений средствами inetd.
Вот небольшой рецепт по запуску x11vnc.
Добавляем наш сервис в /etc/services.
desktop$ sudo echo "vnc 5900/tcp" >> /etc/services
Конфигурируем inetd (я использую xinetd):
desktop$ cat /etc/xinetd.d/x11vnc service vnc { disable = no socket_type = stream protocol = tcp wait = no user = ronix instances = 1 server = /usr/bin/x11vnc server_args = -display :0 -inetd -q -passwdfile /home/ronix/.vnc/passwdfile only_from = 127.0.0.1 log_type = SYSLOG auth notice }
Как вы видите, сервис доступен только с адреса локалхоста. Попытаюсь объяснить зачем это сделано. Как известно, VNC имеет большую проблему с security в виде максимальной длины пароля в 8-символов, что не есть хорошо. Так что оставить его открытым всему миру будет большой ошибкой. Собственно говоря, ограничить доступ можно и с помощью пакетного фильтра, но это не всегда удобно или уместно. Второй путь — запустить сервис на 127.0.0.1. Вы спросите, а как же я с удаленного хоста попаду на этот 127.0.0.1 ? Все очень просто. Достаточно воспользоватся возможностью туннелирования трафика в ssh. Это и вызовет увеличение безопасности, ведь перед тем, как подключится к VNC, вам придется ещё дополнительно аутентифицироватся в системе.
Осталась самая малость. Создать файл с паролем /home/ronix/.vnc/passwdfile и перезапустить xinetd.
Подключение к VNC серверу выполняется в два этапа. Подключение к ssh с созданием тунеля:
remotehost$ ssh -C -L5900:127.0.0.1:5900 ronix@desktop.domain.com
И, собственно, подключение к VNC-серверу:
remotehost$ vncviewer localhost
P.S. Поздравляю всех с Днем системного администратора!
Популярность: 13%
Похожие заметки
Little Hint: Запуск Х приложений на удаленной машинеFreeBSD: SNMP для mrtg за 5 минут
Roman Shramko
Александр
30 Сен, 2010
Спасибо за интересную статью! Возьму на заметку
30 Сен, 2010
You are welcome
=AnW=
5 Сен, 2011
Интересная статья. Но я отказался от vnc по причине поедания полосы -- удалённый доступ нужен как правило «в поле», а меги на 3G модеме не бесконечные.
Есть чуть более изящный способ запуска любимых графических рюшечек:
Все графичиеские рюшики - это иксы (Х11) и выполнятся они могут на любом Х-сервере, в том числе и удалённо.
Рецепт прост:
1. ставим на удалённый комп/ноут Х11 сервер. Мой выбор - Хming.
— По большому счёту что vnc-клиент, что х-сервер всё равно ставить... Правда плюс vnc — возможность работы через браузер — но это уже другая тема.
2. В любимом PuTTy разрешаем туннелирование Х11 трафика (галочка «enable X11 forwarding» в настройках Сonnection-SSH-X11 ).
В не менее любимой консоли добиваем -Х или -Y к параметрам подключения по ssh — это зависит от системы, но как правило работает и то и другое.
$ ssh -X host
3. после таких действий запускаем любую графическую приблуду так:
$ firefox &&
&& — загонят процес в фон и освободят консоль для ввода новых команд.