Wie führe ich X11-Anwendungen remote aus?

5756
jpaugh

Wie kann ich X11-Anwendungen ausführen, die auf einem Remote-Server mit den folgenden Zielen gehostet werden:

  • Führen Sie alles aus, was lokal auf dem Server ausgeführt werden würde. Dies schließt OpenGL-Apps ein, die verwenden GLX.
  • Die Integration mit dem lokalen Desktop ist scheinbar, dh die Apps sehen aus, als würden sie lokal ausgeführt, ohne einen separaten Desktopbereich. Daher brauche ich eine X11-Lösung, kein Wrapper-Protokoll.
  • Vorzugsweise können die Anwendungen weiterlaufen, wenn die Verbindung getrennt wird. dann kann ich die laufenden Apps später wieder öffnen, wenn ich die Verbindung wieder herstelle.

Ich habe eine Menge Ratschläge gesehen, die hier auf Superbenutzern herumgetrieben wurden, aber vieles davon ist eine teilweise Korrektur oder einfach nur schlecht.

  • plain ssh X11-Forwardingist out: Es können bestimmte Apps nicht ausgeführt werden, insbesondere solche, die auf die GLX-Erweiterung angewiesen sind.
  • Einstellung LIBGL_ALWAYS_INDIRECT=1 funktioniert für mich nicht.
  • Xephyrist auch raus. GLX wird derzeit nicht unterstützt, obwohl in der Entwicklungsstruktur bereits einiges an GLX gesehen wurde. Vielleicht ist dies in Zukunft der sauberste Weg.
  • xmoveist auch raus. Es ist zu alt, um weiter darüber nachzudenken.
  • VNC ist raus. Es leitet den gesamten Desktop weiter und kann das X-Protokoll nicht verwenden.

EDIT: Ich habe über ein Wochenende gekämpft, um einige Vorschläge zu erarbeiten, und das xpraist das, was am besten funktioniert. Ich habe mein Setup in einer Antwort unten beschrieben, und ich hoffe, es hilft jemand anderem.

5

1 Antwort auf die Frage

8
jpaugh

Xpra (wie hier erwähnt) ) macht was ich will. Damit können beliebige X-Anwendungen ausgeführt werden, die an mehrere Clients weitergeleitet werden können, entweder auf demselben Computer oder auf einem anderen Computer. Es unterstützt auch die Ausführung von OpenGL-Apps und ermöglicht, dass Ihre Apps auch nach dem Verbindungsabbruch des letzten Clients weiterlaufen können. Dadurch haben Sie die Möglichkeit, die Verbindung später wieder herzustellen.

xpraEs gibt zwei Teile: einen Client und einen Server. Führen Sie auf dem Remote-Computer Folgendes aus, um den Server zu starten:

$ xpra start :100 

Dies startet xpraauf einer neuen X-Anzeige. (Es gibt eine Problemumgehung für einen Proxy.)

Um eine Anwendung von steuern zu lassen xpra, führen Sie sie auf derselben Anzeige wie der xpraServer aus.

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

Dies alles kann über eine SSH-Verbindung (mit oder ohne X11-Forwarding) problemlos durchgeführt werden.

Führen Sie einen der folgenden Schritte aus, um einen Client zu starten:

$ ssh -X user@remotehost <gain remote connection> $ xpra attach :100 

oder

$ xpra attach ssh:user@remotehost:100 

Beachten Sie, dass für letzteres der xpraClient auf Ihrem lokalen Computer installiert sein muss. Ersteres nicht.

Der xpraClient fügt ein Symbol in die Taskleiste / den Bereich Ihres Fenstermanagers ein, über den Sie die Verbindung trennen können. (Oder Sie können es einfach töten, solange Sie darauf achten, den Server nicht zu töten.) Sie können es später erneut anbringen, solange der xpraServer noch läuft. Wenn xpraauf dem Host ein einzelner Server ausgeführt wird, können Sie auch die angezeigte Nummer einfach weglassen xpra attach.

Eine sehr nette Eigenschaft von xpraist, dass Sie einen Server auf einer bereits vorhandenen Anzeige starten können. Auf diese Weise können Sie eine Sitzung wiederherstellen, wenn der xpraServer abstürzt (solange der X-Server auf dieser Anzeige noch läuft). Um dies zu tun, renne

$ xpra start --use-display :100 

Vorsichtsmaßnahmen:

  • xpraläuft als Fenstermanager. Obwohl es ziemlich gut mit dem Einbetten in anderen Window-Managern spielt, spielt es mit den X-Apps selbst nicht so gut: Es erlaubt nicht, zB rxvt-unicodedie Titelleiste zu entfernen; Außerdem sagt es den Fenstern nicht aus, wie viel Platz sie auf dem Bildschirm haben müssen, z. B. fallen Dropdown-Felder und Menüs vom Bildschirm. Ich denke, das letztere Problem ist jedoch eine Frage der Fixierung meiner Konfiguration.

  • Schlüssel werden wiederholt. Häufig. Dies kann durch Verwendung gelöst werden xpra attach --no-keyboard-sync. Die Manpage warnt jedoch, dass dies bei bestimmten Spielen nicht gut funktioniert. Ich drücke die Daumen, dass ich mich nicht sehne, eines dieser Spiele zu benutzen.

Aus diesen Gründen Xephyrkann es eine bessere Lösung sein (sobald GLX unterstützt wird), da es als X-Server und nicht als Fenstermanager ausgeführt wird. Ich habe jedoch nicht untersucht, ob es die Wiederaufnahme zuvor getrennter Sitzungen unterstützt.

Sie können Ihren Hauptbeitrag einfach bearbeiten, anstatt ihn als Antwort zu verwenden. Kruug vor 11 Jahren 0
Ich hätte gerne ein paar konkurrierende Antworten. Im Idealfall wird jemand etwas besseres posten. jpaugh vor 11 Jahren 0
Sicher, aber dann warten Sie auf sie ... auch Xming ... http: //sourceforge.net/projects/xming/ Kruug vor 11 Jahren 1
Schön, danke. Ich musste auch ein Argument auf dem Server hinzufügen, so dass es "xpra start: 100 - start-via-proxy = no" war - der Fehler war `Warnung: Der System-Proxy kann nicht für den Unterbefehl 'start' verwendet werden "/ run / xpra / system": [Errno 2] Keine solche Datei oder Verzeichnis ". HankCa vor 6 Jahren 1
@HankCa. Danke, ich habe den Text aktualisiert. Ich habe xpra jetzt schon eine Weile nicht benutzt. Wie funktioniert es für dich? jpaugh vor 6 Jahren 0
@jpaugh ja, ich mag es, mich wieder mit UI-Sitzungen verbinden zu können. Ich hatte ein Problem, bei dem sich der Client nicht wieder verbinden konnte, und ich musste neu beginnen. Ich bin sicher, es gibt etwas, was ich noch herausfinden muss! HankCa vor 6 Jahren 0