Der mit Hardwareunterstützung auf minimale Latenz getrimmte freie GameStream-Server Sunshine gestattet ruckelfreies Spielen und zügiges und entspanntes Arbeiten aus der Ferne mit anderen Programmen.
Linux liegt die Remote-Bedienung in den Genen: Es stammt von Unix für Großrechner ab, an denen sich Anwender über Terminalarbeitsplätze einloggten. Daher existierte von Anbeginn ein Kommando für entfernte Logins (rlogin), das später vom sichereren SSH abgelöst wurde. Die grafische Oberfläche X11 zeigte sich von Anfang an netzwerktransparent und kommunizierte sogar lokal über eine Pseudo-Netzwerkschnittstelle (Abbildung 1).

Abbildung 1: Das Interface lo, das lokale Daten auf den lokalen Rechner zurückleitet, entstand als Hack für die Kommunikation vieler Programme mit einer zentralen Systemkomponente.
Wayland kann anders als das Urgestein X11 grafische Programme nicht mehr ohne zusätzliche Software remote von einem Rechner im Netz starten. Die einfachste Lösung ist es, auf beiden Computern mit Wayland-Desktop das für alle gängigen Distributionen verfügbare Waypipe zu installieren. Der Aufruf waypipe ssh User@IP Befehl startet dann ein Programm auf dem per SSH angesprochenen Rechner und überträgt dessen GUI. Vor allem bei GTK-Programmen klappt das mit deutlich besserer Performance als unter X11.
Gesamtpaket
Waypipe startet immer nur einzelne Programme. Möchten Sie den kompletten Wayland-Desktop übertragen, gelingt das mit einem VPN-Server und -client. Eine drastisch höhere Performance bietet allerdings das hardwarebeschleunigte Sunshine [1]. Der Remote-Desktop-Server (Abbildung 2) wurde eigentlich für die Übertragung von Spielen auf ein Smart-TV-Gerät konzipiert. Er nutzt das von Nvidia entwickelte Protokoll GameStream. Während Nvidia seine eigene Lösung 2022 einstellte, befindet sich die quelloffene Software in aktiver Entwicklung und unterstützt Grafikkarten von AMD, Intel und Nvidia.

Abbildung 2: Wie VPN, nur sehr viel schneller: Ein Sunshine-Server überträgt einen Wayland-basierten Desktop auf einen Rechner im Heimnetz.
Voraussetzung für eine adäquate Leistung ist eine halbwegs aktuelle Grafikkarte, die Nvidia NVENC [2], AMD VCE [3] (bei Karten ab 2012) oder Intel VAAPI [4] unterstützt. Nvidia-Anwender müssen dazu den vollwertigen Nvidia-Treiber [5] installieren. Besitzer einer Intel-Karte richten intel-vaapi-driver oder intel-media-driver ein. Das Tool vainfo aus dem Paket libva-utils meldet dann die unterstützten Codecs und zeigt keine Fehlermeldung.
Der Sunshine-Server ist für Tumbleweed im Build-Service-Repository games:tools zu finden. Mit dem Kommando aus der ersten Zeile von Listing 1 fügen Sie es dem System hinzu. Die Antwort i auf die Frage, ob Zypper dem Repository vertrauen soll, bindet es für immer ein. Dann aktualisieren Sie die Paketverwaltung und spielen den Server ein (Zeile 2 und 3).
Listing 1
Sunshine-Server einrichten
# zypper addrepo https://download.opensuse.org/repositories/games:tools/openSUSE_Tumbleweed/games:tools.repo # zypper refresh # zypper install sunshine # sudo setcap cap_sys_admin+p $(readlink -f $(which sunshine)) # systemctl --user enable sunshine.service --now
Damit das mit Benutzerrechten laufende Sunshine das schnelle KMS-Bildschirm-Capture auf Kernel-Ebene vornehmen darf, müssen Sie seiner ausführbaren Datei das Extended Attribute cap_sys_admin zuteilen (Zeile 4). Das dazu notwendige Programm Setcap finden Sie im Paket libcap-progs. Sie müssen den Befehl nach jedem Update von Sunshine erneut ausführen.
Mit dem Aufruf aus der letzten Zeile aktivieren und starten Sie den Dienst. Erscheint das zugehörige Icon in der Task-Leiste nicht, klären Sie durch Ausführen von sunshine auf der Konsole, ob Fehlermeldungen auftreten. Läuft der Server, lässt er sich über die URL https://localhost:47990 konfigurieren. Dass das Server-Zertifikat nicht von einer offiziellen CA bestätigt wurde, dürfen Sie in dem Fall getrost ignorieren. Beim ersten Zugriff auf den Server gilt es, ein Passwort festzulegen.
Als Gegenstück auf dem Rechner, der sich mit dem Sunshine-Server zur Remote-Ausführung von Anwendungen verbinden soll, ist die Software Moonlight-Qt (Abbildung 3). Sie finden sie im Build-Service-Repository home:ecsos, das die erste Zeile aus Listing 2 ins System einbindet. Nach einem Refresh (zweite Zeile) lässt sich das Paket moonlight-qt installieren (letzte Zeile). Das als optionale Abhängigkeit mit eingespielte sunshine-firewalld fügt der Firewall-Verwaltung die Zonen sunshine und sunshine-webui hinzu, um beide Dienste bequem freigeben zu können.
Listing 2
Moonlight-Client einrichten
# zypper addrepo https://download.opensuse.org/repositories/home:ecsos/openSUSE_Tumbleweed/home:ecsos.repo # zypper refresh # zypper install moonlight-qt

