Вопрос Как запускать приложения X11 удаленно?


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

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

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

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

EDIT: Я боролся за выходные, чтобы выработать несколько предложений, и xpra это то, что работает лучше всего. Я описал свою установку в ответе ниже, и я надеюсь, что это поможет кому-то другому.


4
2018-06-18 21:20


происхождения




ответы:


Xpra (как уже упоминалось Вот) делает то, что я хочу. Он позволяет запускать произвольные X-приложения, которые могут быть перенаправлены нескольким клиентам, либо на том же компьютере, либо на другом компьютере. Он также поддерживает запуск приложений OpenGL и позволяет вашим приложениям продолжать работу даже после отсоединения последнего клиента, что дает вам возможность снова подключиться.

xpra поставляется в двух частях: клиент и сервер. Чтобы запустить сервер, запустите на удаленном компьютере следующее:

$ xpra start :100

Это начинается xpra на новом дисплее X. (Есть обходной путь для использования с прокси-сервером.)

Чтобы приложение, контролируемое xpra, запустите его на том же дисплее, что и xpra сервера, например:

$ export DISPLAY=:100
$ firefox&
$ blender&
...

Все это можно сделать через ssh-соединение (с X11-Forwarding или без него) без проблем.

Чтобы запустить клиент, выполните одно из следующих действий:

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


7
2018-06-18 21:20



Вы могли бы просто отредактировать свой основной пост, а не делать это как ответ. - Kruug
Я бы хотел получить некоторые конкурирующие ответы. В идеале, кто-то опубликует что-то лучше. - jpaugh
Конечно, но потом вы ждете их ... также, проверьте Xming ...sourceforge.net/projects/xming - Kruug
Хороший, спасибо. я также должен был добавить arg на сервер, сделав его xpra start :100 --start-via-proxy=no - ошибка была Warning: cannot use the system proxy for 'start' subcommand, failed to connect to '/run/xpra/system': [Errno 2] No such file or directory, - HankCa
@HankCa. Спасибо, я обновил текст. Я не использовал xpra какое-то время. Как это работает для вас? - jpaugh