When I was young, I loved renting a PSone just to play. Later my parents got me one of my own, but buying games was another story. Living in a small hometown meant the shops rarely had what I wanted, and internet access was limited too. You could not just grab whatever you wanted the way people do now.
These days I can download the games I missed, and building this library feels a bit like healing that childhood gap. I put it on a Bazzite VM in my Proxmox homelab with GPU passthrough: mostly older consoles through PS2, streamed to the TV or my phone, without turning into a chore to manage. After a few false starts, this is the setup that worked. Here’s how it came together.

On this page
- The hardware
- The one part I didn’t expect to need: a dummy plug
- Why Bazzite?
- The emulation stack
- The library
- Streaming to the TV (and the phone)
- Why it’s worth it
The hardware
- CPU: Intel Core i3-10105F on the host (4C/8T). The VM gets 4 vCPUs, which is more than enough for retro emulation (mostly single-threaded)
- GPU: NVIDIA GTX 1060 3GB, passed through to the VM for rendering and Sunshine encode. I know it’s a bit old, but it’s still fine for this, and it’s what I had available
- Host: Proxmox VE 8 (running on my second node, alongside Home Assistant, GitLab, and the Hermes agent)
The one part I didn’t expect to need: a dummy plug
The machine lives in the rack with no monitor attached. That sounds fine for a server, but Sunshine needs a desktop to capture and stream. With nothing plugged into the GPU, there is no real display for the desktop to land on. In my case that showed up as a green screen, and Moonlight had nothing useful to show.
The fix is a cheap DisplayPort dummy plug, a tiny dongle that pretends a monitor is connected.

It presents a stable 1080p EDID to the card, so the VM boots into a normal desktop and Sunshine has a real output to grab. It sits in the DP port, costs a few ringgit, and draws no power to speak of.

After that, headless finally worked: Sunshine auto-selects the dummy-plug output, and I can reach the box over Moonlight or SSH with no monitor in sight.
Why Bazzite?
Bazzite is a Fedora Atomic image aimed at gaming. What sold me:
- Immutable base. The OS image is read-only, updates are atomic, and it’s hard to break by accident
- Game-ready out of the box. Drivers, kernel tweaks, and gaming packages preconfigured
- Flatpak-friendly. RetroArch and the standalone emulators install cleanly
The alternative was plain Ubuntu with a stack I’d have to hand-assemble. Bazzite got me 90% of the way there immediately. I’m on the NVIDIA GNOME image (bazzite-gnome-nvidia).
The emulation stack
- ES-DE (EmulationStation Desktop Edition) as the frontend (AppImage). Clean, controller-friendly, scrapes box art and metadata
- RetroArch (Flatpak) for the older systems (NES to PS1, handhelds, etc.)
- Standalone emulators (Flatpak) for the heavier consoles:
- PCSX2 for PlayStation 2 (this is the one I actually use a lot)
- Dolphin for GameCube / Wii
- RPCS3 for PlayStation 3 (installed, but not stable yet on this box, still lagging)
The library
For now I’m focusing on SNES, PSone, and PS2, the games I actually reach for on a weeknight. PS3 is just getting started.
Streaming to the TV (and the phone)
The rack stays in the homelab, not under the TV. Sunshine on the VM streams the session to Moonlight on the TV. Over the LAN the added latency is low enough that it feels like a direct HDMI plug.
Same stack works on my phone. When I’m away, I reach the box over Tailscale and connect with Moonlight from the phone. It’s not quite couch-local latency, but it’s good enough for a quick session without dragging a laptop around.





When something breaks, I SSH in from anywhere and fix it remotely. With the dummy plug in place, no physical display is required.
Why it’s worth it
Closest I’ve gotten to a real console experience without parking another box under the TV, and I still have full control over the stack.
It also scales without rebuilding the stack. Want another TV in another room? Install Moonlight on that client and point it at the same Sunshine host. Want to switch to the phone instead? Same library, same emulators, same saves. The heavy work stays on the VM, so every new screen is just a thin client, not another machine full of emulators and ROMs to keep in sync.
