Включаем Remote Desktop в Ubuntu 10.10

Как я уже писал, в Ubuntu служба удаленного рабочего стола не стартует, если к компьютеру не подключен монитор. Штатные возможности для предоставления доступа к рабочему столу в Ubuntu имеются (System > Preferences > Remote Desktop), но это будет работать до первой загрузки компьютера без монитора. Логики маловато. Если компьютер под управлением Ubuntu планируется превратить в домашний сервер, то безусловно, он должен управляться через Remote Desktop и при этом находиться где-нибудь в укромном месте, будучи подключенным лишь к питанию и к сети.


Что-ж, проблема есть, будем решать! Погуглив, я нашел статью «HOWTO: Set up VNC server with resumable sessions» в которой удаленный рабочий стол организовывается с помощью vnc4server. Однако этот способ у меня отказывался работать в различных вариантах даже после n-переустановок системы. Как и у многих пользователей, отписавшихся в комментариях – сервис стартует, можно подключиться к определенному порту, однако сессия пользователя не стартует – в итоге видим серый экран с крестиком вместо курсора.

Значительно веселее заработал способ с помощью tightvncserver&xterm найденный здесь: «How to connect to your headless server with VNC/GUI goodness» Если доработать этот способ вот так: «Automatically start VNC server on startup» то получается очень даже ничего решение – служба удаленного рабочего стола стартует вместе с системой, можно настраивать размер окна, глубину цвета и т.п. Теперь обо всем подробнее.

Для начала заходим как root! (Вы ведь уже поставили SSH на свою Linux-коробочку? Если нет, то читаем «Basic SSH Setup On Ubuntu 10.04 Lucid Lynx Using OpenSSH Server» и делаем.) Зайти как root важно, так как в будущем установленные приложения будут запускаться от root при старте системы, если вы установите и настроите приложения используя просто sudo – все файлы окажутся вашими, и система не сможет их использовать. Чтобы зайти как root используем команду:

sudo -i

Теперь устанавливаем необходимые пакеты:

apt-get install tightvncserver xfonts-base xfonts-75dpi twm xterm

Программа установки установит 3 новых пакета (остальные пакеты, как правило уже есть в системе): menu, tightvncserver, twm

Создаем файл настроек:

pico /etc/vnc.conf

(Все команды без sudo так как мы работаем от root)

И прописываем в него строку:

$fontPath = "/usr/share/fonts/X11/75dpi/,/usr/share/fonts/X11/misc/"

Запускаем VNC сервер с параметрами:

vncserver -depth 8 -geometry 800x600 -nevershared -dontdisconnect

При первом запуске vnc-сервер попросить нас задать пароль, который будет использоваться для доступа к удаленному рабочему столу. Здесь нельзя использовать длинный пароль – обычно VNC пароль длиной до 8 символов.

Потом нас спросят, хотим ли мы задать view-only пароль? Или задаем или нет, по вкусу.

VNC сервер скажет такое:

xauth: creating new authority file /root/.Xauthority
New 'X' desktop is Atom:1
Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/Atom:1.log

это значит, что файл, в котором хранится пароль (это пока пароль к root-сессии) находится здесь: /root/.Xauthority

Теперь сканируем наш хост на открытые порты с 5900 до 5901. Открытым должен оказаться порт 5901 – к нему и нужно подключаться любым VNC клиентом. Обычно в VNC клиенте следует указать порт 5900 и номер дисплея – 1. Некоторые VNC клиенты по умолчанию используют порт 5900 и требуют только указания номера дисплея.

При подключении мы должны увидеть рабочий стол и root-сессию, типа такого:

Если необходимо остановить сессию, то используем команду:

vncserver -kill :1

Так как удаленный рабочий стол автоматически загружается в root-сессию, это не очень удобно – мы ведь хотим видеть именно свой рабочий стол. Поэтому целесообразно настроить сервер так, чтобы «экспортировался» рабочий стол определенного пользователя. Сделаем это вместе со следующим шагом – чтобы удаленный рабочий стол стартовал при загрузке системы.

Создаем файл vncserver в /etc/init.d:

pico /etc/init.d/vncserver

(Здесь мы создаем файл при помощи текстового редактора pico. sudo не используем так как у нас root-сессия)

В файле прописываем следующее (отредактируйте имя пользователя, размеры экрана, и название которое будет в заголовке окна, здесь это Atom):

