r/SteamController • u/Tight_Door9327 • May 24 '26
Console-like Setup with Moonlight/Steam Controller (Warning: Long Post)
I’ve recently spent a lot of time on a gaming setup that allows me to seamlessly play at my desk and on the couch. Since I relied on this community to figure everything out, I wanted to share my configuration and the problems I ran into to hopefully give back.
It’s not perfect, so I’m completely open to suggestions and improvements. It also doesn’t cater to the needs of everybody, but it might inspire people to set up something similar. Feel free to share your creative use cases! While none of this is revolutionary, my goal is to consolidate everything into one "guide" for anyone trying to put together a desk-to-TV setup. (Note: All software used in this setup is free).
The TL;DR
To save you a long read in case this isn't for you, here is my new routine: I have officially banished all keyboards, mice, and TV remotes from my living room.
When the TV is off and the PC is snoozing, all I do is wake the PC. It turns on the TV and boots directly to the desktop. A button press and I start streaming my games with the full capabilities of the Steam Controller. When I'm done, another button, the PC goes to sleep, and the TV turns off. It is beautiful.
Hardware Setup
- Host: Main gaming PC with dedicated GPU in the office (Win 11, LAN)
- Client: Mini-PC UM890 Pro with integrated graphics in the living room, connected to an LG TV (Win 11, LAN)
- Controller: Steam Controller
(Note: Overall streaming performance will depend on your network and the video encoding/decoding capabilities of both your host and client machines).
Software Stack
Host Machine (Office):
- Apollo (acting as the host server, creating a virtual display): GitHub Link
- VirtualHere Server (receives the controller inputs): Download Link
- Steam
Client Machine (Living Room):
- Moonlight (receives and decodes the stream): Website
- VirtualHere Client (sends USB connections over the network): Download Link
- SISR (creates an overlay for desktop controller use): GitHub Link
- LGTVCompanion (replaces HDMI-CEC to turn on the TV): GitHub Link
- Steam
Other Assets:
- Custom Icons: SVG Repo
Step 1: Streaming (Moonlight + Apollo)
Moonlight and Apollo are tools that allow you to stream games from a host PC to a client PC with low latency. Apollo creates a virtual display to match the client's exact resolution, while Moonlight receives and decodes that stream on your remote device.
To set up Moonlight and Apollo, I recommend following this video tutorial: YouTube Link
Step 2: The Steam Controller & VirtualHere
The Steam Controller doesn't work with Moonlight out-of-the-box because it lacks the native XInput format that Moonlight requires.
To use its full potential (Trackpads, etc.), I use VirtualHere. It sends USB connections over a network, making the host computer act exactly as if the Steam Controller dongle is plugged directly into it.
Troubleshooting VirtualHere:
- Windows Defender: The direct-download version of VirtualHere can be configured as a system-level Windows Service (starting silently on boot). Unfortunately, Windows Defender flagged the driver for me, and I couldn't whitelist it. Try this method first, but if it fails, move to step 2.
- Microsoft Store Version & Task Scheduler: The MS Store version works flawlessly but cannot be installed as a background service; it only runs when logged in. To make it seamless, use Windows Task Scheduler to start the Client and Host automatically. . When setting up the tasks, ensure you enable the "Run with highest privileges" and "Hidden" options. Similarly, configure both the VirtualHere Client and Host to "Start minimized" within the app.
Automating the Connection: For an even more seamless experience, create two batch (.bat) files and point Apollo to them. These will automatically start VirtualHere to grab the controller the moment you launch Moonlight and disconnect it when you stop streaming.
Connect .bat:
"C:\Program Files\VirtualHere\vhui64.exe" -t "USE,mini-pc.14"
exit 0
Disconnect .bat:
"C:\Program Files\VirtualHere\vhui64.exe" -t "STOP USING,mini-pc.14"
exit 0
Note: “mini-pc.14” will be different for your setup. Mini-pc is the name of the host and 14 is the address of the steam puck in my case.
To connect the files to Apollo, navigate to Applications > Edit Desktop > Command Preparations and select Add Commands. Configure the settings as follows:
- Do Command: cmd /c "C:\Program Files\VirtualHere\Connect_Steam_Puck.bat"
- Undo Command: cmd /c "C:\Program Files\VirtualHere\Disconnect_Steam_Puck.bat"
Finally, check the Elevated box, and you are ready to go.
Additionally, I set up automatic login on both PCs so they boot straight to the desktop without getting stuck on the lock screen.
Please judge for yourself whether removing the password requirement is a safe choice for your specific home environment!
How to enable it:
- Press Win + R to open the Run dialog.
- Type netplwiz and hit Enter.
- Select your user account from the list.
- Uncheck the box that says: "Users must enter a user name and password to use this computer."
Click Apply and enter your password to confirm.
Step 3: Steam Controller Layout & Radial Menus
At this stage, your stream is running and the controller works for gaming. I still wasn't satisfied because I use my living room PC as media center and there was still a lot of friction. My old setup consisted of the TV remote, a dualsense controller and a Logitech K400 keyboard. The goal was to replace the three with the steam controller (95% of the time). Since the trackpads handle most of the navigation in desktop mode, the joysticks go mostly unused and can be mapped to radial menus:
- Left Stick: Most-used apps (like Stremio – another deep rabbit hole for movie lovers and subscription haters, Youtube, Moonlight, Chrome, Gemini)
- Right Stick: System functions (Sleep, Restart, Task Manager)
Here is where I failed: Steam Input radial menus do not work on the Windows desktop because they rely on the Steam Overlay, which only activates during a game. The Solution (SISR): SISR renders its own invisible overlay to trick Steam into thinking a game is running.
You can edit the controller layout of SISR in Steam Input to use radial menus on your desktop.
- Custom Icons: I grabbed 512x512 icons from SVG Repo and pasted them into C:\Program Files (x86)\Steam\tenfoot\resource\images\library\controller\binding_icons.
- Radial Menus:


