• Mitspieler gesucht? Du willst dich locker mit der Community austauschen? Schau gerne auf unserem ComputerBase Discord vorbei!

Steam Deck unchained - Game Straming via Sunshine und Moonlight *in progress*

Wichtig !!

Dieser Artikel befindet sich noch in progress. Es haben sich zwischenzeitlich einige Erfahrungswerte ergeben, welche gerade im letzten drittel dieses Threads besprochen wurden und noch nicht im Eingangspost übertragen wurden. Bitte diesbezüglich diese Beiträge lesen (Stichwort: Virtual Display Adapter, Auflösungen, HDR und Application Management). Ich werde bei Gelegenheit den Eingangspost aktualisieren.

steamdeck.png


Vorwort:

Mit diesem Beitrag möchte ich euch die Möglichkeiten von Game Streaming via der Tools Sunshine und Moonlight näher bringen, welche gerade der Steam Deck ein ganz neues Potential entlocken. Vorausgesetzt ihr nennt einen Spiele PC euer Eigen, der performanter ist als die Steam Deck selbst. Und das Ganze nicht nur zuhause, sondern auch wenn ihr mit dem Steam Deck außerhalb eurer 4 Wände unterwegs seid.

Diejenigen, die jetzt die Nase bezüglich Streaming rümpfen, weil sie der Meinung sind, dass die Latenz zu hoch und die Grafikqualität mies ist, möchte ich hiermit ermutigen weiterzulesen bzw. es selbst mal zu versuchen und nicht alten Mythen und Vorurteilen zu erliegen. Vorweg: dieser Mythos ist einfach nur Quatsch:


20240214210756_1.jpg


Ich habe schon länger mit dem Gedanken gespielt diesen Beitrag zu verfassen da ich, seitdem ich mein Game Streaming Setup entsprechend aufgebaut habe, immer wieder begeistert von dessen Möglichkeiten bin und immer wieder erstaunt bin, wie performant und elegant es funktioniert.

Auch habe ich festgestellt, dass vielen Steam Deck Besitzern diese Möglichkeit nicht bekannt ist und sich sicherlich darüber freuen werden zu erfahren, dass man auf seinem Steam Deck bei niedrigstem Stromverbrauch (3W SOC) seine Spiele in 60FPS mit der Darstellungsqualität seines Spiele PCs genießen kann.

Eigentlich ist es kein reines Steam Deck relevantes Thema, da der Moonlight Client nicht auf das Steam Deck beschränkt ist. Dazu aber später mehr.

Mein persönliches Streaming Setup war schon fertig, bevor das Steam Deck bei mir einzog. Grund dafür war, dass mein Gaming PC im Büro steht und ich auch gemütlich am Beamer im Wohnzimmer spielen wollte. Hierfür installierte ich den Moonlight Client auf meinem ODROID-N2 Client im Wohnzimmer auf dem auch KODI und PLEX läuft. Man sieht also, das Setup ist skalierbar und man kann von unterschiedlichen Clients aus die Spiele auf seinem Spiele-PC nutzen/spielen.

In diesem Beitrag gehe ich primär auf die Nutzung des Steam Deck als Client ein und werde entsprechend auch den Aufbau erklären.


Anwendungsfeld:

Grundlegend ist das Anwendungsfeld, dass man seinen Spiele PC dafür verwendet, die Grafikleistung für das Steam Deck im Haus oder unterwegs zur Verfügung zu stellen. Wenn man z.B. nicht gerade an seinem PC spielen möchte, sondern gemütlich im Bett oder auf der Couch mit dem Steam Deck.

Dies hat auch den Vorteil, dass man die Speicherstände vom Spiele PC verwendet und die volle Grafikpracht seines Spiele PC an dem Steam Deck hat. Und das Steam Deck bleibt dadurch kühl, leise und der Akku hält deutlich länger.

Man muss sich umständlich die Grafikoptionen für das Steam Deck anpassen, da die reine Rechenleistung vom Spiele PC übernommen wird. Auf der Steam Deck wird nur das vom Spiele PC erzeugte Bild angezeigt.

Auch die Auswahl der Spiele ist mehr oder weniger unbegrenzt. Alles, was ihr an eurem Spiele PC spielen könnt, könnt ihr an dem Steam Deck spielen.

Das Ganze ist auch bitte optional zu betrachten. Man kann natürlich weiterhin Spiele auf seiner Steam Deck installieren und nativ auf der Deck starten. Aber solange der Spiele PC in Reichweite ist, sehe ich keinen Grund, dass das Steam Deck die ganze Arbeit leistet auf Kosten der Akkulaufzeit, Lautstärke und Grafikpracht.


Voraussetzung:

Um den reibungslosen Betrieb dieser Umgebung zu gewährleisten, ist eine entsprechende Netzwerkumgebung wichtig, auch um die Latenzen so niedrig wie möglich zu halten.

Der Spiele PC (Streaming Host) sollte via Netzwerkkabel mit eurem Netzwerk verbunden sein. Dasselbe gilt für alle Streaming Clients. Je besser die Netzwerkanbindung, desto besser das Endergebnis.

Für das Steam Deck ist entsprechend eine gute WLAN Abdeckung sehr hilfreich. Ein 5GHz Netzwerk ist zwar nicht zwingend notwendig, da das Steam Deck nativ nur eine Auflösung von 1280x800 Pixel hat, was bei 60 FPS weniger als 10 MBit an Durchsatz benötigt, aber für eine stabilere Latenz zu empfehlen. Die Latenz ist im Endeffekt wichtiger als der Datendurchsatz und entsprechend sollte die Entfernung zum Accesspoint so gering wie möglich sein.

Die Spiele werden durch die Installation eines virtuellen Displays immer in der Auflösung und Bildwiederholrate des Client Gerätes gerendert. Beim Steam Deck wären dass dann 1280x800 Pixel und 60 bzw 90 Hz/FPS.

Bei mir im Haus habe ich z.B. meinen Gaming PC im Büro direkt per Kabel am Netzwerk Switch angeschlossen und auf jeder Etage einen WLAN Mesh Repeater via Netzwerkkabel am Hausnetzwerk angeschlossen.

Um eines vorwegzunehmen: selbst das Streaming übers Internet läuft hervorragend, sofern man entsprechend Upload Geschwindigkeit (10 MBit) bei seinem Internetanschluss hat. Wichtig ist aber primär die Latenz.

Für den Komfort empfehle ich euch dringend Wake on LAN auf eurem Spiele PC (Streaming Host) zu aktivieren. Dies gibt euch die Möglichkeit ihn von der Steam Deck aus anzuschalten, sofern er aus sein sollte. Dies kommt erst recht dann zum Tragen, wenn ihr mit der Steam Deck außer Haus seid und via Internet streamt.

Mit einem kleinen Script, welches man wie ein Spiel startet, kann man dann den PC auch wieder von dem Steam Deck aus ausschalten, wenn man ihn nicht mehr braucht. Dazu aber später mehr.

Kommen wir aber nun um wesentlichen…


Benötigte Software:

Für die generelle Umsetzung benötigen wir die Applikationen Moonlight für den Client (z.B. Steam Deck), Sunshine für den Host (euer Spiele PC) und noch ein paar kleinere Tools. Steam selbst bietet zwar auch eine Streaming Möglichkeit, welche aber im Vergleich zur Kombination von Moonlight und Sunshine bei der Performance, Stabilität, Komfort und Skalierung deutlich den Kürzeren zieht:

Sunshine bekommt ihr in der aktuellen Version 0.21.0 hier:
https://github.com/LizardByte/Sunshine/releases/download/v0.21.0/sunshine-windows-installer.exe

Für andere Betriebssysteme findet ihr auf der github Seite entsprechend Pakete:
https://github.com/LizardByte/Sunshine/releases

Moonlight kann ihr auf der Steam Deck entsprechend über den Paketmanager Discovery im Desktop Modus installiert werden. Hierzu mehr im Installationsteil.

Für andere Betriebssysteme findet ihr auf der Moonlight Seite entsprechend Pakete: https://moonlight-stream.org/

VirtualDisplayDriver (https://github.com/itsmikethetech/Virtual-Display-Driver)

Ein Treiber welcher einen virtuellen Monitor erstellt. Dieser ist nötig, um entsprechend Einstellungen im Bezug von Auflösung, Bildwiederholfrequenz und HDR zu für diesen virtuellen Monitor vorzunehmen (und auf den entsprechenden Moonlight Client anzupassen), welche beim physischen Monitor nicht möglich wären.
Als Beispiel: Mein SteamDeck hat HDR, 90 Hz und 1280x800 Pixel
Der Monitor am Host: kein HDR, 60 Hz und 2560x1440 Pixel

Die Auflösung wären in diesem Fall nicht problematisch, aber die Bildwiederholfrequenz und das fehlende HDR führen zu Komplikationen. Außerdem muss der Host Monitor so nicht eingeschaltet sein.

AutoHotKey (HDR Switch) (https://autohotkey.com/download/ahk-v2.zip)

Dieses Tool ermöglicht es HDR am Host zu aktivieren oder zu deaktivieren. AutoHotKey macht im Endeffekt nichts anderes als die Windows Tastenkombination für HDR Toggle (Windows + Alt + b) durchzuführen.

DisplaySwitcher2 (https://12noon.com/?page_id=641)

Dieses Tool ist recht praktisch zum einstellen des Monitor Setups. Es kommt ohne umständliche Parameter aus, da man nur eine XML Datei angibt, welche die Monitor Konfiguration enthält, die man dann anwenden will.

Playnite (https://playnite.link/)

Anstatt alle Spiele, welche man via Moonlight streamen möchte, in Sunshine kompliziert anzulegen, nutze ich mittlerweile Playnite, welches eine visuelle Spielebliothek bzw einen Spielestarter darstellt.

Randnotiz: Solltet ihr neben dem Steam Deck einen anderen Streaming Client verwenden wollen, welcher 5.1 Sound unterstützt (in meinem Fall der Multimedia Client im Wohnzimmer an der Heimkino Anlage.) empfehle ich euch noch Virtual Cable auf eurem Spiele PC zu installieren um eine 5.1 Soundkarten Einstellung zu simulieren:
https://download.vb-audio.com/Download_CABLE/VBCABLE_Driver_Pack43.zip

Dazu mache ich evtl. noch ein Update in dem Beitrag mit einem eigenen Bereich. Hier geht es erstmal um das Steam Deck. In dem Fall könnt ihr Virtual Cable erstmal ignorieren.


1. Installation – Sunshine (Spiele PC / Streaming Host):

Auf dem Spiele PC (Streaming Host) führen wir die Installation der Sunshine Applikation durch. Startet dafür den heruntergeladenen Sunshine Installer.

1_1_install_sunshine.png
1_2_install_sunshine.png


Nach der Installation findet ihr in der Taskleiste das Sunshine Symbol, welches euren Browser mit der Konfigurationsseite von Sunshine öffnet (Standardmäßig https://localhost:47990/)

1_3_install_sunshine.png
1_4_install_sunshine.png



2. Konfiguration – Sunshine (Spiele PC / Streaming Host):

2_1_config_sunshine.png


2_2_config_sunshine.png


2_3_config_sunshine.png


2_4_config_sunshine.png


2_5_config_sunshine.png


2_6_config_sunshine.png


2_7_config_sunshine.png


2_8_config_sunshine.png



3. Installation – Moonlight (Steam Deck):

Um den Moonlight Client auf dem Steam Deck installieren zu können, müssen wir erst in den Desktop Modus wechseln. Dafür halten wir den Power Knopf der Deck für 3 Sekunden lang gedrückt und wählen dann „Zum Desktop wechseln“.

(Es empfiehlt sich hier via USB Hub eine Maus+Tastatur an das Steam Deck anzuschließen um etwas komfortabler zu navigieren. Ich werde aber die Bedienung via Steam Deck erklären.)

20230810000805_1.jpg


Dort angelangt öffnen wir Discover (das Software Center) via Start -> System -> Discover wo wir unter Gaming nach „Moonlight“ suchen und dies entsprechend installieren.

Mit drücken „Steam“-taste + X an eurer Deck ruft ihr übrigens die virtuelle Tastatur auf, wenn ihr z.B. im Suchfeld „Moonlight“ eingeben wollt um danach zu suchen.

<Bild>

Damit Moonlight auch im Gaming Mode des Steam Deck erscheint müssen wir es noch entsprechend zum Steam Client hinzufügen. Dafür geht ihr auf Start -> Gaming und drückt mit der linken Trigger-Taste auf Moonlight und wählt „Add to Steam“. Dasselbe könnt ihr auch gleich noch mit „Add to Desktop“ machen.


4. Konfiguration – Moonlight (Steam Deck):

Die Konfiguration des Moonlight Client können wir auch über den Gaming Mode durchführen. Entsprechend wechseln wir wieder in den Gaming Mode zurück und öffnen Moonlight aus unserer Steam Bibliothek.

Über das Zahnrad in der oberen Ecke kommen wir zu den Grundeinstellungen des Moonlight Client.

20230810000651_1.jpg


Hier habe entsprechend folgendes eingestellt (Steam Deck OLED):

Auflösung: 1280x800 bei 90FPS

Die Video Bitrate wird hier automatisch auf 10Mbit gestellt, da mehr bei dieser Auflösung nicht nötig ist. Ich empfehle hier auch, die Auflösung nicht höher zu stellen, da das Display des Steam Deck eh nicht mehr darstellen kann und euer Spiele PC eh schon in höherer Auflösung rendert.
  • Anzeigemodus: Vollbild
  • VSYNC: aktiv
  • Frame Pacing: aktiv
  • Video Decoder: Erzwinge Hardware-Decoding
  • Video-Codec: AV1
  • Suche automatisch im lokalen Netzwerk nach Hosts (empfohlen): aktiv
Den Rest der Einstellungen könnt ihr nach eurem Gusto ändern.

Mit der B Taste oder dem Pfeil in der oberen Linken Ecke kommen wir wieder zurück zum Hauptmenü von Moonlight.

Sollte euer Spiele PC dort nicht schon auftauchen, könnt ihr ihn mit dem hinzufügen Symbol in der oberen rechten Ecke hinzufügen. Gebt dann entsprechend die IP-Adresse eures Spiele PCs ein und bestätigt mit OK.

Wenn alles so weit passt, sollte euer Spiele PC nun mit einem Schloss Symbol im Hauptmenü des Moonlight Clients erscheinen. Das Schloss bedeutet, dass euer Moonlight Client noch beim Sunshine Host via PIN verifiziert werden muss.

20230811161439_1.jpg


Klickt nun auf das Symbol um euch mit eurem Spiele PC zu verbinden. Es kommt nun ein Feld in dem ihr einen 4-stelligen PIN seht.

20230811161444_1.jpg


Diesen PIN müsst ihr auf der Sunshine Konfigurationsseite auf eurem Spiele PC in der Rubrik „PIN“ eingeben.

4_4_config_moonlight.png


Wenn alles reibungslos funktioniert hat, wird euch eine Liste der Spiele angezeigt, die ihr in Sunshine eingerichtet habt.

20230810000547_1.jpg



5. Uuuund Action – Moonlight (Steam Deck):



Und nun kann es los gehen. Wir starten ein Spiel :D
 

Anhänge

  • 2_7_config_sunshine.png
    2_7_config_sunshine.png
    91,9 KB · Aufrufe: 316
  • 2_6_config_sunshine.png
    2_6_config_sunshine.png
    92,8 KB · Aufrufe: 321
  • 2_5_config_sunshine.png
    2_5_config_sunshine.png
    96,6 KB · Aufrufe: 319
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: isiprimax, kirk1987, Randnotiz und 10 andere
Ich bin euch noch ein Update schuldig mit dem Script :) mea culpa .. mal gucken ob ich heute dazu komme.

Ich möchte nur eine wichtige Info loswerden: Aktuell gibt es Probleme mit der Netzwerkperformance vom Steam Deck OLED welche dazu führt, dass das Streamen via Moonlight nach kurzer Zeit in einer Lagging Orgie mündet. Die LCD Variante ist davon nicht betroffen. Es ist auch kein direktes Moonlight Problem sondern hat wohl etwas mit dem neuen WiFi Chip in der OLED Variante zu tun und der internen Regelung dieses Chips via Treiber.

Dies ist bereits bei Valve adressiert und wird in diesem Thread behandelt:

https://steamcommunity.com/app/1675200/discussions/0/4038101970203502664/

Aktueller workaround ist folgender, welcher das Problem zwar nicht 100% löst, aber zumindest abschwächt:

Instructions:
• Enable Developer Mode if you have not yet (Settings -> System -> Enable Developer Mode)
• Show Advanced Update Channels (Settings -> Developer -> Show Advanced Update Channels - toggle to On)
• Enable WiFi Power Management (Settings -> Developer -> Enable WiFi Power Management). System will reboot if you just toggled to Enable this setting.
• Switch to Main OS Update Channel (Settings -> System -> OS Update Channel - select Main). The system will apply the SW updates and reboot the system.

Es kann zwar nach 5-10 Minuten Spielzeit noch immer auftreten, dass die Bandbreite in den Keller geht. In den meisten Fällen reicht es aber aus, kurz die Moonlight Session zu beenden (via Tastenkombi) und die Session wieder fortzusetzen. Das Spiel muss dafür nicht komplett geschlossen werden.

PS: noch ein kleiner aber feiner QOL Tip: man sich z.B. den Chrome Browser oder die Terminal Console über den Desktop Mode in Steam hinzufügen (so wie auch Moonlight) und dann diese Applikationen aus dem Game Mode heraus starten. Ist ganz nützlich, wenn man während des zockens kurz auf einer Webseite etwas nachschauen möchte und nicht unbedingt sein Handy dafür rauskramen möchte. Man kann dann gemütlich mit der Steam Taste zwischen z.B. Moonlight und Chrome (oder der Applikation seiner Wahl) hin und her switchen. Youtube Videos abspielen geht von dort aus dann auch ganz easy peasy ohne dafür in den Desktop Mode switchen zu müssen.
 
Zuletzt bearbeitet:
SavageSkull schrieb:
Wäre interessant um mal the Ascent mit Raytracing und maxed out auf dem Deck zu spielen
Geht ohne Probleme :) .. Sag Bescheid, wenn du Hilfe brauchst.
 
Hallo zusammen,

vielen Dank erstmal für die Mühe des Zusammenstellens des Beitrages.
Ich habe das Problem, dass meine Eingaben in Yuzu nicht erkannt werden.

Kurz zum Setup:
Ich habe einen PC, welcher ausschließlich per remote erreichbar ist.
Dieser soll als in-home streaming PC genutzt werden (für Emulatoren, aber auch Steam Spiele).
So möchte ich z.B. via Steam Deck das auf dem PC berechnete Yuzu gestreamt bekommen.

Ich habe Sunshine auf dem PC und Moonlight auf dem Steam Deck auch schon eingerichtet, sodass ich vom Steam Deck aus bereits a) auf den Desktop des PC zugreifen kann oder b) Yuzu direkt auf dem PC starte

In meinem Test musste ich aber feststellen, dass meine Eingaben (X, Y A, B, ...) im gestarteten Spiel des Emulators nicht ankommen.

Im Steam Deck ist das Layout " Moonlight with Desktop and Gamepad modes" eingestellt.
In Yuzu ist wahlweise Pro Controller --> xbox controller oder Handheld eingestellt. Ist egal, funktioniert beides nicht.

Inzwischen habe ich auch ViGEm Bus Driver installiert...klappt trotzdem nicht.

Hat jemand Erfahrung mit nicht durchgereichten control inputs ?
Weiß jemand was ich verändern muss?

Vielen Dank euch schonmal!
 
Yuzu selbst hab ich auf meinem PC nicht installiert, weshalb ich nicht direkt etwas dazu sagen kann. Allerdings habe ich festgestellt, dass bei Spielen aus dem Game Pass auf dem PC kein Steam laufen darf, weil es sonst Probleme mit der Controller-Steuerung gibt. Hast du mal probiert, Steam zu beenden, falls es gestartet ist?
 
  • Gefällt mir
Reaktionen: Abe81
Lustig, und traurig, wie viel besser moonlight+sunshine statt steam remote share funktioniert... Zumindest bei mir.
 
  • Gefällt mir
Reaktionen: Vendetta192
Ich möchte auch meine derzeitigen Erfahrungen mit euch teilen:

Server: 5800x mit 3070er FE und Sunshine, Kabelplus 750/75 mbit down/up

Meine moonlight clients:
Steam Deck OLED 1280x800 90Hz
LG C1 OLED 65" 4k 60, 90, 120Hz
S22 Plus 1920x1080 30, 60, 90, 120Hz

Hier eine Liste meiner tools, die ich verwende und gegebenenfalls per batch file einbinde.

Virtueller display driver:
https://github.com/itsmikethetech/Virtual-Display-Driver/
(nicht per batch eingebunden klarerweise)
Ich denke man sollte den virtuellen Monitor immer genauso einstellen wie das target display, das Moonlight verwendet. zB Steam Deck OLED: 1280x800 90Hz

Monitor swapper disabled den echten Monitor und macht das virtual display zum primary display:
https://github.com/Nonary/MonitorSwapAutomation
(muss man nur 1x setupen und wird automatisch in sunshine eingebunden, einfach den Instructions folgen)

QRes stellt die Auflösung des Virtual Displays so ein wie der client es haben möchte:
https://www.majorgeeks.com/files/details/qres.html
(ich traue der Sache noch nicht ganz)

Gsync toggle - die Meinungen gehen in die Richtung, dass gsync für streaming off sein soll:
https://github.com/FrogTheFrog/gsync-toggle

Nvidia framerate limiter, wenn man den von nvidia verwenden will per command line:
https://github.com/FrogTheFrog/frl-toggle

Rivatuner Statistics Server für frame limiting:
Hier hab ich globale Profile angelegt für 30, 60, 90 und 120 fps frame llimit, die ich bei Bedarf über die global config drüber kopiere uns dann rtss neu starte.
Profilefolder:
c:\Program Files (x86)\RivaTuner Statistics Server\Profiles\

Ins Internet streamen mit Sunshine: da gibt es dieses setup tool, das einem die ports automatisch mapped (mit Fritzbox gings):
https://github.com/moonlight-stream/Internet-Hosting-Tool/releases
Danach in Moonlight "add host" und die externe IP eingeben.

Playnite: GUI um Spiele bequem zu browsen und zu starten, ähnlich dem Steam big picture mode, vereint aber alle launcher und auch Emulatoren
https://playnite.link/

Vsync ist auch noch so ein Thema. Ich habe gelesen, dass VSync am host off sein soll, daher hab ich es auf "Applikation entscheidet" gestellt im Nvidia Control panel. Eine andere Erfahrung, die ich gelesen habe war, dass vsync am host und client aktiv sein soll bei gleichzeitigen target framecap = Hertz des target displays. Ich meine auch gelesen zu haben, dass Sunshine oder Gamestream nur ganze Frames liefert. Man sollte auch erwähnen, dass Vsync eine gewisse Latenz erzeugt und alleine schon deswegen dann disabled sein soll. Ich, wie gesagt hab Vsync am host und client auf off und mache fps limit am host = refresh rate am client mit RTSS.

Eingeschaltet wird der Host per wake on LAN über HomeAssistant (das ist ein riesiges Thema) und wenn der PC hängt kann ich ihn auch per smarter Steckdose power cyclen.

HDR hab ich noch ein Thema denke ich, dass ich HDR automatisch irgendwie verwenden kann oder auch nicht.

Das Ganze nimmt irgendwie immer größere Ausmaße an, aber ich denke ich bin langsam dort wo ich hin will. Ich finde es auch irgendwie schade, dass diese (notwendigen) addons nicht in sunshine gleich mitgeliefert kommen und man sich alles selbst zusammen stellen muss.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: NukER und Vendetta192
Danke Bigi für die Infos :)

