Сабж

Узрел на одном сайте в интернете, и еще на одном, что делиться Х-ами, как это сделано в одном из постов, не очень безопасно. Все потому, что любое приложение может делать снимки экрана / запись, без твоего ведому... Наверно на Waylend такого нет, а на виндах ваших и подавно. Но я не проверял.

Xpra

Собственно для этого, Илон Маск и придумал Xpra. On X11, it is also known as screen for X11: it allows you to run programs, usually on a remote host, direct their display to your local machine, and then to disconnect from these programs and reconnect from the same or another machine, without losing any state.

Почти

Подключиться к Xpra можно по ssh,tcp,unix socket и наверно еще как-то. В этом посте будет про подключение по unix socket. У меня получалось подключаться по всем вышеуказанным способам, кроме “еще как-то”. Но так как lxc-контейнер, будет запущен на локальной машине, то unix socket должен быть самым быстрым (замеры не замерял).

Пишут, что Xpra умеет еще и звук передавать. Но у меня не получилось настроить. Для звука, буду использовать PulseAudio.

Для подключения по unix socket, нужно этот сокет пробросить из контейнера на хост. Т.к. unix socket это файл, то достаточно этот файл сделать общим между контейнером и хостом. Про настройку шары (общей директории) и PulseAudio есть в пред. постах[1][2].

Погнали

Запускаем контейнер и ставим в нем Xpra (тянет за собой много зависимостей).

$ lxc start c1
$ lxc shell c1
ubuntu@c1:~$ sudo apt-get install xpra xterm mesa-utils

xterm и mesa-utils пригодятся позже.

Запускаем Xpra с трансляцией / соединением через unix socket, с указанием где создавать сокет. В нашем случаем, создаем сокет в шаре (общей директории).

ubuntu@c1:~$ xpra start --start=xterm --socket-dir=/home/ubuntu/share/

Так же пожно запустить, как показано ниже. Тогда при закрытии xterm, Xpra сама закроет сессию.

ubuntu@c1:~$ xpra start --exit-with-children --start=child=xterm --socket-dir=/home/ubuntu/share/

Посмотреть список запущенных сессий, можно командой xpra list. Для остановки сесий, есть команда stop <session>. xpra stop останавливает все сессии.

Далее, на хосте, выполняем команду.

$ cd container_shared_dir
$ xpra attach socket:c1-0 

Где container_shared_dir - общая директория (шара), а c1-0 - созданный сокет (с1 - имя хоста контейнера, 0 - номер экрана). Имя сокета может быть другим.

Должно появится окно инициализаци Xpra client, а следом окно xterm контейнера. Для тестов, запускал glxgears и смотрел видео на mpv. Все работало нормально, без тормозов. Игры не пробовал.
glxgears

P.S. XRDP

Нашел интересный пост на редите, про вариант с xrdp. Пробовать не стал. Смысл здесь в том, что в контейнер ставится легкое окружение рабочего стола (Desktop Environment) LXDE / LXQT, а далее:

$ sudo apt install xrdp
$ sudo apt install xorgxrdp
$ sudo apt install xrdp-pulseaudio-installer

Заинтересовал пакет xrdp-pulseaudio-installer. Т.е. звук тоже должен быть. По началу думал что даже легкий DE, будет большим, но сам пакет xpra тянет за собой кучу зависимостей. Так что теперь вариант с DE мне видится нормальным.