Как запустить приложения X11 удаленно?
Как запустить приложения X11, размещенные на удаленном сервере, с учетом следующих целей:
- Запустите все, что будет работать локально на сервере. Это включает в себя приложения OpenGL, которые используют
GLX
, - Непревзойденная интеграция с локальным рабочим столом, то есть приложения выглядят так, как будто они работают локально, без отдельной области рабочего стола. Таким образом, мне нужно решение X11, а не протокол оболочки.
- Предпочтительно, чтобы приложения продолжали работать, если я отключился; затем я могу снова открыть запущенные приложения при повторном подключении.
Я видел много советов о суперпользователе, но многие из них являются частичным исправлением или просто плохим.
- обычный SSH
X11-Forwarding
отсутствует: он не может запускать определенные приложения, особенно те, которые зависят от расширения GLX. - настройка
LIBGL_ALWAYS_INDIRECT=1
не работает для меня. Xephyr
также отсутствует. В настоящее время он не поддерживает GLX, хотя я видел некоторые работы GLX в дереве разработки. Возможно, в будущем это будет самый чистый путь.xmove
также отсутствует. Слишком стар, чтобы обсуждать дальше.- VNC отсутствует. Он пересылает весь рабочий стол и не может использовать протокол X.
РЕДАКТИРОВАТЬ: я боролся за выходные, чтобы выработать несколько предложений, и xpra
это то, что работает лучше всего. Я описал мои настройки в ответе ниже, и я надеюсь, что это поможет кому-то еще.
1 ответ
Xpra (как упомянуто здесь) делает то, что я хочу. Это позволяет запускать произвольные X-приложения, которые можно пересылать нескольким клиентам, либо на одном компьютере, либо на другом компьютере. Он также поддерживает запуск приложений OpenGL и позволяет вашим приложениям продолжать работу даже после отключения последнего клиента, что дает вам возможность восстановить соединение позже.
xpra
поставляется в двух частях: клиент и сервер. Чтобы запустить сервер, запустите на удаленном компьютере следующее:
$ xpra start :100
Это начинается xpra
на новом дисплее X (Есть обходной путь для использования с прокси.)
Чтобы приложение контролировалось xpra
, запустите его на том же дисплее, что и xpra
сервер, как это:
$ export DISPLAY=:100
$ firefox&
$ blender&
...
Все это может быть сделано через соединение ssh (с или без пересылки X11) без проблем.
Чтобы запустить клиента, выполните одно из следующих действий:
$ ssh -X user@remotehost
<gain remote connection>
$ xpra attach :100
или же
$ xpra attach ssh:user@remotehost:100
Обратите внимание, что последний требует xpra
клиент должен быть установлен на вашем локальном компьютере; бывший нет.
xpra
Клиент поместит значок на панели задач / панели вашего оконного менеджера, позволяющий отключить клиент. (Или вы можете просто убить его, если вы будете осторожны, чтобы не убить сервер.) Затем вы можете подключить его позже, если xpra
Сервер все еще работает. Если у вас есть один xpra
сервер работает на хосте, вы также можете просто пропустить номер дисплея, и xpra attach
разберусь.
Одна очень приятная особенность xpra
в том, что он позволяет запустить сервер на уже существующем дисплее. Это позволяет вам восстановить сеанс, если xpra
сбой сервера (пока X-сервер на этом дисплее все еще работает). Для этого запустите
$ xpra start --use-display :100
Предостережения:
xpra
работает как оконный менеджер Несмотря на то, что он прекрасно работает с встраиванием в другие оконные менеджеры, он не очень хорошо работает с самими приложениями X: он не позволяет, например,rxvt-unicode
удалить строку заголовка; также он не сообщает окнам, сколько места им нужно для работы на экране, например, выпадающие списки и меню выпадают за пределы экрана. Однако я думаю, что последняя проблема заключается в исправлении моей конфигурации.Ключи повторяются. Часто. Это можно решить с помощью
xpra attach --no-keyboard-sync
, но страница руководства предупреждает, что это не работает в определенных играх. Я держу пальцы скрещенными, что я не хочу использовать одну из этих игр.
Поэтому, Xephyr
вполне может быть лучшим решением (если оно поддерживает GLX), потому что оно работает как X-сервер, а не как оконный менеджер. Однако я не исследовал, поддерживает ли он возобновление ранее отключенных сеансов.