Hier ist im Übrigen mein aktuelles Setup, welches für dich eventuell interessant sein könnte. Anstatt Monitor swapper nutze ich DisplaySwitcher2, welches etwas komfortabler ist in meinen Augen. Somit spart man sich auch QRes. Außerdem auch eine Lösung für die HDR Aktivierung.

Ich muss diesbezüglich auch noch den Eröffnungsthread aktualisieren, da sich doch einiges geändert hat.

mein grober Ablauf in Moonlight/Sunshine:
"Start Gaming" ist dabei die Applikation welche ich via Sunshine angelegt habe, um mich auf meinen Host zu verbinden.

Moonlight starten ->
-> WoL vom Host PC, wenn Host PC aus
-> Mit Host verbinden
-> "Start Gaming" Application starten
-> Diese führt eine Batch Datei aus welche Monitor Setup anhand der Moonlight Parameter (Auflösung/Hz/HDR) einstellt und startet dann die Playnite
-> Starte Spiel via Playnite

Wenn ich mit dem Spielen fertig bin:

Spiel beenden ->
-> Tastenkombination am SteamDeck zum Beenden der Moonlight Session
-> "Start Gaming" Application beenden
-> triggert die Batch Datei, welches das Monitorsetup wieder auf default setzt
-> Host Shutdown Applikation starten
-> triggert die Batch Datei, welche den Host herunterfährt

