- Moonshine ist ein Linux-Host, der PC-Spielbilder an einen Moonlight-Client überträgt und Tastatur-, Maus- und Controller-Eingaben an den Host zurücksendet, um Remote-Play zu ermöglichen
- Für jeden Stream wird ein eigener Wayland-Compositor verwendet, der vom Desktop isoliert ist; dadurch kann der Host-PC während des Streamings weiter genutzt werden und die Ausführung ist auch auf Servern ohne Monitor möglich
- Unterstützt GPU-basiertes H.264-, H.265- und AV1-Encoding, 10-Bit-HDR, Eingaben einschließlich Motion, Touchpad und Haptik sowie latenzarmes 5.1- und 7.1-Kanal-Audio auf Opus-Basis
- Erfordert Linux und systemd, NVIDIA-RTX-, AMD-RDNA2+- oder Intel-Arc-GPUs mit Vulkan-Video-Encoding sowie Moonlight v6.0.0 oder neuer
- Da der GameStream-Protokollverkehr auf Anwendungsebene nicht vollständig verschlüsselt ist, dürfen Ports nicht direkt ins Internet exponiert werden; für externen Zugriff ist ein VPN wie Tailscale, WireGuard oder ZeroTier nötig
Isoliertes Game-Streaming
- Jede Anwendung läuft in einer eigenen Streaming-Sitzung, getrennt vom Host-Desktop
- Der Host-PC kann während des Streamings für andere Aufgaben weiterverwendet werden
- Läuft auf Headless-Servern ohne aktive Desktop-Sitzung, Monitor oder HDMI-Dummy-Stecker
- Verarbeitet H.264, H.265 und AV1 per Vulkan-Video-Encoding der GPU
- Bietet bei unterstützten Spielen echtes 10-Bit-HDR-Streaming
- Unterstützt Maus, Tastatur und Gamepads und verarbeitet auch Motion-, Touchpad- und Haptik-Eingaben von Gamepads
- Audio nutzt latenzarmes Opus-Encoding und unterstützt Stereo sowie 5.1- und 7.1-Surround
Laufzeitanforderungen
- Derzeit nur für Linux; getestet unter Arch Linux, es gibt aber auch Berichte über den Betrieb auf anderen Linux-Distributionen
- Für das Starten und Verwalten von Anwendungsprozessen wird systemd benötigt
- Erforderlich ist eine NVIDIA-RTX-, AMD-RDNA2-oder-neuer- oder Intel-Arc-GPU mit Unterstützung für Vulkan-Video-Encoding
- Der Client muss Moonlight v6.0.0 oder neuer sein; Kompatibilität mit älteren Versionen oder inoffiziellen Ports wird nicht garantiert
Installation und Ausführung
- Unter Arch Linux kann die Installation über das AUR mit
yay -S moonshineerfolgen - Damit Anwendungen auch bei abgemeldetem Benutzer laufen, wird
sudo loginctl enable-linger $USERverwendet- Wenn der Benutzer beim Streaming immer eingeloggt ist, kann dieser Schritt übersprungen werden
- Mit
sudo systemctl enable --now moonshine@$USERwird der Dienst beim Booten gestartet und sofort ausgeführt - Für den Build aus dem Quellcode werden unter anderem clang, CMake, Rust, Wayland, Vulkan-Header, shaderc, Mesa, Opus und PulseAudio-bezogene Bibliotheken benötigt
- Nach dem Build erfolgt der Start mit
cargo run --release -- /path/to/config.toml
Konfiguration und Client-Verbindung
- Wenn am angegebenen Pfad keine Datei existiert, wird die Konfigurationsdatei automatisch erstellt
- Der Standardpfad des AUR-Pakets ist
$XDG_CONFIG_HOME/moonshine/config.toml
- Der Standardpfad des AUR-Pakets ist
- Bei der ersten Verbindung zeigt Moonlight eine PIN an; das Pairing kann über eine Host-Benachrichtigung oder unter
http://localhost:47989/pinerfolgen - Durch POST von
uniqueidundpinan den Endpunkt/submit-pinist Pairing auch über die Kommandozeile möglich
Anwendungskonfiguration
- In
config.tomldefiniert jedes[[application]]ein Programm, das in einer isolierten Sitzung ausgeführt wirdtitle: Name, der in Moonlight angezeigt wirdboxart: optionaler Pfad zu einem Coverbildcommand: Liste aus ausführbarer Datei und Argumenten
pre_commandführt vor dem Start der Anwendung Befehle synchron der Reihe nach aus; die Sitzung wartet, bis alle abgeschlossen sindpost_commandführt nach Ende des Streamings Befehle synchron der Reihe nach aus; der Server wartet, bis alle abgeschlossen sind- Damit lassen sich kollidierende Dienste stoppen oder der GPU-Status vor und nach dem Streaming ändern
Automatische Anwendungserkennung
- Der Steam-Scanner sucht in den angegebenen Steam-Bibliotheken nach installierten Spielen und erstellt Ausführungsbefehle mit enthaltener Spiel-ID
- Der Desktop-Scanner findet Anwendungen in
.desktop-Dateien der angegebenen Verzeichnisse- Es lässt sich festlegen, ob Terminal-Anwendungen einbezogen werden und ob Icon-Pfade aufgelöst werden sollen
Unterschiede zu Sunshine und Einschränkungen
- Sunshine unterstützt mehr Plattformen und insgesamt mehr Funktionen, Moonshine ist jedoch nur für Linux
- Der Unterschied von Moonshine liegt darin, dass Streaming-Sitzungen vom Desktop isoliert werden, sodass der Host weiter genutzt werden kann und der Betrieb auch ohne aktiven Desktop möglich ist
- Gleichzeitiges Streaming an zwei Clients wird derzeit nicht unterstützt und ist auch kein Schwerpunkt des Projekts
Netzwerksicherheit
- Moonshine ist nicht für öffentliche Netzwerke konzipiert
- Aufgrund von Einschränkungen des zugrunde liegenden GameStream-Protokolls ist der Verkehr auf Anwendungsebene nicht vollständig verschlüsselt
- Für Streaming über das Internet muss ein VPN wie Tailscale, WireGuard oder ZeroTier verwendet werden; Moonshine-Ports dürfen nicht direkt veröffentlicht werden
Zugrunde liegende Projekte
- Moonlight: stellt den Client für Moonshine bereit
- Sunshine: liefert die Grundlage für die Host-API
- Inputtino: liefert die Grundlage für die Implementierung von Eingabegeräten
- magic-mirror: lieferte Inspiration für Headless-Streaming mit Vulkan und Wayland-Compositoren
1 Kommentare
Meinungen auf Hacker News
Kurz gesagt: Nvidia GameStream war eine proprietäre Technik, die Nvidia später eingestellt hat; danach traten Sunshine und Moonlight als Open-Source-Server und -Clients auf, die Low-Latency-Streaming auf allen Plattformen unterstützen.
Game on Whales ergänzt Multi-User-Streaming und virtuelle Displays und kommt damit einem selbst gehosteten Stadia/GeForce Now nahe, das bestehende Login-Sitzungen nicht beeinflusst; Steam, Firefox usw. werden in ausgewählten Containern ausgeführt.
Danach machten Apollo und Artemis das Streaming virtueller Displays einfacher, aber Apollos virtuelles Display ist faktisch Windows-exklusiv, während Moonshine dies auf Linux-Servern umsetzt.
Das von Apollo abgespaltene Vibepollo ist eine verbesserte Variante, die fast vollständig per Vibe Coding entstanden ist, weshalb ich sie persönlich nicht verwenden werde; ich frage mich, ob in dieser Abstammungslinie noch etwas fehlt.
Steam hat im Gegensatz zu Google bereits eine Kundenbasis, daher fände ich es nicht überraschend, wenn sie schon morgen einen Stadia-artigen Dienst ankündigen würden, mit dem man die eigenen Spiele auf beliebiger Hardware ausführen kann.
Bei Sunshine wird das Spiel während des Streamings auch auf dem Host-Bildschirm angezeigt; ich möchte wissen, ob Moonshine ohne physisches Display laufen oder mehrere Spiele gleichzeitig ausführen kann.
Sunshine erkennt es als echtes Display, sodass nur Strom- und LAN-Kabel übrig bleiben müssen; der Linux-Gameserver funktioniert auch ohne HDMI-Dummy-Stecker oder virtuellen Display-Treiber gut.
Ich frage mich, ob unter Windows während des Remote-Spielens noch jemand anderes den Server nutzen kann. Die meisten virtuellen Display-Lösungen, die ich gefunden habe, schalten das Server-Display aus.
Ich bin der Moonshine-Entwickler. Im Kern ist es Sunshine ähnlich, unterscheidet sich aber dadurch, dass es nicht von einer bestehenden Desktop-Umgebung abhängt, sondern einen eigenen Compositor erzeugt.
Es läuft headless ohne Desktop-Umgebung, erzeugt ohne Dummy-Stecker beliebige Auflösungen und Bildwiederholraten und kann HDR nutzen, selbst wenn der Monitor es nicht unterstützt. Es ist auch möglich, den bestehenden Desktop zu verwenden und gleichzeitig ein Spiel zu streamen.
Technisch habe ich bewusst einen engen Scope gewählt – ein Vulkan-Encoder, ein Linux, keine GUI, keine Unterstützung für ältere Moonlight-Clients –, um die Codebasis schlank zu halten. Dafür braucht man eine relativ aktuelle GPU samt Treiber und einen neuen Moonlight-Client.
Es ist ein Hobbyprojekt, an dem ich seit 2022 arbeite; anfangs war es schlechter als Sunshine, daher empfahl ich im README, es nicht zu verwenden, aber nachdem differenzierende Funktionen hinzukamen, habe ich diesen Hinweis entfernt.
Neuen Nutzern empfehle ich zuerst Sunshine, weil es mehr Material dazu gibt und die Chance höher ist, dass es gut funktioniert; wenn man gern Neues ausprobiert, ist Moonshine aber auch in Ordnung.
Wegen der Architektur mit eigenem Compositor scheint es schwierig, eine vollständige Desktop-Umgebung zu betreiben, aber Linux braucht dringend eine stabile Möglichkeit, zumindest einzelne Apps remote auszuführen. Die eingebauten Server von KDE und GNOME haben insgesamt Probleme, und der Monitor muss ebenfalls eingeschaltet sein.
Mit Sunshine und Moonlight konnte ich das auf dem Desktop emulierte und hochskalierte PS2-Spiel SSX Tricky sehr flüssig auf eine über sieben Jahre alte Android-Set-Top-Box streamen.
Allerdings wurde das Spiel unverändert auf dem Desktop-Bildschirm angezeigt, sodass der Host nicht nutzbar war, während jemand anderes spielte; Moonshine scheint genau das zu lösen. Es setzt einer ohnehin schon großartigen Kombination die Krone auf.
Ich nutze Moonlight und Apollo, indem ich einen DualSense mit dem MacBook verbinde, Moonlight öffne, im Vollbild auf meinen Gaming-Desktop zugreife und dann AAA-Spiele aus Steam starte.
Über Wi-Fi 7 gibt es kaum spürbare Latenz, und auch der an den großen Fernseher angeschlossene Minisforum lässt sich mit einer anderen Tastenkombination des DualSense verbinden. Apollo speichert die Einstellungen, sodass der Wechsel zwischen den beiden Geräten nahezu problemlos funktioniert.
Das Smartphone spielt nur Video ab, wird daher nicht heiß und der Akku hält lange.
Ich frage mich, ob Moonshine pro Sitzung so etwas wie einen virtuellen Desktop erstellt, ob es nur ein separater Bildschirm ist oder eine vollständig unabhängige Compositor-Instanz.
Ich nutze diese Methode, um Switch-Spiele auf dem PC zu emulieren und auf ältere Wii U und 3DS zu streamen
Die Kombination aus Moonlight und Sunshine nutze ich auf einem GPU-Server mit RTX 4000 Pro sehr zufriedenstellend
Schade war nur die fehlende automatische Anpassung der Auflösung an den verbundenen Client, aber das habe ich mit einem Skript über den Home-Assistant-Windows-Client gelöst
Ich bin einer Anleitung gefolgt, um Sunshine- und Moonlight-Streaming vom Laptop aufs Smartphone einzurichten, bekam aber kein brauchbares Ergebnis
Am Ende habe ich eine Woche meiner knappen Freizeit, in der ich mich eigentlich mit Spielen erholen wollte, mit Codecs, Latenz, Wi-Fi-Einstellungen und diversen Apps verbracht und dann aufgegeben; jetzt, etwa drei Jahre später, frage ich mich, ob es besser geworden ist
Am Ende unterstützte das Spiel, das ich spielen wollte, nur lokalen Multiplayer und lief entgegen der eingeschränkten Kompatibilitätsbewertung auf ProtonDB direkt auf dem Laptop, sodass Streaming nicht nötig war, aber die Einrichtung selbst war unkompliziert. Tailscale habe ich ebenfalls verwendet
Selbst unter idealen Bedingungen gibt es bei Funkverbindungen deutlich mehr Pakete, die erneut übertragen werden müssen, daher sollte Wi-Fi möglichst nur auf der Client-Seite genutzt werden
Ich nutze Sunshine und Moonlight für den Remote-Zugriff auf eine VM für ROS-2-Entwicklung mit direkt durchgereichter GPU
Ich brauchte eine ältere Ubuntu-Version und habe deshalb eine VM gewählt; wegen Gazebo-Simulationen war die direkte GPU-Anbindung nötig. Über RDP war der Desktop extrem langsam und kaum reaktionsfähig, aber mit dieser Kombination ist er brauchbar geworden
Eigenes PC-Game-Streaming einzurichten ist heute deutlich schwieriger als zu der Zeit, als man einfach nur eine Nvidia-Funktion aktivieren musste
Beim letzten Versuch habe ich nicht herausgefunden, wie es zum Laufen zu bringen ist, und aufgegeben; trotz anderer Vorzüge scheinen Open-Source-Entwickler Usability nicht richtig im Griff zu haben
Man kann auch YouTube-Anleitungen oder KI-Hilfe nutzen; tatsächlich habe ich einmal zusammen mit einer KI herausgefunden, dass die Firewall einer Linux-Distribution die Streaming-Ports blockierte
Am besten startet man zunächst im lokalen Netzwerk und richtet Internet-Streaming später ein; mit einem Home-VPN wie WireGuard oder Tailscale kann es aber recht unkompliziert sein. Der Host ist per Kabel am besten, und Client-Wi-Fi ist meist auch okay, wenn es 6 GHz unterstützt
Es ist nicht so magisch einfach wie PS Remote Play, aber ich würde empfehlen, es noch einmal zu versuchen
Entgegen den Empfehlungen lief auch der Host über Wi-Fi, aber es klappte gut; das war einer der magischsten Technikmomente der letzten Jahre für mich. Allerdings nutze ich nur lokales Wi-Fi-Streaming