Abbildung 3: Moonlight ist das Gegenstück zu Sunshine: Ein Klick auf die verfügbaren Sunshine-Server zeigt den Desktop des entfernten Rechners wieselflink in einem Fenster oder im Vollbild.
Bei aktivierter Option Automatisches Auffinden von PCs im lokalen Netzwerk sollte Moonlight nach dem Start den Sunshine-Server im LAN nach einer Weile selbst finden. Das explizite Hinzufügen per Plus-Button in der oberen Leiste beschleunigt die Angelegenheit, wobei Sie lediglich die IP-Adresse des Ziels angeben müssen. Neue Streaming-Partner kennzeichnet Moonlight zunächst durch ein Gesperrt-Icon. Sie müssen sie vor dem ersten Zugriff koppeln.
Dazu rufen Sie zuerst vom Rechner mit dem Moonlight-Client das Webfrontend des Sunshine-Servers unter der Adresse https://<I>Server-IP<I>:47990/pin auf. Beim Verbindungsversuch mit einem noch ungekoppelten Server nennt der Moonlight-Client eine PIN, die Sie im Webfrontend zusammen mit der IP-Adresse des Servers eintragen.
Die Option Optimiere die Maus für Remotedesktop statt für Anwendungen in den Moonlight-Einstellungen (Zahnrad-Icon in der oberen Leiste) bewirkt, dass der Mauszeiger das Fenster der Remote-Übertragung verlassen darf, falls nicht ohnehin der Vollbildmodus eingestellt ist. Unter Erfasse System-Tastenkürzel legen Sie gegebenenfalls noch fest, ob das Remote-System Funktionstasten wie [F1] abfangen soll.
Nach Aufbau der Verbindung mit 60 FPS, was im lokalen Gigabit-Netzwerk problemlos klappt, erscheint ein vom Original kaum zu unterscheidendes Bild des entfernten Desktops. Die Latenz für Benutzereingaben liegt bei lediglich 20 Millisekunden.
Dank einstellbarer Kompressionsrate (Abbildung 4) stellen Sunshine/Moonlight-Remote-Verbindungen über das Internet kein Problem dar. Ermöglicht die Latenz Ihrer Internet-Verbindung Onlinespiele, dann dürfte Sie auch die Performance der via Sunshine genutzten Büro-, E-Mail- und Grafikprogramme zufriedenstellen. Dort stört eine leicht schleppende Reaktion auf Eingaben zumindest weniger als bei einer Rennsimulation oder einem Ego-Shooter.

