Настройка удаленного рабочего стола (VNC, x11vnc)
С линуксом жизнь становится интересней, я бы даже сказал экспериментальней!
Меня потянуло на эксперименты с ssh, и то, что я получил в итоге — доступ с работы к домашнему компу — мне очень понравилось! Еще бы — классно управлять домашним компом, обновлять его и т.п. С девушкой даже с помощью festival разговаривал)))
Однако, захотелось пойти дальше, интересно, можно ли настроить удаленный доступ к рабочему столу, как позволяет это RAdmin в Windows? Можно конечно! Надо только настроить))
Покопался в интернете, нашел несколько статей про VNC — Virtual Network Computing, решил такое счастье сделать и у себя!
Для этого сначала необходимо было поставить несколько утилит:
sudo aptitude install vnc4-common vnc4server xvnc4viewer
Эти утилиты необходимы непосредственно для того, чтобы запускать удаленный сервер (vnc4server) и подключаться к нему с удаленного клиента (xvnc4viewer).
Установили! Теперь дело остается за малым: сначала нужно запустить vnc-сервер, а потом подключиться к нему.
Для запуска удаленного сервера, нужно в консоли набрать
Если это первый запуск 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 и т.д.
Теперь попробуем зайти на этот сервер с удаленной машины. Для этого необходимо в консоли удаленного клиента ввести команду:
В этой команде __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 заменил строчку
В итоге у меня получилось вот так:
Нормально для работы. Но не айс! Оперу можно запустить, еще некоторые приложения, но далеко не все (приложения kde выламываются)! Пробовал я вместо fluxbox’a запустить kde, но не пошло… Играет приветствие входа в систему, но вылетает окно с крахом плазмы и все, черный экран, занавес…
В итоге я получил удаленный доступ, но не такой как хотел! Мне-то хотелось иметь доступ к текущему рабочему столу, а не к мифическому дисплею 1, на котором загружается fluxbox, но не kde.
Что делать? Надо копать еще.
Я поискал в репозиториях пакеты, в названии которых присутствует «vnc», список оказался не очень большой, я начал читать комментарии к утилитам и библиотекам… В самом конце списка я увидел такую строчку:
p xvnc4viewer — Virtual network computing client software for X
Очень похоже на то, что мне нужно!
Я установил x11vnc. man у этой утилиты знатный, несколько тысяч строк)) После небольшого его изучения я более менее разобрался с процедурой запуска и назначением утилиты.
Итак, x11vnc является фактически удаленным сервером (как и vncserver), но позволяет получать доступ к уже существующей X-сессии!
На машине, к которой необходимо подключиться:
Эта команда позволит позаимствовать пароль для подключения к серверу из файла ~/.vnc/passwd (тут лежит пароль, который был задан при первом запуске vncserver). Далее непосредственно запустим x11vnc:
Опция -usepw задействует использования пароля при подключении к серверу, -display :0 — запускает сервер на нулевом дисплее (так, где открыта текущая X-сессия).
Теперь мы с удаленной машины можем подключиться к текущей X-сессии, выполнив
При закрытии окна удаленного рабочего стола, завершается и работа x11vnc (на сервере)
Таким образом, я получил то, что хотел))))
Напоследок приведу несколько опций для утилит vncserver, x11vnc и vncviewer, облегчающих траффик и жизнь))
- -kill :n — завершает работу терминального сервера на дисплее n (порту 590n), если он раньше был запущен
- -geometry 800×600 — устанавливает размер создаваемого рабочего стола (по умолчанию 1024×768)
- -depth depth — устанавливает глубину цвета в битах, по умолчанию 16 бит, можно изменить на 8, 15, 24
- Для запуска VNC-сервера с определенным номером (дисплеем) используется команда vncserver :n
- -q — уменьшает вывод отладочной информации в stderr
- -forever — данная опция не завершает работу x11vnc-сервера, когда первый клиент отключается, а ждет следующих подключений
- -geometry 800×600 — устанавливает размер окна, в котором будет отображаться удаленный рабочий стол. Если указанный размер меньше размера удаленного стола, то появятся полосы прокрутки
- -compressionlevel n — устанавливает уровень сжатия данных. Значение n варьируется от 0 до 9, 9 — наилучшее сжатие (качество, соответственно, хуже)
- -quality m — влияет на качество картинки. m варьируется от 0 до 9, 0 — наихудшее качество изображения (меньше траффик)
- -depth depth — если X-сервер поддерживает различные значения глубины цвета, то можно попытаться подобратьоптимальное значение (в битах)
- -viewonly — опция, позволяющая подключившемуся пользователю только наблюдать за тем, что происходит на удаленной машине, средства управления (мышь, клавиатура) недоступны
x11vnc -usepw -display :0 -q -forever &
и указать, что он должен запускаться до старта KDE!
Install vnc server and client on Ubuntu
VNC stands for Virtual Network Computing or in simple terms its ‘Remote Desktop’. It allows a system to access the desktop of another system. Now lets see how vnc can be done on ubuntu.
$ sudo apt-get install vnc4server xvnc4viewer
1. vnc4server — This is the vnc server application. It is run on the system which is to be viewed remotely.
2. xvnc4viewer — This is the client application. It will connect to a remote vnc system.
Setup the vnc password
The vnc client that will connect to this vnc server will need to use a password. Hence a password must first be setup. This can be done using the vncpasswd command. Remember that the password file is located at ~/.vnc/passwd
$ vncpasswd ~/.vnc/passwd Password: Verify:
Or you can simply run the vncpasswd command only
$ vncpasswd Password: Verify:
Launch the vnc server
desktop:~$ vncserver :12 -geometry 1024x768 New 'enlightened-desktop:12 (enlightened)' desktop is enlightened-desktop:12 Starting applications specified in /home/enlightened/.vnc/xstartup Log file is /home/enlightened/.vnc/enlightened-desktop:12.log
The :12 is the display number. It can be any number and will open vncserver on that number. You can have multiple vncservers running. If you are running vncserver command for the first time it will ask for a password.
Connect using VNC Client
Once vncserver is running , its time to run the vnc client.
$ vncviewer localhost:12 VNC Viewer Free Edition 4.1.1 for X - built Feb 5 2012 20:01:21 Copyright (C) 2002-2005 RealVNC Ltd. See http://www.realvnc.com for information on VNC. Tue Aug 7 18:27:59 2012 CConn: connected to host localhost port 5912 CConnection: Server supports RFB protocol version 3.8 CConnection: Using RFB protocol version 3.8 Password:
It will first ask for the server. Enter localhost:12 . The format can be ipaddress:display_number
Next it will ask for the password. Use the password that was setup in the previous steps.
Now a VNC window will open up with a terminal showing.
The man page of xvnc4viewer says :
vncviewer is a viewer (client) for Virtual Network Computing. This manual page documents version 4 for the X win-dow system. If you run the viewer with no arguments it will prompt you for a VNC server to connect to. Alternatively, specify the VNC server as an argument, e.g. : vncviewer snoopy:2 where 'snoopy' is the name of the machine, and '2' is the display number of the VNC server on that machine. Either the machine name or display number can be omitted. So for example ":1" means display number 1 on the same machine, and "snoopy" means "snoopy:0" i.e. display 0 on machine "snoopy". If the VNC server is successfully contacted, you will be prompted for a password to authenticate you. If the password is correct, a window will appear showing the desktop of the VNC server.
Close server after finishing
After the vnc session is complete the vnc server should close the display.
$ vncserver -kill :12 Killing Xvnc4 process ID 23664
The above approach of establishing a vnc connection has certain limitations. It requires the server machine to have a publicly accessible IP address or have the necessary port forwarding setup so that vnc client can reach it on the correct port number.
In reverse vnc, the vnc server connects to the vnc client. This is done when the server neither has a public ip, nor can do port forwarding. However the client must have a public ip or must be able to do the necessary port forwarding.
Resources
1. https://help.ubuntu.com/community/VNC
2. https://help.ubuntu.com/community/VNC/Clients
3. https://help.ubuntu.com/community/VNC/Servers
4. https://help.ubuntu.com/community/VNC/Reverse
A Tech Enthusiast, Blogger, Linux Fan and a Software Developer. Writes about Computer hardware, Linux and Open Source software and coding in Python, Php and Javascript. He can be reached at [email protected] .