SunshineDisplaySwitch
Löst ein Problem beim Game-Streaming mit Sunshine + Moonlight: Der physische PC-Monitor soll während des Streams deaktiviert sein und danach zuverlässig wieder aktiviert werden.
Hintergrund
Sunshine läuft als Windows-Dienst (Session 0 / SYSTEM-Kontext). DisplaySwitch.exe /internal hat aus diesem Kontext zwar keinen Fehler geworfen, aber keinen Effekt gehabt — das Reaktivieren eines deaktivierten Monitors erfordert die interaktive Benutzersession. Die Lösung nutzt den Task Scheduler mit InteractiveToken, um den Befehl garantiert in der richtigen Session auszuführen.
Dateien
| Datei | Zweck |
|---|---|
register_task.bat |
Einmalige Einrichtung — registriert den Scheduled Task |
idd_an.bat |
Sunshine Preparation Command — schaltet auf virtuellen Monitor um |
idd_aus.bat |
Sunshine Teardown Command — reaktiviert den physischen Monitor |
Einrichtung
1. Task registrieren (einmalig)
register_task.bat per Doppelklick ausführen und den UAC-Dialog bestätigen. Der Task MoonlightTeardown wird in der Windows-Aufgabenplanung registriert.
Zur Kontrolle:
schtasks /query /tn MoonlightTeardown /fo list
2. Sunshine konfigurieren
In der Sunshine Web-UI unter Configuration > General:
| Feld | Wert |
|---|---|
| Command Preparations — Do | Pfad zu idd_an.bat |
| Command Preparations — Undo | Pfad zu idd_aus.bat |
Funktionsweise
Stream startet
└─> idd_an.bat
└─> DisplaySwitch.exe /external (virtuellen Monitor aktivieren)
Stream endet
└─> idd_aus.bat [läuft in Session 0]
└─> Start-ScheduledTask 'MoonlightTeardown'
└─> Task Scheduler [InteractiveToken = Benutzersession]
└─> DisplaySwitch.exe /internal (physischen Monitor reaktivieren)
Voraussetzungen
- Windows 10/11
- Sunshine als Streaming-Server
- Kein zusätzliches Tool erforderlich — nur Windows-Bordmittel