Abbildung 4: Die Moonlight-Einstellungen gestatten es, die Datenübertragung von 0,5 bis 150 Mbit/s zu skalieren.
Anschluss gesucht
Im Sunshine-Server lassen sich neben den bereits angelegten Desktop-Übertragungen sowie der Steam-Spiele-Connection weitere Anwendungen registrieren. Das bedeutet nicht, dass Sunshine die Übertragung auf diese Anwendungen beschränkt. Ein Sunshine-Server überträgt stets das gesamte an den Monitor gelieferte Bildsignal. Nur so erreicht er seine hohe Performance.
Damit geht jedoch eine Einschränkung einher: Nur wenn die Grafikkarte einen Monitor erkennt, sendet sie ein Bildsignal, das Sunshine dann abgreifen kann. Sunshine ist also zum einen auf die Auflösung dieses Monitors beschränkt. Zum anderen funktioniert das Streaming überhaupt nur, wenn ein eingeschalteter Bildschirm am Rechner hängt. Immerhin bereitet es dem Server kein Problem, wenn sich der Monitor in den Stromsparmodus verabschiedet.
Diese Einschränkungen umgehen Sie unter Linux elegant durch virtuelle Monitore ohne angeschlossene Hardware. Ein virtueller Monitor mit beliebiger Auflösung entsteht durch vom Bootloader übergebene video-Parameter beim Systemstart. Das Anlegen klappt sowohl beim Einsatz von Grub als auch beim Systemd-Boot in neueren Tumbleweed-Installationen einfach.
Etwas kniffliger ist das Bereitstellen von sogenannten EDID-Daten, die ein Monitor zur Grafikkarte sendet, um seine Darstellungsmöglichkeiten zu beschreiben. Auf der Github-Seite von LinuxTV [6] finden sich vollwertige EDID-Binärdateien. Das File samsung-q800t-hdmi2.1 zum Beispiel enthält die Daten für einen High-End-8k-Monitor. Meldet der vorgegaukelte Monitor diese EDID-Daten an die Grafikkarte, dann lässt sich in den Systemeinstellungen der Desktop-Umgebung jede Auflösung bis zu 8k auswählen – vorausgesetzt, die Grafikkarte beherrscht die angepeilte Auflösung ebenfalls.
Zuerst müssen Sie herausfinden, welche Monitoranschlüsse die Grafikkarte bereitstellt. Die Eingabe des Einzeilers aus Listing 3 listet die Anschlüsse auf und zeigt an, welche davon frei sind. Ziel der Aktion ist es, der Grafikkarte an einem der freien Anschlüsse das Vorhandensein eines Monitors vorzutäuschen, damit sie Bilddaten an ihn sendet. Dann greift Sunshine auf dieses Signal zu.
Listing 3
Anschlüsse auflisten
# for p in /sys/class/drm/*/status; do echo $p; cat $p; done
Startet ein System per Grub, erweitern Sie dazu die in /etc/default/grub definierte Variable GRUB_CMDLINE_LINUX_DEFAULT um Einträge für drm.edid_firmware und video. Im Beispiel aus Listing 4 dient HDMI-A-2 als Ausgang. Handelt es sich um einen anderen Ausgang, müssen Sie die Bezeichnung entsprechend anpassen. So hält die Github-Seite von LinuxTV unter anderem DisplayPort-EDID-Profile bereit, beispielsweise acer-xb321hk-dp. Den Dateinamen in der /etc/default/grub, im Beispiel samsung-q800t-hdmi2.1, ändern Sie dann entsprechend ab. Anschließend aktivieren Sie mit dem Kommando grub-mkconfig -o /boot/grub/grub.cfg die neue Konfiguration.
Listing 4
/etc/default/grub
[...] GRUB_CMDLINE_LINUX_DEFAULT="splash=silent mitigations=auto quiet security=apparmor drm.edid_firmware=HDMI-A-2:edid/samsung-q800t-hdmi2.1 video=HDMI-A-2:e" [...]
Existiert die Datei /etc/default/grub auf einem frisch installierten Tumbleweed-System nicht, dann nutzt es Systemd-Boot. In diesem Fall erhält die Datei /etc/kernel/cmdline denselben Inhalt wie die Variable GRUB_CMDLINE_LINUX_DEFAULT bei Grub. Nach der Anpassung richten Sie mit dem Befehl zypper in -f kernel-default den Standard-Kernel oder ein eventuell anderes installiertes Kernel-Paket wie kernel-longterm neu ein.
Zusätzlich richten Sie im Ordner /usr/lib/firmware/, das Unterverzeichnis edid/ ein und kopieren die EDID-Datei dorthin. Damit diese Datei dem System bereits in der frühen Startphase zur Verfügung steht, muss sie in der Initial RAM Disk eingetragen sein. Dazu ergänzen Sie die Konfigurationsdatei /etc/dracut.conf.d/99.edid.conf um die Zeile aus Listing 5. Das Kommando dracut -f erzeugt die Initrd mit diesem zusätzlichen Inhalt neu.
Listing 5
99.edid.conf
[...] install_items+=" /usr/lib/firmware/edid/samsung-q800t-hdmi2.1 "
Nach einem Reboot sollte die Seite Anzeige**& Bildschirm | Anzeige-Einrichtung einen Bildschirm mehr enthalten (Abbildung 5) – im Beispiel einen virtuellen Samsung-Monitor neben den wirklich existierenden. Für den vorgetäuschten Monitor stellen Sie am besten dieselbe Auflösung ein wie für den realen Hauptmonitor, es sei denn, sie fällt für die Anzeige auf dem Remote-Gerät zu groß aus. Dann wählen Sie eine niedrigere, was zudem Bandbreite spart.

