22 мая 2014 г.

Vino - стандартный VNC-сервер многих Linux-дистрибутивов или как настроить удаленный доступ на свой Linux

Недавно столкнулся с проблемой неработоспособности удаленного рабочего стола в Linux Debian. По-умолчанию за подключение удаленно к рабочему столу по протоколу VNC отвечает демон vino.

Конфигурационных файлов в /etc он не имеет, в init.d его тоже нет. Чтобы его настроить делаем следующее:

1. Нужно дописать опцию Enable=true в секции “xdmcp” конфига /etc/gdm3/daemon.conf для Gnome 3.

2. Заходим в консоль под нашим десктопным пользователем и вызываем окно настроек Vino:

vino-preferences

Откроется окно вроде такого:


Где указываем отмечаем галочки и устанавливаем пароль.
Также в опции vino можно зайти через апплет Desktop Sharing или Remote Desktop (смотря какой дистрибутив).

Если отметить опцию Configure network automatically to accept connections, то vino будет открывать порт на роутере (если там разрешен UPnP) 5900 наружу, в Интернет, что обычно не желательно.

3. Запускаем собственно демона:

export DISPLAY=:0.0
xhost +/usr/lib/vino/vino-server &
netstat -nl | grep 5900
Последняя команда служит для проверки того, что vino запустился и слушает порт 5900.

4. Теперь с другой машины, которая имеет доступ к нашей пробуем подключиться (для Windows это можно сделать при помощи бесплатных программ TightVNC или UltraVNC).

Настройки по-умолчанию должны сработать.

5. Теперь проблема в том, что vino не стартует со стартом системы и не имеет скрипта запуска. И стартовать он должен с тем пользователем, на который планируется удалённый вход. Для этого нужно добавить в файл /home/username/.bashrc в конец следующие строчки:

export DISPLAY=:0.0
/usr/lib/vino/vino-server &

Теперь vino будет стартовать автоматически когда этот пользователь входит в систему и принимать удаленные подключения.

UPDATE:

Обнаружил, что при таком тексте .bashrc каждый раз, когда открываешь терминальную сессию, то vino ругается в консоль, что он уже запущен. Посему необходимо изменить текст на следующий, включающий в себя проверку:

export DISPLAY=:0.0
ps cax | grep vino-server > /dev/null
if [ $? -ne 0 ]; then
  /usr/lib/vino/vino-server &
fi

Ссылки:
  1. http://debian-handbook.info/browse/wheezy/sect.remote-login.html
  2. http://ubuntuforums.org/showthread.php?t=266981&s=bdce9ca764aeb4ff4abf932220541d93
  3. http://stackoverflow.com/questions/9117507/linux-unix-command-to-determine-if-process-is-running