Building a Windows Gaming VM for Steam Link: 2016 Edition

In 2016, I bought a Steam Link, allowing me to play games on my TV
without having to lug a whole physical machine over. The main
requirement of Steam Link is the link and the PC on the same network:
this allows encoded streaming from the PC to the link, and the link
sending back input it is receiving from various bluetooth and USB
devices (controllers, keyboards, mice).

The Steam Link combined with Steam and it’s Big Picture UI is a very
decent replacement for a console: a large game selection, decent UI
for navigating the catalogue and purchasing / installing new games.

Unfortunately for those running Linux: Steam is most valuable on Windows: the game
selection for Linux doesn’t come close to the catalogue on Windows.

You can dual boot to solve this issue, but it then prevents someone
else from playing the Steam Link when the Linux partition is in
use. Thus, a project was born:

Implementation

I was able to accomplish this by:

It’s left as an excersize as a reader to learn more about how those work. The only real caveat
was networking

VM Networking

The VM networking was the trickiest aspect. This is due to an uncommon
requiremental combination of:

  • the VM being available on the local network (via some IP)
  • the VM being able to communicate to the host machine

The two can be accomplished separately. Using KVM, macvtap with a bridged configuration
worked great for exposing the VM, but it can not resolve the IP to the host. I was able to
find a stackoverflow article

The Results

The results are pretty good. With a native Windows OS,
I was getting roughly 12ms latency from the Steam Link.
With the VM, I’m getting roughly the same.

For other reasons, I had to add another switch in between my Steam
Link and PC. That had a much larger negative impact: 22ms now vs 12ms
before.