Задача

Мне нужно опубликовать графическое приложение Linux, которое исполняется в lxc-контейнере, средствами Citrix.
Применить стандартный подход, когда на linux-машину устанавливается VDA - не получается, поскольку VDA требует прямого доступа к устройствам, а в контейнере это можно сделать не всегда.
В идеале после аутентификации на StoreFront пользователь должен видеть иконку приложения, кликать ее и получать окно linux-приложения (или графическое рабочее окружение), исполняющееся в lxc-контейнере.

Реализация

У меня есть lxc-контейнер с установленой в нем оболочкой XFCE, тестовая ферма Citrix, с сервером, на котором я могу публиковать windows-приложения.
На Windows-сервере я запускаю X-сервер VcXsrv Windows X Server к которому будет подключаться графическое приложение-клиент (xfce4-session) для отображения своих окон.
Для тестирования, при запуске VcXsrv я его настраиваю так:

  1. Display settings: One Large Window, Display number - 10.
  2. Select how to start clients: Start a Program
  3. Specify program to start: Start program on remote computer
    • Remote program:
DISPLAY=__win_host_name_or_ip__:10.0 xfce4-session &
  • Password: linux user password
  • Connect to computer: IP-адрес (или имя) lxc-контейнера
  • Login as user: имя пользователя в контейнере
  1. Extra Settings: Disable access control.

В итоге - VcXsrv подключится к контейнеру по протоколу SSH и запустит там сессию XFCE, используя в качестве X-сервера VcXsrv

Подключение существующих сессий

Например, я уже имею подключенную GUI-сессию с приложениями в lxc-контейнере. Пользователь имеет доступ через xrdp. Мне нужно, чтобы приложения (клиенты) этой GUI-сессии переехали на другой X-сервер (с локального X-сервера на удаленный).
http://xpra.org/

В двух словах как работает xpra. На машине (или в контейнере) можно запустить что-то типа:

xpra start --start=firefox

И в результате на машине (или в контейнере) режиме демона запустится X-сервер к которому присоединится окошко firefox.
А дальше можно запустить на удаленной машине (linux или windows) xpra в режиме клиента (на самом деле клиент и сервер xpra - это одна и та же софтина) и выполнить attach к этому окошку. Соединение приоизойдет по одному из протоколов (ssh, tcp, ssl и всякое разное).
Вместо firefox можно запустить и сессию рабочего стола.
Этот X-сервер будет работать в контейнере независимо от может быть уже запущенного Xorg.

Запуск приложений с помощью xpra

xpra --start=code --username=mike --ssh="ssh -p 223" ssh:localhost
Enter your comment. Wiki syntax is allowed:
 
  • linux_faq/using_windows_xserver_vcxsrv_with_graphical_applications_running_in_lxc_container.txt
  • Last modified: 2020/09/08 07:25
  • by admin