Abbildung 5: Der Samsung-Monitor rechts hängt nicht wirklich am Rechner: Die Boot-Optionen täuschen ihn dem System nur vor.
Bildcollage
Unter KDE lassen sich der echte und der virtuelle Monitor mittels Kopie von übereinanderlegen. Das verhindert, dass der Mauszeiger aus dem Bildschirm wandert, und sorgt dafür, dass die Task-Leiste auf dem echten sowie dem von Sunshine gespiegelten virtuellen Monitor erscheint. Unter Gnome bewirkt die Option spiegeln in der Rubrik Bildschirm | Control Center dasselbe Verhalten.
Nun ist der Sunshine-Server so eingerichtet, dass er die gewohnte Arbeitsumgebung samt Fensterleiste und Startmenü überträgt. Der Vorteil im Vergleich zum Remote-Neustart von Programmen mit Waypipe besteht darin, dass Sie beim Verbinden mit dem Sunshine-Server den Rechner im selben Zustand wiederfinden, in dem Sie ihn verlassen haben. Der Preis dafür ist das sperrige Fenster, das die ganze Desktop-Umgebung überträgt, statt nur ein einzelnes Anwendungsfenster.
Das Streaming erzeugt eine durchgängige Grundlast für die Grafikkarte. Im Test mit einer Grafikkarte des Typs Nvidia Geforce RTX 4070 bei 4k-Auflösung und 60 Hz Bildfrequenz waren das zwei Prozent für den Empfang mit dem Moonlight-Client und etwa vier Prozent für das Streaming. Dadurch verdoppelte sich der von der Karte gemeldete Stromverbrauch von rund 20 auf etwa 40 Watt (Abbildung 6).

Abbildung 6: Das Streaming verursachte im Test zwar nur eine geringe GPU-Last, die jedoch den Stromverbrauch bereits verdoppelte.
Internet statt LAN
Es bleibt noch die Frage, wie man den Sunshine-Stream am besten im Internet veröffentlicht. Die Authentifizierung dafür funktioniert ähnlich wie bei Bluetooth-Geräten. Das implementierte Verfahren mit vierstelliger PIN ist vor allem deshalb sicher, weil die Authentifizierung server- und clientseitig bestätigt werden muss. Ist nur der Stream von außen zugänglich, nicht aber das Konfigurations-Frontend des Servers, gelingt eine Koppelung von außerhalb des Heimnetzwerks ohnehin nicht, selbst wenn es dem Eindringling gelänge, die PIN in der kurzen Zeitspanne des Wartens auf Bestätigung zu erraten.
Standardmäßig überträgt Sunshine die Bilddaten schon aus Performance-Gründen unchiffriert. Die Software bietet jedoch eine Verschlüsselung an: Die Option LAN Encryption Mode schaltet eine fakultative oder erzwungene Verschlüsselung zu. Die Option WAN Encryption Mode springt ein, wenn Sunshine einen Zugriff von außerhalb des Heimnetzwerks erkennt.
Formal sind also die Voraussetzungen gegeben, um die TCP-Ports 47984, 47989 und 48010 sowie die UDP-Ports 7998, 47999, 48000, 48002 und 48010 im Router freizugeben, was einen Zugriff aus dem Internet auf den Sunshine-Server ermöglicht. Dass Angreifer via Sunshine-Stream Einblick in den Desktop gewinnen und per Fernsteuerung den Rechner übernehmen könnten, macht den Remote-Desktop-Dienst allerdings im Fall einer Kompromittierung zum offenen Scheunentor.
Die Gretchenfrage lautet also, ob Sie in Sachen Sicherheit einer als Game-Streaming-Lösung entworfenen Software vertrauen oder doch lieber zur bewährten Absicherung per VPN greifen. Auch die verschlüsselt die Daten und beeinträchtigt die Performance.
Fazit
Das für praktisch alle Distributionen verfügbare Waypipe lässt in der Praxis vergessen, dass Wayland selbst nicht mehr netzwerktransparent arbeitet. Zudem bietet es eine bessere Performance als SSH mit dem Parameter -X. Noch schneller und komfortabler arbeitet der gleichfalls Wayland-taugliche GameStream-Server Sunshine, der sich damit beim Einsatz einigermaßen aktueller Grafikkarten hervorragend als Remote-Desktop-Lösung eignet. (uba/jlu)
Infos
- Sunshine: https://docs.lizardbyte.dev/projects/sunshine/master/index.html
- Nvidia NVENC: https://docs.nvidia.com/video-technologies/video-codec-sdk/13.0/nvenc-application-note/index.html
- AMD VCE: https://www.phoronix.com/news/MTU5MTc
- Intel VAAPI: https://www.intel.com/content/www/us/en/developer/articles/technical/linuxmedia-vaapi.html
- Nvidia-Treiber unter OpenSuse: https://en.opensuse.org/SDB:NVIDIA_drivers
- EDID-Daten: https://git.linuxtv.org/v4l-utils.git/tree/utils/edid-decode/data