#!/bin/sh -e
### BEGIN INIT INFO
# Provides: vncserver
# Required-Start: networking
# Default-Start: S
# Default-Stop: 0 6
### END INIT INFO
PATH="$PATH:/usr/X11R6/bin/"
# The Username:Group that will run VNC
export USER="andrey"
#${RUNAS}
# The display that VNC will use
DISPLAY="1"
# Color depth (between 8 and 32)
DEPTH="16"
# The Desktop geometry to use.
#GEOMETRY="x"
#GEOMETRY="800x600"
GEOMETRY="1024x768"
#GEOMETRY="1280x1024"
# The name that the VNC Desktop will have.
NAME="Atom"
OPTIONS="-name ${NAME} -depth ${DEPTH} -geometry ${GEOMETRY} :${DISPLAY}"
. /lib/lsb/init-functions
case "$1" in
start)
log_action_begin_msg "Starting vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver ${OPTIONS}"
;;
stop)
log_action_begin_msg "Stoping vncserver for user '${USER}' on localhost:${DISPLAY}"
su ${USER} -c "/usr/bin/vncserver -kill :${DISPLAY}"
;;
restart)
$0 stop
$0 start
;;
esac
exit 0

И присваиваем файлу бит «executable»:

chmod +x /etc/init.d/vncserver

Пробуем запустить сервис:

/etc/init.d/vncserver start

Теперь уже, так как будет стартовать рабочий стол определенного пользователя (а не root), система попросит нас ввести пароль для этой сессии:

root@Atom:~# /etc/init.d/vncserver start
* Starting vncserver for user 'andrey' on localhost:1...
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
xauth: creating new authority file /home/andrey/.Xauthority
New 'Atom' desktop is Atom:1
Creating default startup script /home/andrey/.vnc/xstartup
Starting applications specified in /home/andrey/.vnc/xstartup
Log file is /home/andrey/.vnc/Atom:1.log

Сканируем порты 5900-5901, открытым должен быть 5901, пробуем подключиться, должны увидеть рабочий стол выбранного пользователя.

Теперь пропишем скрипт в автозагрузку:

update-rc.d vncserver defaults

Система покажет несколько предупреждений, это связано с тем, что «runlevels» которые мы прописали в стартап-скрипте (старт S, стоп 0,6) не соответствуют ранлевелам по умолчанию. Для тех кому это не дает спокойно спать – разберитесь как модифицировать команду update-rc.d vncserver defaults чтобы она использовала не уровни работы по умолчанию, а брала их из скрипта. Так как разбираться с runlevels сейчас не принципиально, оставим это как тему для отдельного материала.

root@Atom:~# update-rc.d vncserver defaults
update-rc.d: warning: /etc/init.d/vncserver missing LSB keyword 'required-stop'
update-rc.d: warning: vncserver start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (S)
update-rc.d: warning: vncserver stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (0 6)
Adding system startup for /etc/init.d/vncserver ...
/etc/rc0.d/K20vncserver -> ../init.d/vncserver
/etc/rc1.d/K20vncserver -> ../init.d/vncserver
/etc/rc6.d/K20vncserver -> ../init.d/vncserver
/etc/rc2.d/S20vncserver -> ../init.d/vncserver
/etc/rc3.d/S20vncserver -> ../init.d/vncserver
/etc/rc4.d/S20vncserver -> ../init.d/vncserver
/etc/rc5.d/S20vncserver -> ../init.d/vncserver

Перезагружаемся и пробуем подключаться к рабочему столу! Обратите внимание, что VNC пароль по умолчанию передается в небезопасном виде, равно как и вводимые с клавиатуры данные. Поэтому не стоит использовать этот способ для совсем удаленного администрирования домашнего сервера. Только из локальной сети. Впрочем, можно настроить VNC через SSH туннель, но это опять-таки тема для другой статьи. А еще можно использовать удаленный рабочий стол через VPN, например, настроив VPN PPTP сервер – это безопасно.

Вы можете оставить комментарий, или ссылку на Ваш сайт.

1 комментарий к записи “Включаем Remote Desktop в Ubuntu 10.10”

  1. [...] управлять сервером через Remote Desktop, ведь пароль на общий доступ к экрану обычно [...]

Оставить комментарий

Вы должны быть авторизованы, чтобы разместить комментарий.