Запуск 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.local1) следующую строку:

sudo -H -u имяпользователя VNCAPP=/usr/local/vuze/vuze vncserver -depth 24

Теперь, при старте системы, автоматически запускается сессия VNC, внутри которой живёт (и уже начинает закачки) графический торрент-клиент. Логиниться в систему, и вообще, запускать Иксы, для этого абсолютно не обязательно. А когда я всё же залогинюсь и решу проверить, не скачалось ли уже чего-то нового, я могу c любого компьютера своей локальной сети либо воспользоваться веб-интерфейсом Azureus'а, либо, что удобнее, подключиться VNC-клиентом на “имякомпьютера:1” и увидеть GUI программы.

И что ещё очень немаловажно – запущенный таким способом торрент-клиент (да и любая другая программа) спокойно переживает логауты-перелогины, убивания и перезапуски основного графического X-сервера, поскольку от этого в худшем случае лишь закроется подключенный VNC-клиент, а для VNC-сервера основанием для завершения работающей сессии это не является.

Ссылки

1) в Debian это выполняющийся самым последним в процессе загрузки скрипт

persistent-apps-in-vnc.txt · Last modified: 2013-08-23 06:20 UTC by rm