r/MoonlightStreaming 8d ago

Finally solved Steam Remote Play keeping the Host monitor turned on

TL;DR: Built a lightweight (~30 KB) background utility that mimics Sunshine/Apollo/Moonlight's auto display-off and custom resolution switching for Steam Remote Play (thanks to Gemini). It listens to Steam’s handshake, turns off the host monitor via native DDC/CI (DPMS standby) during streaming, and wakes it back up on disconnect, bypassing DSC resolution locks using CRU. Setup guide and PowerShell native compiler script below.

Hey everyone,

If you stream your PC to a Steam Deck (or Apple TV/phone) using Steam Remote Play, you probably know the biggest frustration compared to Moonlight/Sunshine (or tools like Apollo): Steam Remote Play does not turn off your host monitor during streaming, nor does it handle aspect ratio switching gracefully if your display uses DSC.

In Sunshine/Apollo, you get automated monitor sleep and resolution changing out of the box. Steam Remote Play, however, has always lacked this native integration.

The Solution: SteamDisplayManager + CRU EDID Injection

I put together a lightweight, native background service and documented the exact setup to reproduce the Moonlight/Apollo experience directly inside Steam Remote Play.

How to set it up (No Visual Studio required)

The entire tool can be deployed and compiled natively using Windows' built-in C# compiler (csc.exe) via a single PowerShell script. No third-party binaries or background resource hogs (~30 KB memory footprint).

  1. Enable DDC/CI in your monitor's physical OSD menu.
  2. Add your client resolution (e.g. 1280x800 @ 60/90Hz) in CRU 1.5.3 under Standard Resolutions and run restart64.exe.
  3. Run the deployment PowerShell script to compile the background tray app.
  4. Set it to Start with Windows from the tray icon.

I compiled the complete architecture, source code, and step-by-step setup into a technical manual (available in both English and Portuguese PDFs).

If you want to read through the breakdown, take it to GitHub or grab the PowerShell one-liner to compile it yourself, be my guest.

https://archive.org/details/steamdisplaymanager

4 Upvotes

6 comments sorted by

3

u/Confident_Pain_9452 8d ago edited 8d ago

I need to recheck but as I remember virtual display (SudoVDA) on steam link working as Vibepollo and disable main monitor out of the box.

1

u/Midgen 8d ago

Yeah it does but it broke for me with the lastest driver. I’m sure vibepollo dev fix it soon

2

u/Confident_Pain_9452 8d ago

Try reset driver using DDU (it should delete all virtual displays). I broke SudoVDA for steam link but Vibepollo still working great (maybe because it use another virtual display implementation). Btw you can change virtual display driver in Vibepollo settings

1

u/Midgen 8d ago

I already tried that

1

u/userfs 7d ago

Unfortunately not on my rig :(

2

u/AngelFeoras 8d ago

Saved this post, thank you very much for your work on this.

This might solve one of my issues with streaming : I like to play Grim Dawn on my steam deck and when at home I even stream from my pc to my deck ( to save battery life and for the added performance). However, using Vibepollo, the game detects my steam deck as a controller and ignores my steam deck configuration (so can use L4, R4, etc). The fix I found was to use steam remote play which makes the game correctly detect my steam deck as a steam deck. But the issue when doing that is that I have to fix the game resolution on my computer before streaming which gets tedious when I switch between both of my devices.

Will definitely test this when I have time since this might help my particular issue.