feat: Logon-Trigger für MoonlightTeardown als Fallback nach Shutdown

This commit is contained in:
Andre
2026-04-26 10:56:08 +02:00
parent ca59d41f4b
commit 3bb9b8c7e5
2 changed files with 10 additions and 3 deletions
+9 -2
View File
@@ -22,9 +22,11 @@ Sunshine läuft als Windows-Dienst (Session 0 / SYSTEM-Kontext). `DisplaySwitch.
Zur Kontrolle: Zur Kontrolle:
``` ```
schtasks /query /tn MoonlightTeardown /fo list schtasks /query /tn MoonlightTeardown /fo list /v
``` ```
Unter `Trigger` sollten zwei Einträge erscheinen: `At log on` (Fallback nach Shutdown) und der Task ist zusätzlich jederzeit manuell aufrufbar — beide Mechanismen nutzen dieselbe Aktion.
### 2. Sunshine konfigurieren ### 2. Sunshine konfigurieren
In der Sunshine Web-UI unter **Configuration > General**: In der Sunshine Web-UI unter **Configuration > General**:
@@ -41,11 +43,16 @@ Stream startet
└─> idd_an.bat └─> idd_an.bat
└─> DisplaySwitch.exe /external (virtuellen Monitor aktivieren) └─> DisplaySwitch.exe /external (virtuellen Monitor aktivieren)
Stream endet Stream endet (normal)
└─> idd_aus.bat [läuft in Session 0] └─> idd_aus.bat [läuft in Session 0]
└─> Start-ScheduledTask 'MoonlightTeardown' └─> Start-ScheduledTask 'MoonlightTeardown'
└─> Task Scheduler [InteractiveToken = Benutzersession] └─> Task Scheduler [InteractiveToken = Benutzersession]
└─> DisplaySwitch.exe /internal (physischen Monitor reaktivieren) └─> DisplaySwitch.exe /internal (physischen Monitor reaktivieren)
Stream endet durch Shutdown (Fallback)
└─> PC bootet neu → User-Login
└─> MoonlightTeardown [Logon-Trigger]
└─> DisplaySwitch.exe /internal (physischen Monitor reaktivieren)
``` ```
## Voraussetzungen ## Voraussetzungen
+1 -1
View File
@@ -9,7 +9,7 @@ if %errorLevel% neq 0 (
REM Angemeldeten Benutzer ermitteln (nicht SYSTEM) REM Angemeldeten Benutzer ermitteln (nicht SYSTEM)
for /f "tokens=*" %%u in ('powershell -NoProfile -Command "(Get-WMIObject Win32_ComputerSystem).Username"') do set CURRENT_USER=%%u for /f "tokens=*" %%u in ('powershell -NoProfile -Command "(Get-WMIObject Win32_ComputerSystem).Username"') do set CURRENT_USER=%%u
powershell.exe -ExecutionPolicy Bypass -NonInteractive -Command "$action = New-ScheduledTaskAction -Execute 'DisplaySwitch.exe' -Argument '/internal'; $principal = New-ScheduledTaskPrincipal -UserId '%CURRENT_USER%' -LogonType Interactive -RunLevel Highest; $settings = New-ScheduledTaskSettingsSet -MultipleInstances IgnoreNew -ExecutionTimeLimit (New-TimeSpan -Minutes 1); Register-ScheduledTask -TaskName 'MoonlightTeardown' -Action $action -Principal $principal -Settings $settings -Force; Write-Host 'Task MoonlightTeardown erfolgreich registriert.'" powershell.exe -ExecutionPolicy Bypass -NonInteractive -Command "$action = New-ScheduledTaskAction -Execute 'DisplaySwitch.exe' -Argument '/internal'; $principal = New-ScheduledTaskPrincipal -UserId '%CURRENT_USER%' -LogonType Interactive -RunLevel Highest; $settings = New-ScheduledTaskSettingsSet -MultipleInstances IgnoreNew -ExecutionTimeLimit (New-TimeSpan -Minutes 1); $trigger = New-ScheduledTaskTrigger -AtLogOn -User '%CURRENT_USER%'; Register-ScheduledTask -TaskName 'MoonlightTeardown' -Action $action -Principal $principal -Settings $settings -Trigger $trigger -Force; Write-Host 'Task MoonlightTeardown erfolgreich registriert.'"
echo. echo.
echo Fertig. Dieses Fenster kann geschlossen werden. echo Fertig. Dieses Fenster kann geschlossen werden.