Die Tools:

#1 VirtualDisplayDriver (https://github.com/itsmikethetech/Virtual-Display-Driver)

Wurde hier ja schon besprochen. Ein Treiber welcher einen virtuellen Monitor erstellt. Dieser ist nötig, um entsprechend Einstellungen im Bezug von Auflösung, Bildwiederholfrequenz und HDR zu für diesen virtuellen Monitor vorzunehmen (und auf den entsprechenden Moonlight Client anzupassen), welche beim physischen Monitor nicht möglich wären.
Als Beispiel: Mein SteamDeck hat HDR, 90 Hz und 1280x800 Pixel
Der Monitor am Host: kein HDR, 60 Hz und 2560x1440 Pixel


Die Auflösung wären in diesem Fall nicht problematisch, aber die Bildwiederholfrequenz und das fehlende HDR führen zu Komplikationen. Außerdem muss der Host Monitor so nicht eingeschaltet sein.

#2 AutoHotKey (HDR Switch) (https://autohotkey.com/download/ahk-v2.zip)

Info: Wird für die Batch Dateien benötigt
Dieses Tool ermöglicht es HDR am Host zu aktivieren oder zu deaktivieren. AutoHotKey macht im Endeffekt nichts anderes als die Windows Tastenkombination für HDR Toggle (Windows + Alt + b) durchzuführen.

Als Parameter übergibt man eine AHK Datei (in meinem Fall ToggleHDR.ahk genannt) in der die Tastenkombination steht. Die AHK Datei kann man mit Notepad einfach selbst erstellen. Sie enthält folgende Zeile Code:

Code:
Send "#!b"

Syntax ist im Endeffekt AutoHotkey64.exe ToggleHDR.ahk

Leider gibt es nur die Möglichkeit eines Toggle ohne check, ob aktuell HDR aktiv ist oder nicht.
Bisher habe ich kein Tool gefunden, welches mir ermöglicht herauszufinden, ob HDR aktuell aktiv oder inaktiv ist und entsprechend das Gegenteil zu setzen.

Das hat zur Folge dass es sein kann, dass man HDR ausschaltet (weil es noch aktiv ist) anstatt es anzuschalten und via versa. Siehe hierzu die Info beim Shutdown Script.

Wichtig ist, dass HDR vor dem Laden der Monitorkonfiguration via DisplaySwitcher aktiviert wird, da es sonst dazu, dass das Monitor Setup aufgelöst wird und der Hauptmonitor wieder aktiviert wird. Sollte dafür jemand einen Lösung haben, immer her damit :)
Sofern man einen HDR fähigen Monitor am Host PC hat und alle Moonlight Clients die man im Einsatz hat HDR nutzen, kann man sich den HDR Switcher natürlich sparen.

Alternativ kann man auch eine als .exe kompilierte Variante der .AHK Datei verwenden: https://github.com/ejams1/HDRToggle

#3 DisplaySwitcher2 (https://12noon.com/?page_id=641)

Info: Wird für die Batch Dateien benötigt

Dieses Tool ist recht praktisch zum einstellen des Monitor Setups. Es kommt ohne umständliche Parameter aus, da man nur eine XML Datei angibt, welche die Monitor Konfiguration enthält, die man dann anwenden will.

Man richtet sich seine Monitor Konfiguration am Host PC via den Windows Anzeigeeinstellungen so ein, wie man es haben will und ruft das Tool via CMD einmal mit dem Parameter -create="xxxxx.XML" auf. Dann erstellt das Tool eine XML Datei mit der aktuellen Config. (leider enthält/speichert es keine Info über den HDR Status)

Somit habe ich verschiedene XML Dateien für jede Client Configuration die ich nutze. Z.B. so:

VD_1280_800_90.xml (für das SteamDeck)
VD_1920_1080_60.xml (für meinen Beamer)
default.xml

Im Endeffekt reichte es, wenn man eine der beiden oberen Dateien einmal erstellen lässt kopiert und dann nur die darin enthaltenen Werte für Auflösung und Bildwiederholrate anpasst und entsprechen dann unter einem anderen Namen speichert:

Auflösung:
Code:
<size width="1280" height="800"/>
und Hz:
Code:
<refresh numerator="90" denominator="1"/>

Je nach Client Parameter wird dann entsprechende XML Datei via der Start Batch geladen (-configure="xxxxxx.XML").

Leider bei 12noon nicht mehr zum Download verfügbar. Kann aber noch immer hier heruntergeladen werden: https://display-changer-ii.en.lo4d.com/download

