1 Punkte von GN⁺ 3 시간 전 | 1 Kommentare | Auf WhatsApp teilen
  • 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 moonshine erfolgen
  • Damit Anwendungen auch bei abgemeldetem Benutzer laufen, wird sudo loginctl enable-linger $USER verwendet
    • Wenn der Benutzer beim Streaming immer eingeloggt ist, kann dieser Schritt übersprungen werden
  • Mit sudo systemctl enable --now moonshine@$USER wird 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
  • Bei der ersten Verbindung zeigt Moonlight eine PIN an; das Pairing kann über eine Host-Benachrichtigung oder unter http://localhost:47989/pin erfolgen
  • Durch POST von uniqueid und pin an den Endpunkt /submit-pin ist Pairing auch über die Kommandozeile möglich

Anwendungskonfiguration

  • In config.toml definiert jedes [[application]] ein Programm, das in einer isolierten Sitzung ausgeführt wird
    • title: Name, der in Moonlight angezeigt wird
    • boxart: optionaler Pfad zu einem Coverbild
    • command: Liste aus ausführbarer Datei und Argumenten
  • pre_command führt vor dem Start der Anwendung Befehle synchron der Reihe nach aus; die Sitzung wartet, bis alle abgeschlossen sind
  • post_command fü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

 
GN⁺ 3 시간 전
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 Link fehlt ebenfalls. Der Hardware-Verkauf ist beendet, aber die Software lebt über die Android-App und Ähnliches weiter.
      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.
    • Consumer-GPUs lassen sich weiterhin praktisch nicht von mehreren Virtualisierungshosts gemeinsam nutzen, was den Nutzen einschränkt. Ideal wäre eine Konfiguration, bei der Thin Clients an einen leistungsstarken Server angeschlossen werden, um Spiele wie ältere COD-Titel zu spielen.
    • Ich frage mich, ob Moonshine unter Linux wie headless Sunshine funktioniert.
      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.
    • Ich habe Kernel-Parameter so gesetzt, dass Fedora in Proxmox beim Booten ein Fake-Display erstellt, das die Spezifikationen eines echten Monitors nachahmt.
      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.
    • Sunshine und Moonlight werden wieder aktiv entwickelt und scheinen auch neuere Releases als Apollo und Artemis zu haben.
      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.

    • Schon ein Claude- oder Codex-Tarif für 20 Dollar im Monat senkt die Einstiegshürde, um sich mit Linux zu beschäftigen, deutlich. Dinge, an denen man früher Stunden oder Tage festhing, lassen sich heute während einer Tasse Kaffee lösen; daher dürften auch etwas raue Stellen beim Testen auf einer Bazzite-Maschine nicht mehr so sehr stören wie früher.
    • Das war wohl zu bescheiden vorgestellt. Der Unterschied, dass man bei Sunshine unter Linux keine beliebigen Auflösungen verwenden kann, ist sehr groß.
    • Nachdem mich diverse Linux-Probleme von Sunshine frustriert hatten, habe ich gestern Abend Moonshine entdeckt und bin bisher sehr zufrieden.
    • Ich habe es etwa 10 Minuten ausprobiert und war beeindruckt. VS Code konnte ich nicht starten, aber da es einen Remote-Modus gibt, ist das nicht besonders wichtig; später werde ich es noch einmal mit anderen Apps versuchen.
      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 vermisse die SSX-Reihe. Schade, dass EA Big geschlossen wurde und keine andere Firma sie übernommen hat; von allen mochte ich Tricky am liebsten.
  • 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.

    • Auch auf einem Android-Smartphone ist es einen Versuch wert. Diablo 2 Remastered im Bett auf einem 6,7-Zoll-OLED mit 2340×1080, 120 Hz und HDR samt angestecktem Controller zu spielen, ist sogar zufriedenstellender als auf dem Steam Deck.
      Das Smartphone spielt nur Video ab, wird daher nicht heiß und der Akku hält lange.
    • Ich frage mich auch, ob man AWDL beenden muss, um Latenzspitzen während des Streamings zu vermeiden.
    • Neben der Unterstützung für Spiele außerhalb von Steam frage ich mich, ob es besser funktioniert als Steam Link.
  • 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.

    • Wie in der Funktionsbeschreibung läuft jeder Stream in einem eigenen Compositor, der vollständig von der Desktop-Umgebung getrennt ist. Die Idee eines Gameservers, der mehrere Instanzen hosten kann, ist sehr reizvoll.
  • Ich nutze diese Methode, um Switch-Spiele auf dem PC zu emulieren und auf ältere Wii U und 3DS zu streamen

    • Ich nutze sie auch auf neueren Android-basierten Handhelds wie Ayn Odin und Thor
    • Vor ein paar Jahren habe ich in Rust ein Tool gebaut, das Multiplayer-Netzwerkspiel für alle Emulatoren unterstützt, und die Implementierung war überraschend einfach
  • 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

    • Es gab gelegentlich Sitzungen, in denen alles perfekt funktionierte, also war klar, dass es technisch möglich ist, aber in etwa 90 % der Zeit gab es seltsame Fehler, Konfigurationsprobleme oder Updates, die die Kompatibilität kaputtmachten. Manche nutzen es erfolgreich, aber es scheint noch viel Feinschliff nötig zu sein
    • Vor etwa einer Woche habe ich mit Hilfe eines LLM einen Windows-Host und einen Ubuntu-Client in 30 Minuten eingerichtet; Probleme mit der Verbindung aus externen Netzwerken waren ebenfalls in etwa 15 Minuten gelöst
      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
    • Der Host-PC sollte per kabelgebundenem LAN verbunden sein, und der Client sollte für 1080p bei 60 fps oder mehr mindestens Wi-Fi 6 verwenden. Manche Router haben starken Paketverlust, daher sollte man ordentliche Hardware nutzen oder sie selbst passend konfigurieren
    • Ich nutze Sunshine und Moonlight zwischen Desktop und PS Vita; entscheidend ist, zumindest den Host kabelgebunden anzuschließen und die Latenz bis zum WLAN-Router niedrig zu halten
      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

    • Inzwischen ist die Umgebung viel besser als zu Zeiten der proprietären Nvidia-Funktion, daher lohnt sich ein neuer Versuch. Am einfachsten sind das in Steam integrierte Remote Play und die offizielle App; Sunshine und Moonlight bieten bessere Ergebnisse, feinere Einstellungen und Unterstützung für Apps außerhalb von Steam
      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
    • Vor fünf Jahren hatte ich ähnliche Probleme und habe Game-Streaming ganz aufgegeben, aber vor einem Monat habe ich auf einem alten Linux-Laptop in 5 Minuten Sunshine und Moonlight eingerichtet, um auf dem Sofa Oxygen Not Included zu spielen, und es funktionierte sofort perfekt
      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