1 заметка с тегом

linux vnc

Удаленный рабочий стол (VNC, x11vnc). Настройка

4 мая 2012, 12:15
9.10 Karmic Koala
Voyageur — 24 Июнь, 2009 — 13:30


С линуксом жизнь становится интересней, я бы даже сказал экспериментальней!
Меня потянуло на эксперименты с ssh, и то, что я получил в итоге — доступ с работы к домашнему компу — мне очень понравилось! Еще бы — классно управлять домашним компом, обновлять его и т. п. С девушкой даже с помощью festival разговаривал)))
Однако, захотелось пойти дальше, интересно, можно ли настроить удаленный доступ к рабочему столу, как позволяет это RAdmin в Windows? Можно конечно! Надо только настроить))

Покопался в интернете, нашел несколько статей про VNC — Virtual Network Computing, решил такое счастье сделать и у себя!
Для этого сначала необходимо было поставить несколько утилит:
sudo aptitude install vnc4-common vnc4server xvnc4viewer
Эти утилиты необходимы непосредственно для того, чтобы запускать удаленный сервер (vnc4server) и подключаться к нему с удаленного клиента (xvnc4viewer).
Установили! Теперь дело остается за малым: сначала нужно запустить vnc-сервер, а потом подключиться к нему.
Для запуска удаленного сервера, нужно в консоли набрать
vncserver
Если это первый запуск vncserver в системе с этой учётной записью пользователя, тогда вы должны ввести пароль, который клиенты будут использовать при подключении, после чего запустится сервер, который будет доступен на порту 5901. Кстати, при запуске сервера в консоль выведется номер дисплея (виртуального), на котором он будет доступен, отсчет ведется с 1 (так как 0 — текущий дисплей). Пример запуска:
igor@Voyageur:~$ vncserver

New 'Voyageur:1 (igor)' desktop is Voyageur:1

Starting applications specified in /home/igor/.vnc/xstartup
Log file is /home/igor/.vnc/Voyageur:1.log
Здесь строчка New 'Voyageur:1 (igor)' desktop is Voyageur:1 как раз говорит о том, что у меня компе запустился сервер на дисплее 1, доступен он на порту 5901.
Если vncserver запустить еще раз, то загрузится новый терминальный сервер :2 на порту 5902 и т. д.
Теперь попробуем зайти на этот сервер с удаленной машины. Для этого необходимо в консоли удаленного клиента ввести команду:
vncviewer __hostname__:1
В этой команде __hostname__ — это имя или ip машины, на которой запущен удаленный сервер. Далее необходимо будет ввести пароль и в результате появится приблизительно вот такое окно:


Немного не то я ожидал увидеть если честно)) Начал разбираться, и оказалось, что vncserver запускает лишь новую сессию, а не подключается к текущей, именно для этого и нужны виртуальные дисплеи. А в этой сессии запущены twm (Tab Window Manager for the X Window System) и xterm.
Между прочим это все добро запускается из скрипта ~/.vnc/xtartup, который можно редактировать, удаляя ненужные и добавляя свои строчки запуска необходимых приложений. В самом верху скрипта есть небольшой комментарий:
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
То есть, чтобы получить нормальный рабочий стол, нужно раскомментировать 2 строчки. Я их раскомментировал, но ничего хорошего из этого у меня не вышло.
Посмотрел я на этот twm, и решил, что с этим убожеством работать нельзя. Я установил fluxbox (занимает всего 6 Мб) и в скрипте xstartup заменил строчку
twm &
на
fluxbox &
В итоге у меня получилось вот так:


Нормально для работы. Но не айс! Оперу можно запустить, еще некоторые приложения, но далеко не все (приложения kde выламываются)! Пробовал я вместо fluxbox'a запустить kde, но не пошло...Играет приветствие входа в систему, но вылетает окно с крахом плазмы и все, черный экран, занавес...

В итоге я получил удаленный доступ, но не такой как хотел! Мне-то хотелось иметь доступ к текущему рабочему столу, а не к мифическому дисплею 1, на котором загружается fluxbox, но не kde.

Что делать? Надо копать еще!!!
Я поискал в репозиториях пакеты, в названии которых присутствует «vnc», список оказался не очень большой, я начал читать комментарии к утилитам и библиотекам...В самом конце списка я увидел такую строчку:
p xvnc4viewer  — Virtual network computing client software for X
Очень похоже на то, что мне нужно!
Я установил x11vnc...man у этой утилиты знатный, несколько тысяч строк)) После небольшого его изучения я более менее разобрался с процедурой запуска и назначением утилиты.
Итак, x11vnc является фактически удаленным сервером (как и vncserver), но позволяет получать доступ к уже существующей X-сессии!
На машине, к которой необходимо подключиться:
x11vnc -storepasswd
Эта команда позволит позаимствовать пароль для подключения к серверу из файла ~/.vnc/passwd (тут лежит пароль, который был задан при первом запуске vncserver). Далее непосредственно запустим x11vnc:
x11vnc -usepw -display :0
Опция -usepw задействует использования пароля при подключении к серверу, -display :0 — запускает сервер на нулевом дисплее (так, где открыта текущая X-сессия).
Теперь мы с удаленной машины можем подключиться к текущей X-сессии, выполнив
vncviewer __hostaname__:0
и введя пароль.


При закрытии окна удаленного рабочего стола, завершается и работа x11vnc (на сервере)
Таким образом, я получил то, что хотел))))
Напоследок приведу несколько опций для утилит vncserver, x11vnc и vncviewer, облегчающих траффик и жизнь))
vncserver
-kill :n — завершает работу терминального сервера на дисплее n (порту 590n), если он раньше был запущен
-geometry 800x600 — устанавливает размер создаваемого рабочего стола (по умолчанию 1024x768)
-depth depth — устанавливает глубину цвета в битах, по умолчанию 16 бит, можно изменить на 8, 15, 24
Для запуска VNC-сервера с определенным номером (дисплеем) используется команда vncserver :n

x11vnc
-q — уменьшает вывод отладочной информации в stderr
-forever — данная опция не завершает работу x11vnc-сервера, когда первый клиент отключается, а ждет следующих подключений

vncviewer
-geometry 800x600 — устанавливает размер окна, в котором будет отображаться удаленный рабочий стол. Если указанный размер меньше размера удаленного стола, то появятся полосы прокрутки
-compresslevel n — устанавливает уровень сжатия данных. Значение n варьируется от 0 до 9, 9 — наилучшее сжатие (качество, соответственно, хуже)
-quality m — влияет на качество картинки. m варьируется от 0 до 9, 0 — наихудшее качество изображения (меньше траффик)
-depth depth — если X-сервер поддерживает различные значения глубины цвета, то можно попытаться подобратьоптимальное значение (в битах)
-viewonly — опция, позволяющая подключившемуся пользователю только наблюдать за тем, что происходит на удаленной машине, средства управления (мышь, клавиатура) недоступны

P.S. Кстати, если нужно, чтобы x11vnc запускался автоматически, то для этого его нужно добавить в автозагрузку: в Настройках системы выбрать пункт Автозагрузка (на второй вкладке), там добавить скрипт
x11vnc -usepw -display :0 -q -forever &
и указать, что он должен запускаться до старта KDE!
linux vnc   ubuntu