Homelab Game Streaming Setup

My gaming rig has always been the odd one out in my lab. I’m a strong advocate of keeping your daily driver out of labbing shenanigans, however more recently I’ve been questioning this concept. My gaming PC is exceptionally powerful, underutilized, and could offer some much needed relief to my Kubernetes nodes. Naturally I became obsessed when I stumbled across Craft Computing’s new video on game streaming.

Baby Steps

To explore game streaming I started with NVIDIA Gamestream and Moonlight on my iOS device. Gamestream was a good place to experiment because it was already available on my gaming rig and I was confident that it would work. I decided to use Moonlight as a client due to its widespread community support and immediate availability on the App Store (as published by one of the maintainers of the Moonlight project). Gamestream worked out of the box after adding firewall rules to allow my iOS to talk to the gaming rig on the gamestream ports.

This initial experiment was extremely successful. I was ecstatic to have my steam library available on my phone. But there were client resolution issues, Gamestream didn’t have the level of customization I was expecting, and Gamestream is infamously being deprecated by NVIDIA.

Here comes the sun

Sunshine is a FOSS game streaming host to replace NVIDIA Gamestream. Installation on my gaming rig was straightforward and Sunshine offers the amount of configuration I’d expect for a game streaming host. There isn’t much to say about Sunshine because it is simple and worked out of the box. That’s the quality of software I love.

My remaining issue was display resolution automation. I want to connect to Sunshine from a variety of clients like my phone or TVs. My ultrawide monitor’s resolution did not look nearly as good on my phone screen. This problem space has a fair amount of solutions, however I found ResolutionAutomation to be perfect. My gaming rig’s display resolution now automatically shifts to a format best for the Moonlight client device. No more black bars on the TV screen!

Onto the Big Screen

Although possible, game streaming over a cell connection or VPN is a mediocre experience. The input lag is really what drags it down. I knew that the most value I could get out of this project is by game streaming to the ethernet connected TVs in my home. Most TVs easily connect to a PS4 Dualshock 4 controller so the real challenge was getting a Moonlight client on the TV.

My WebOS based LG works well with moonlight-tv. After enabling developer mode the installation was straight-foward:

# setting up the TV 
ares-setup-device

# make sure you can display info about the tv
ares-device -i -d livingroomtv

# install an ipk from moonlight-tv's most recent release
ares-install --device livingroomtv $moonlight_tv_ipk_file

My Samsung TV was a bigger pickle. The community has built a Tizen-based Moonlight client but I opted for the Fire Stick route instead. I’ll be installing Moonlight’s Android distribution to my Fire Stick.

Closing thoughts

Game streaming is a fantastic project to add to your lab. I do think there are limitations to the project that will frustrate me in the future, such as VM-based gaming triggering online multiplayer cheat engines (read: rootkits), but this project is really capturing my attention in the meantime. All the community software was plainless to setup. This project is an easy recommendation to homelabbers.