#4 Playnite (https://playnite.link/)

Anstatt alle Spiele, welche man via Moonlight streamen möchte, in Sunshine kompliziert anzulegen, nutze ich mittlerweile Playnite, welches eine visuelle Spielebliothek bzw einen Spielestarter darstellt.
Dies ist dann auch im Endeffekt die Applikation welche ich via Moonlight starte.
Vor dem Start von Playnite wird die Batch Datei getriggert, welche mir das entsprechende Monitorsetup lädt und HDR akviert.


#5 Batch Datei (start session) - (in meinem Fall screenres.cmd genannt)

Diese Batch rufe ich auf, wenn ich via Moonlight die entsprechende Session zu meinem Host starte (siehe Punkt "Sunshine Application Konfiguration"). An sie übergebe ich via Sunshine die Parameter für die eingestellte Client Auflösung, Bildwiederholrate und ob HDR verwendet werden soll.

In der Batch selbst wird dann entschieden welches Monitor Setup via Display Changer geladen werden soll und ob der HDR Switch getriggert wird.

Inhalt der Batch lautet wie folgt bei mir:
DC2.exe ist in dem Fall DisplayChanger2

Bash:
@echo off

set width=none
set height=none
set FPS=none
set HDR=none

:========================================
:#### Abhandlung der Parameter Uebergabe
:========================================

:initial
if "%1"=="" goto done
set aux=%1
if "%aux:~0,1%"=="-" (
   set nome=%aux:~1,250%
) else (
   set "%nome%=%1"
   set nome=
)
shift
goto initial
:done

:========================================
:#### HDR Switch
:========================================

IF %HDR%==true (
    start /wait C:\SunshineTools\AutoHotkey64.exe C:\SunshineTools\ToggleHDR.ahk
 
    TIMEOUT 5
)

:========================================
:#### Starten von DisplayChanger2
:#### mit entsprechender XML Datei anhand
:#### der uebermittelten Parameter
:========================================

IF %FPS%==90 goto :SteamDeckRes
IF %FPS%==60 goto :BeamerRes

:SteamDeckRes
:#### Config for SteamDeck - 1280x800 @ 90

IF %width%==1280 (
    start /wait  C:\SunshineTools\dc2.exe -configure="C:\SunshineTools\VD_1280_800_90.xml" -temporary
    goto:eof )

:BeamerRes
:#### Config for Beamer - 1920x1080 @ 60

IF %width%==1920 (
    start /wait  C:\SunshineTools\dc2.exe -configure="C:\SunshineTools\VD_1920_1080_60.xml" -temporary
    goto:eof )

Bitte daran senken, dass die Batch nach meinen persönlichen Moonlight Clients konzipiert ist. Ihr könnt diese entsprechend erweitern. Wer möchte kann in die entsprechenden Zeilen auch noch den FPS Toggle von FrogTheFrog (https://github.com/FrogTheFrog/frl-toggle) einbinden, sofern er eine Nvidia Karte nutzt. Mehr dazu weiter unten.

#5 Batch Datei (end session) - (in meinem Fall default.cmd genannt)

Diese Batch ist dafür da, um das Monitor Setup wieder in den Normalbetrieb zu setzen.

Diese Batch wird aufgerufen, wenn die Moonlight Session beendet wird (siehe Punkt "Sunshine Application Konfiguration"). In dieser übergebe ich via Sunshine nur die Parameter für HDR.

DC2.exe ist in dem Fall die .exe von DisplayChanger2

Bash:
@echo off

set HDR=none

:initial
if "%1"=="" goto done
set aux=%1
if "%aux:~0,1%"=="-" (
   set nome=%aux:~1,250%
) else (
   set "%nome%=%1"
   set nome=
)
shift
goto initial
:done

IF %HDR%==true (
    start /wait C:\SunshineTools\AutoHotkey64.exe C:\SunshineTools\ToggleHDR.ahk
) ELSE (
    start /wait C:\SunshineTools\dc2.exe -configure="C:\SunshineTools\default.xml"
)

Shutdown Batch Datei

Dies ist eine Batch Datei, welche ich als Spiel/Applikation in Sunshine hinzugefügt habe. Sie ist dafür da, den Host PC herunterzufahren. Man könnte zwar den PC auch innerhalb der Playnite Session herunterfahren, was aber zur Folge hat, dass der HDR Switch nicht getriggert wird (HDR wäre dann beim nächsten Start von Playnite entsprechend off und müsste händisch wieder eingeschaltet werden)

Ich habe sie PowerOff.bat genannt und sie enthält folgenden Code:

Code:
shutdown.exe /s /t 0 /f

Sunshine Application Konfiguration

Ich persönlich habe 2 Applikationen bei Sunshine konfiguriert welche mir dann in Moonlight angezeigt werden:

Ordnerverweise müssen logischerweise angepasst werden :)

1. Start Gaming:

Startet Playnite auf dem Host mit vorherigem Trigger der Batch Datei #1 (screenres.cmd) und dem Undo Command die Batch Datei #2 (default.cmdd):

Command Preperations:

Do Command:
Code:
cmd /C C:\SunshineTools\screenres.cmd -width=%SUNSHINE_CLIENT_WIDTH% -height=%SUNSHINE_CLIENT_HEIGHT% -FPS=%SUNSHINE_CLIENT_FPS% -HDR=%SUNSHINE_CLIENT_HDR%

Undo Command:
Code:
cmd /C C:\SunshineTools\default.cmd -HDR=%SUNSHINE_CLIENT_HDR%

Elevated: aktiv

Command:
Code:
C:\Users\FUSiON\AppData\Local\Playnite\Playnite.FullscreenApp.exe
Working Directory:
Code:
C:\Users\FUSiON\AppData\Local\Playnite\

Bildschirmfoto 2024-02-14 um 16.21.25.png


2. Shutdown Host:

Führt die Shutdown Batch Datei aus, welche den Rechner herunterfährt.

Bildschirmfoto 2024-02-14 um 16.23.30.png