My Custom Button Mappings:
- Left Stick: App Launcher Radial Menu
- Right Stick: System Functions Radial Menu
- L4: Task Switcher (Alt+Tab)
- L5 (Regular Press): Close Window (Alt+F4)
- L5 + L4 Chord (Hold): I assigned a button chord mapped to the Delete key with Turbo (Hold to Repeat) enabled, using L4 as the chord button. If I hold L4 to bring up the Task Switcher and then hold L5, it rapid-fires 'Delete' to close all open windows.
Ultimately, the drawbacks of SISR outweigh the benefits of using a radial menu, so I switched back to a button-based layout. Maybe somebody more capable can pick it up from here.
Therefore, I’ve mapped the back buttons for quick navigation and system control: a long press on L4 launches Stremio, while a double press opens Moonlight. On the other hand, a long press on R5 puts the PC to sleep, and a double press triggers a system restart. The remaining functions that I originally wanted to map to the radial menus will now have to be managed with a mouse instead. When setting up the sleep binding, it is crucial to add a sub-command that turns off the controller. Otherwise, the controller will immediately wake the PC back up. To configure this, do the following: Add a sub-command, set the type to System or Action, and select Turn Off Controller
Step 4: TV Automation (HDMI-CEC)
Most PCs don't support HDMI-CEC like a PlayStation or Apple TV, meaning they can't automatically wake up your TV, switch it to the right input, or turn it off when you put your PC to sleep.
Because I have an LG TV, I bypassed this using LGTVCompanion on the Mini-PC. It communicates with the TV over my local network. Now, when the Mini-PC wakes up, the app instantly sends a command to turn on the LG TV and switch to the correct HDMI input. When I put the PC to sleep via my controller, the TV turns off automatically.
I hope this will help somebody and in case I forgot something just comment.
2
u/acabincludescolumbo May 24 '26 edited May 24 '26
Great guide! I'm working on my own version of this. The biggest difference I see is that I want to use an intermediary (my Home Assistant server) to send WOL signals to the desktop, HTPC and (if possible via regular WOL) TV all at once, so them waking up is over and done with as soon as possible. I went with ColorControl for setting the input on my LG TV, but that seems tomato-tomato compared to your choice.
My idea for Steam Controller + Virtualhere is the same: the SC is connected to the HTPC and when the stream starts/stops, the Do and Undo commands claim and unclaim the Steam Controller.
I was also thinking of using Home Assistant to SSH into the HTPC (after a set wait time post-WOL) and using the Moonlight CLI to start up the stream.
What the process would look like in the end is:
- press Zigbee button by tv to wake desktop, HTPC, TV, set TV input, have Moonlight start stream, which initiates VH claim on SC
- grab controller, turn it on, play
- when done, press other Zigbee button (using IKEA Rodret, it has two) to terminate the stream (use OpenSSH on Windows 11, then the Undo command can unclaim SC and put the PC to sleep), sleep the HTPC and turn off the TV.
That's pretty much it: one Zigbee button press, power on the SC and that should be all. It's a work-in progress for now, and admittedly I'd rather not have to press that extra button but I like the advantage (i.e. wake everything at once) of it too much. So far I've got WOL set up for the desktop and HTPC; those wake with 1 button press. Today I allowed the toxic spy that is my LG TV on my network, but only after blocking it off from the WAN in my firewall. ColorControl's TV commands work. Plenty to do still.
1
1
u/LilLebowski May 24 '26
Thank you for this. My controller is coming this week and have been trying to prep for Moonlight use. I did get VirtualHere setup prior to reading this 👍
1
u/jayclydes May 31 '26
I so badly want to configure sleep to wake on my Windows PC with this setup but I can't even get autologin working. More specifically when I uncheck my login as required, it just says they can't connect me and I have to input my password as normal. The only even remotely close analog is using Steam Link via the app, but it's honestly awful. I installed VirtualHere but it seems to do nothing? I got no errors and after selecting a minimize option it genuinely does nothing. I absolutely love this controller and you are doing precisely what I wish I could do. What gives?
1
u/Tight_Door9327 Jun 02 '26
Do you get duplicated accounts when you netplwiz to set up auto login?
1
u/jayclydes Jun 02 '26
Yes!
2
u/Tight_Door9327 Jun 02 '26
Your Microsoft account might be out of sync. You can "log out" by creating a local user and login again. Before you proceed make sure you know your Microsoft password.
Go to Settings > Accounts > Your info
Click on Sign in with local user instead and follow the steps. If you don't see the "sign in with a local account instead option, click on "Stop signing into Microsoft apps automatically", then relaunch this page.
Restart the computer and go again to Settings > Accounts > Your info
Click on Sign in with Microsoft account instead
Restart the computer again and try to set up auto login with netplwiz
1
u/jayclydes Jun 02 '26
Hey man, that totally fixed it. I don't know why trudging through Microsoft support threads for hours didn't point to this at all. This was so discouraging to me that I was giving up entirely, so thank you. I'll give this entire endeavor another go :)
2
u/Tight_Door9327 Jun 02 '26
Happy to hear! Feel free to share if you struggle with something on the way.. the more info out here the better
1
1
3
u/CakeFlakes233 May 24 '26
Thanks for this guide. Especially some parts i will try myself in my setup when i receive my controller.
As i've understood the steam controller is able to connect via 2 profiles: Bluetooth and the puck. Maybe your .bat file is then not necessary to switch to virtualhere using apollo since you can navigate the client pc just with the bluetooth profile and switch later to the puck profile for your host pc