iX 4/2017
S. 135
Praxis
Tools und Tipps
Aufmacherbild

Entfernte Sitzungen mit Xpra steuern

Weitergeleitet

Schnell auf ein Programm zugreifen, das auf einem anderen Rechner liegt – unter Linux funktioniert das mit X-Forwarding. Das schließt aber andere Betriebssysteme aus und ist außerhalb des lokalen Netzes quälend langsam. Deutlich schneller und plattformübergreifend bietet diese Funktion das kleine Open-Source-Tool Xpra.

Anwendungen starten, Computer wechseln, dieselbe Anwendung weiter bedienen und später von einer dritten Maschine nochmal das gleiche Fenster verwenden – ein typischer Anwendungsfall für eine Virtual Desktop Infrastructure oder für Xpra. Xpra steht für „X persistent remote application“ und ist ein Client für persistente, nicht lokale X-Applikationen. Er erlaubt das Umleiten einzelner Fenster über SSH, TCP oder WebSockets. Alternativ kann er den gesamten Desktop übers Netzwerk weiterreichen.

Unter Linux bieten zwar die Paketverwaltungen Xpra an, dann allerdings nicht in der aktuellen Version 1.0, die für die hier vorgestellten Funktionen erforderlich ist. Auf der Website finden sich Binärpakete für Linux, Windows und macOS sowie die Quellen zum Selberkompilieren. Die Software steht unter der GNU Public License 2.0 und besitzt eine rege Entwickler-Community.

Der KDE-Desktop einer virtuellen Maschine (oben) wird mit Xpra auf dem Host gespiegelt (unten).

Für alle Betriebssysteme stellen die Entwickler ein Kommandozeilentool und einen grafischen Launcher bereit. Dem GUI fehlen allerdings einige Optionen – etwa das komplette Spiegeln der Arbeitsoberfläche (siehe Abbildung). Dafür ist Xpra nach Aussage der Entwickler aber nicht gedacht, das wäre eher eine Aufgabe für VNC.

Zum Anbieten einer Anwendung sollte sie lokal gestartet werden, Clients können sich mit dem Kommando xpra attach an die Sitzung hängen:

user@host1 $ xpra start :100 --start=xterm
user@host2 $ xpra attach ssh/user@host1/100

Den ganzen Desktop holt man per

user@host2 $ xpra shadow ssh/user@host1

Damit mehrere Clients auf dieselbe Anwendung zugreifen können, müssen sowohl der Server als auch die Clients auf der Kommandozeile die Option –sharing verwenden. Läuft die Anwendung bereits, lassen sich die Optionen auf dem Server mit upgrade anpassen:

user@host1 $ xpra upgrade :100 --sharing

Laufende Clients müssen danach neu gestartet werden. Vergisst man übrigens bei einem der Clients die Option –sharing, beenden sich die Instanzen auf allen anderen Rechnern automatisch.

Neben den nativen Varianten existiert ein HTML5-Client. Dieser erfordert eine möglichst aktuelle Version von Xpra und das Programm websockify. Die Sitzung muss über TCP erreichbar sein und mit der Option –html=on gestartet werden.

user@host1 & xpra start --tcp-bin= 
 0.0.0.0:14500 --html=on --start-child=firefox

Öffnet man jetzt in einem Browser die Adresse http://host1:14500, erhält man einen praktischen Browser im Browser. Auch in diesem Fall gilt wieder: Nur ein aktiver Client, es sei denn, alle beteiligten Parteien laufen mit der Option sharing. Für den Webclient geht das per GET-Parameter ?sharing=true.

Gemeinsame Zwischenablage

Diverse weitere Parameter bestimmen, wie stark die entfernte Anwendung in den eigenen Desktop integriert ist. Je nach Fensterverwaltung kann zum Beispiel das Icon in den Systemtray eingebunden sein, auch die Zwischenablage lässt sich übermitteln. Laut Website lassen sich Server und Client auch so einrichten, dass nur die Zwischenablage weitergereicht wird.

Einen speziellen Anwendungsfall stellt die Isolation von Anwendungen durch die gemeinsame Verwendung von Containern und Xpra dar. Dafür gibt es allerdings noch keine einheitliche Lösung. x11docker setzt auf Docker als Container-Implementierung. Es bietet unter anderem den Zugang zum GUI der containerisierten Anwendung via Xpra. x11docker besitzt ein GUI für die Einstellungen vor dem Start.

Ähnlich funktioniert docker-x11-xpra. Dabei handelt es sich allerdings nicht um ein Frontend, über das man Inhalte über Xpra aus dem Container herausbringen kann, sondern um ein Docker-Image. Es enthält eine minimale Basis, die Nutzer um ihre Anwendung erweitern können, um dann mit Xpra darauf zuzugreifen.

Das Projekt Docker-Desktop stellt lediglich ein Dockerfile bereit für Container mit installiertem X11, SSH und Xpra. Analog können auch Container-Systeme wie rkt oder LXC zum Einsatz kommen, um eine ähnliche Isolation wie in diesem Beispiel mit Docker zu erreichen.

Xpra erfindet das Rad nicht neu, sondern deckt Funktionen ab, die andere Programme bereits länger bieten. Für eine komplette Desktopvirtualisierung existieren auch ausgefeiltere Systeme. Für einzelne Anwendungen ist es jedoch deutlich flotter und unkomplizierter als etwa VNC oder X-Forwarding. (jab)