5

Как запустить приложения X11, размещенные на удаленном сервере, с учетом следующих целей:

  • Запустите все, что будет работать локально на сервере. Это включает в себя приложения OpenGL, которые используют GLX .
  • Безликая интеграция с локальным рабочим столом, то есть приложения выглядят так, как будто они работают локально, без отдельной области рабочего стола. Таким образом, мне нужно решение X11, а не протокол оболочки.
  • Предпочтительно, чтобы приложения продолжали работать, если я отключился; затем я могу снова открыть запущенные приложения при повторном подключении.

Я видел много советов о суперпользователе, но многие из них являются частичным исправлением или просто плохим.

  • plain ssh X11-Forwarding отсутствует: он не может запускать определенные приложения, особенно те, которые зависят от расширения GLX.
  • Установка LIBGL_ALWAYS_INDIRECT=1 не работает для меня.
  • Xephyr также отсутствует. В настоящее время он не поддерживает GLX, хотя я видел некоторые работы GLX в дереве разработки. Возможно, в будущем это будет самый чистый путь.
  • xmove также отсутствует. Это слишком стар, чтобы рассмотреть дальше.
  • VNC отсутствует. Он пересылает весь рабочий стол и не может использовать протокол X.

РЕДАКТИРОВАТЬ: я боролся на выходных, чтобы выработать несколько предложений, и xpra это то, что работает лучше всего. Я описал мои настройки в ответе ниже, и я надеюсь, что это поможет кому-то еще.

1 ответ1

8

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-сервер, а не как оконный менеджер. Однако я не исследовал, поддерживает ли он возобновление ранее отключенных сеансов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .