Skip to main content

Defekte RDP-Sitzung mit Bordmitteln und Steam Link reparieren

Defekte Gaming-RDP-Sitzung mit Bordmitteln und Steam Link reparieren

Microsoft stellt mit den Programmen tscon und quser und den Fähigkeiten der in Windows integrierten PowerShell eine Möglichkeit bereit, RDP-Sitzungen zu identifizieren und umzuziehen. In Verbindung mit Steam Link lassen sich damit defekte RDP-Sitzungen für Gaming reparieren.

Anwendungsfall/Fehlerbeschreibung

Das Abschießen der Sitzung oder erzwungene Neustarten des Computers ist nicht erwünscht, da hierdurch ungespeicherter Spielfortschritt verloren ginge.

Ein Wechsel zu Steam Link ist in diesem Fall nicht möglich: Sobald ein Anwender sich via RDP anmeldet, wird auf der Konsolensitzung (die mit Monitor, Maus und Tastatur verbundene Sitzung) der Sperrbildschirm eingeblendet (insbesondere bei Client-Windows-Editionen). Steam Link kann diesen Sperrbildschirm anzeigen, aber nicht durch Anmelden/Entsperren verlassen.

Lösung

Der Workaround besteht aus folgenden Schritten:

  1. RDP-Sitzung aufbauen
  2. Startmenü aufrufen (Startmenü ist in der Regel nutzbar)
  3. Verknüpfung zum Umzug der RDP-Sitzung (mehr dazu siehe unten) aufrufen, auftretende Abfragen und Fehlermeldungen bestätigen
  4. Via Steam Link mit Computer verbinden
  5. Mit Alt+Tab zum Spiel wechseln (selten nicht notwendig)
  6. Spiel beenden
  7. Steam Link trennen
  8. RDP-Sitzung aufbauen
  9. Spiel wieder starten

Verknüpfung zum Umzug der RDP-Sitzung

Es bietet sich an, eine Verknüpfung direkt ins Startmenü zu legen oder an einen anderen Ort, den man mit einer schnellen Suche im Startmenü finden kann.

Das Verknüpfungsziel enthält die folgende Befehlszeile (darunter nochmal in ihre Einzelteile zerlegt) und Ausführen in könnte z.B. auf %PUBLIC% zeigen, um einen Speicherort für die Fehlerausgabe zu haben.

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -Command "$sessionid=((quser $env:USERNAME | select -skip 1) -split '\s+')[2]; tscon $sessionid /dest:console 2> UnlockErrors.log"

Details für Neugierige

In übersichtlich stellt sich die Befehlszeile wie folgt dar:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
  -NoProfile
  -ExecutionPolicy RemoteSigned
  -Command "
    $sessionid=((
      quser $env:USERNAME | select -skip 1
    ) -split '\s+')[2];
    tscon $sessionid /dest:console
    2> UnlockErrors.log
  "

Das Snippet startet eine PowerShell-Instanz und ermittelt mit quser die SessionId der aktuellen RDP-Sitzung. tscon erhält den Auftrag, die so ermittelte Sitzung auf die Konsole umzuziehen. Und weil die Sitzung, die dieses Snippet ausführt, in diesem Moment keinen Sperrbildschirm hat, ist dieser auch nicht mehr auf der Konsolensitzung im Weg.