Wake on LAN und Internet Stream

Wake on LAN läuft bei egal ob ich zuhause oder unterwegs bin. Wenn ich unterwegs bin, verbinde ich mein Steam Deck einfach via WireGuard (VPN) mit meinem Heimnetzwerk und kann dann auch meinen Host PC via WoL hochfahren. Wireguard habe ich auf meiner Fritzbox eingerichtet. Es gibt diverse Anleitungen im Netz wie man das Wireguard Verbindungsprofil auf dem Deck installiert. Kleiner Pro Tip: es gibt ein Decky Plugin, welches einen VPN Switch im Game Mode hinzufügt. Auch das Streamen selbst läuft via VPN bestens :).


HDR 🥰🤩🤤

Sowohl Moonlight als auch Virtual Display Driver unterstützen mittlerweile HDR. Sollte die HDR Option in Moonlight auf eurem Steam Deck OLED ausgegraut sein, müsst ihr Moonlight deinstallieren und die nightly Version installieren:

https://github.com/FrogTheFrog/com.moonlight_stream.Moonlight


V-SYNC / FPS Limit

Im Spiel selber: V-Sync off / FPS limitiert auf die ZielFPS des Moonlight Clients
In Moonlight: V-Sync: on / Frame Pacing: on

aktiviertes V-Sync in Moonlight macht bei mir nicht wirklich Unterschiede und man ist auf der sicheren Seite:

20240214210756_1.jpg


Das Script von FogTheFrog (https://github.com/FrogTheFrog/frl-toggle) kommt mir hier sehr gelegen. Danke dafür :). Das erspart mir das händische Ändern im Game bezüglich FPS Limit. Habe dies in meiner Batch Datei nun eingebaut :)

Controller Setup für Moonlight (Maus/Tastatur)

Per default nutzt das SteamDeck für Moonlight die Standard Game Controller Konfiguration, was dazu führt, dass es etwas umständlich ist, wenn man während der Moonlight Session eine vernünftige Maus Steuerung haben möchte um z.B. auf dem Host Desktop zu arbeiten.

Die Trackpads des SteamDeck sind hervorragend als Maussteuerung nutzbar. Es bedarf aber einer kleiner Änderung, damit diese ohne umständliches "gedrückt halten der Steam Taste" nutzbar sind:

Einfach das SteamDeck Steuerungsprofil für Moonlight wie folgt anpassen:
Rechtes Trackpad: Absolute Maus
Rechtes Trackpad klick: linke Maustaste
Linkes Trackpad: Mausrad
Linkes Trackpad klick: rechte Maustaste
R5 Taste: ESC

20240214151523_1.jpg


Es gibt auch Community Profile die ähnliches abbilden, aber ich glaube es ist besser euch kurz die entsprechende Änderung zu erklären :).

Bei Gelegenheit muss ich den Eingangspost mal anpassen, da einige Informationen mittlerweile outdated sind.

bigl666 schrieb:
irgendwie schade, dass diese (notwendigen) addons nicht in sunshine gleich mitgeliefert kommen und man sich alles selbst zusammen stellen muss.

Es wurde schon einiges eingebaut. Aber gerade im Bereich HDR und Virtuelle Monitore wurde erst kürzlich diesbezüglich Durchbrüche erzielt. Ein virtueller Monitor mit HDR Funktion wurde von Mike erst kürzlich released. Dies wird denke mal in Zukunft dann auch in Sunshine Einzug finden.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Vendetta192 und bigl666
Hi!

HDR

Danke für den HDR toggle, da spare ich mir das Suchen. Auch der Link zum DC2 download ist gut, danke, hab den nicht gefunden und mir eine andere Lösung gesucht (denke aber der link ist irgendwo im thread hier schon geschrieben worden). Muss ich mir noch einbauen.

VPN

Wegen VPN hab ich das preconfigured Fritzbox VPN mal probiert und einen Speedtest gemacht im Urlaub. Ohne VPN hatte ich an meinem Standort 40-50Mbit und mit aktiviertem VPN hatte ich nur 6-7Mbit (gemessen am S22+). Ob das jetzt wirklich Einfluss hat aufs streaming hat oder nicht kann ich jetzt nicht sagen, dafür hab ich zu wenig getestet. Daher bin ich mir nicht sicher ob ich hier falsch liege. Eventuell ist Wireguard auch performanter als das preconfigured VPN der Fritzbox.
Jedenfalls hab ich dann zur Portöffnungsoption geswitched und mir das Internet Hosting tool geladen:
https://github.com/moonlight-stream/Internet-Hosting-Tool/releases

Virtueller Monitor

Hier ist es wichtig zu erwähnen, dass alle Auflösungs und Refreshrate Kombinationen, die man nutzen möchte auch Einzug halten in die C:\IddSampleDriver\option.txt: (reboot danach empfohlen)

INI:
1
640, 360, 30
640, 360, 60
640, 360, 90
640, 360, 120
640, 480, 30
640, 480, 60
640, 480, 90
640, 480, 120
1280, 720, 30
1280, 720, 60
1280, 720, 90
1280, 720, 120
1280, 800, 60
1280, 800, 90
1920, 1080, 30
1920, 1080, 60
1920, 1080, 75
1920, 1080, 90
1920, 1080, 120
2560, 1440, 60
2560, 1440, 90
2560, 1440, 120
2560, 1440, 144
3840, 2160, 30
3840, 2160, 60
3840, 2160, 90
3840, 2160, 120


Beitrag gekürzt, da sich herausgestellt hat, dass das mit der HDR Erkennung nicht funktioniert...
 
Zuletzt bearbeitet:
bigl666 schrieb:
Eventuell ist Wireguard auch performanter als das preconfigured VPN der Fritzbox
Ich kann bei mir keinen Unterschied an der Performance feststellen, ob ich mit Wireguard verbunden bin oder ob ich per Portweiterleitung arbeite. Daher ist Wireguard definitv die bessere Wahl :)

Ich habe übrigens herausgefunden, warum das Umschalten von HDR immer meine Default Configuration zurückgestellt hat. Das lag an dem "-temporary" Parameter von Display Changer 2.

