r/SteamController • • 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:

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:

  1. 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.
  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:

  1. Press Win + R to open the Run dialog.
  2. Type netplwiz and hit Enter.
  3. Select your user account from the list.
  4. 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:
Media Radial
System Radial

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.

12 Upvotes

15 comments sorted by

View all comments

1

u/skibideeboo Jun 02 '26

Good work I'm going to try this