Запуск GUI-приложений внутри отдельных VNC-сессий
Впервые опубликовано 2009-02-19.
В статье описывается способ запуска произвольных GUI-приложений в отдельных (по одной на приложение) сессиях VNC.
Зачем это нужно?
- Запущенные таким образом программы не зависят от состояния (и вообще, наличия) основного X-сервера на компьютере.
- Их можно прописать в автозапуск при старте системы без необходимости устанавливать и настраивать графическую среду, а также включать автоматический вход в неё какого-либо пользователя.
- Подключаться и работать с ними можно с помощью любого VNC-клиента, с любого (по умолчанию) компьютера сети.
По сути, получаем некоторый аналог инструмента screen
, только не для консольных, а для графических приложений.
updated 2013-08-23, похоже появился альтернативный и более “прямой” метод решения той же задачи: “Xpra is 'screen for X': it allows you to run X programs, usually on a remote host and direct their display to your local machine.” – http://xpra.org/
1. Установка VNC-сервера и клиента
На примере Debian:
$ sudo apt-get install vnc4server xvnc4viewer xfonts-base
Далее следует задать пароль для доступа к VNC-сессии. Вводим пароль дважды (на экране он не отображается):
$ vncpasswd Password: Verify: $
2. Создание (или изменение) файла ~/.vnc/xstartup
Придаём файлу ~/.vnc/xstartup
следующий вид (если создали его с нуля, также необходимо будет выполнить chmod +x ~/.vnc/xstartup
:
#!/bin/sh if [ -z "$VNCAPP" ] then # Uncomment the following two lines for normal desktop: # unset SESSION_MANAGER # exec /etc/X11/xinit/xinitrc [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic & x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & x-window-manager & else xsetroot -solid black vncconfig -iconic & x-window-manager & $VNCAPP sleep 10 vncserver -kill $DISPLAY fi
Здесь производится проверка, задана ли переменная окружения “VNCAPP”.
- Если не задана, поведение скрипта полностью идентично его варианту по умолчанию в текущей версии Debian;
- Если задана, то запускается указанная в этой переменной программа, а после её завершения делается небольшая пауза и прибивается сам VNC-сервер.
3. Проверка
Запускаем в командной строке:
VNCAPP=xcalc vncserver -depth 24
Данной командой будет запущен VNC-сервер, а внутри него – одно единственное приложение, xcalc
. Можно подключиться и посмотреть:
xvnc4viewer имякомпьютера:1
Через несколько секунд после закрытия калькулятора, VNC-сервер завершит работу.
4. Практическое применение
Лично мне это нужно было для того, чтобы добавить BitTorrent-клиент Vuze (Azureus) в автоматическую загрузку при старте системы, не теряя при этом возможности пользоваться его графическим интерфейсом, но и не активируя на компьютере автологин (без пароля) в Иксы под своим пользователем.
Проведя вышеуказанные действия, я добавил в файл /etc/rc.local
1) следующую строку:
sudo -H -u имяпользователя VNCAPP=/usr/local/vuze/vuze vncserver -depth 24
Теперь, при старте системы, автоматически запускается сессия VNC, внутри которой живёт (и уже начинает закачки) графический торрент-клиент. Логиниться в систему, и вообще, запускать Иксы, для этого абсолютно не обязательно. А когда я всё же залогинюсь и решу проверить, не скачалось ли уже чего-то нового, я могу c любого компьютера своей локальной сети либо воспользоваться веб-интерфейсом Azureus'а, либо, что удобнее, подключиться VNC-клиентом на “имякомпьютера:1” и увидеть GUI программы.
И что ещё очень немаловажно – запущенный таким способом торрент-клиент (да и любая другая программа) спокойно переживает логауты-перелогины, убивания и перезапуски основного графического X-сервера, поскольку от этого в худшем случае лишь закроется подключенный VNC-клиент, а для VNC-сервера основанием для завершения работающей сессии это не является.