Mit dieser Erkenntnis kann ich den virtuellen Desktop per default aus lassen und nur anschalten, wenn ich eine Moonlight Session starte. :)
(Bei mir führt ein aktivierter virtueller Desktop zu FPS Drops am Hauptmonitor, wenn ich V-Sync aktiviert habe.)

Aktuell sieht meine Konfiguration nun folgender Maßen aus:

1) Meine default Konfiguration ist mit ausgeschaltetem virtuellen Monitor (physischer Monitor an / virtueller Monitor aus): VD_off.xml
2) Danach habe ich eine Konfiguration, welche den virtuellen Monitor aktiviert hat (physischer Monitor an / virtueller Monitor an und extended): VD_on.xml
3) Und dann entsprechend jeweils eine Konfiguration mit deaktiviertem physischen Monitor und dem virtuellen Monitor mit passend eingestellter Auflösung und Hz (z.B. VD_1920_1080_60.xml)

Im "screenres.cmd" Script sieht dass dann folgendermaßen aus:

Bash:
@echo off

set width=none
set height=none
set FPS=none
set HDR=none

:========================================
:#### Abhandlung der Parameter Uebergabe
:========================================

:initial
if "%1"=="" goto done
set aux=%1
if "%aux:~0,1%"=="-" (
   set nome=%aux:~1,250%
) else (
   set "%nome%=%1"
   set nome=
)
shift
goto initial
:done

:========================================
:#### Config - virtuelles Display aktiv
:========================================
start /wait C:\SunshineTools\dc2.exe -configure="C:\SunshineTools\\VD_on.xml"


:========================================
:#### HDR Switch
:========================================
IF %HDR%==true (
  start /wait C:\SunshineTools\AutoHotkey64.exe H:\DisplayChanger\AHK\ToggleHDR.ahk
  TIMEOUT 2
)


:========================================
:#### Starten von DisplayChanger2
:#### mit entsprechender XML Datei anhand
:#### der uebermittelten Parameter
:========================================

IF %FPS%==90 goto :SteamDeckRes
IF %FPS%==60 goto :BeamerRes

:SteamDeckRes
:#### Config for SteamDeck - 1280x800 @ 90

IF %width%==1280 (
    start /wait C:\SunshineTools\dc2.exe -configure="C:\SunshineTools\VD_1280_800_90.xml" -temporary
      start /wait C:\SunshineTools\frltoggle.exe 90
    goto:eof )

:BeamerRes
:#### Config for Beamer - 1920x1080 @ 60

IF %width%==1920 (
       start /wait C:\SunshineTools\dc2.exe -configure="C:\SunshineTools\VD_1920_1080_60.xml" -temporary
        start /wait C:\SunshineTools\frltoggle.exe 90
    goto:eof )

die default.cmd habe ich dann wie folgt angepasst:

Bash:
@echo off

set HDR=none

:initial
if "%1"=="" goto done
set aux=%1
if "%aux:~0,1%"=="-" (
   set nome=%aux:~1,250%
) else (
   set "%nome%=%1"
   set nome=
)
shift
goto initial
:done

:============== HDR Toggle
IF %HDR%==true (
    start /wait C:\SunshineTools\AutoHotkey64.exe C:\SunshineTools\ToggleHDR.ahk
    TIMEOUT 2
)

:============== Config - virtuelles Display off (back to default)
start /wait C:\SunshineTools\dc2.exe -configure="C:\SunshineTools\VD_off.xml"
start /wait C:\SunshineTools\frltoggle.exe 0

Wichtig ist also, dass die Konfiguration welche man via Display Changer VOR dem HDR Toggle lädt, nicht mit "-temporary" parameter angibt, sonst wird diese wieder zurückgesetzt.

Die Konfiguration welche den Virtuellen Desktop als einzigen Monitor hat (z.B. VD_1920_1080_60.xml) würde ich als Backup immer mit "-temporary" laden, damit man mit einem Neustart der Maschine immer seinen Hauptmonitor wieder aktiv hat :)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Vendetta192
Also erstmal ganz herzlichen für die super nützlichen Erklärungen. Das hilft sehr! Bei der letzten Konfiguration habe ich mich gefragt, warum Du das An- und Abschalten des Virtual Displays nicht in die Profile für die Client-spezifischen Auflösung eingefügt hast? Hat das (außer ggf. hinsichtlich der Übersichtlichkeit) Vorteile?
 
Nielsen schrieb:
Also erstmal ganz herzlichen für die super nützlichen Erklärungen. Das hilft sehr! Bei der letzten Konfiguration habe ich mich gefragt, warum Du das An- und Abschalten des Virtual Displays nicht in die Profile für die Client-spezifischen Auflösung eingefügt hast? Hat das (außer ggf. hinsichtlich der Übersichtlichkeit) Vorteile?

Das ist eigentlich damit begründet, dass ich das exklusive virtuelle Display (bei dem der physische Monitor ausgeschaltet ist) nicht als fixes Setting haben möchte sondern nur als temporäres (mit "-temporary" Parameter). Das temporäre Setting kann ich mit einem einfachen Neustart des Rechners rückgängig machen und bin im Falle eines Fehlers beim Streaming nicht blind, wenn ich die Session nicht wieder zurücksetzen kann.

Anderseits muss das Virtual Display aktiv sein, damit HDR eingeschaltet werden kann.

daher erst ein nicht-flüchtiges Setup laden, bei dem der VD und der physische Monitor an ist
dann HDR einschalten
dann das flüchtige Setting laden, bei dem dann auch Auflösung und Bildrate passt.

Hoffe ich hab das halbwegs verständlich erklärt :)
 
Zuletzt bearbeitet:
Hi,

funktioniert diese Lösung auch auf mit AMD Grafikkarten?

Ich hab leider 0 Erfahrung mit gamestreaming.
 
Ja, Sunshine läuft mit allen Grafikkarten.
 
  • Gefällt mir
Reaktionen: Vendetta192
Zurück
Oben