Stream Windows Games

Using GPU hardware in Proxmox to game remotely.

Preparing your vm

I'll be assuming a Windows 10 install, since Win7 is really starting to show its age by now. Start by configuring GPU passthrough on the host and reboot the host. Create a new vm and make sure to use OVFM instead of SeaBios. This requires an EFI disk to be created - just add the disk from the hardware menu, and ignore how small it is.

Download the virtio-win driver ISO from the nice people at Fedora. Just get the Stable virtio-win iso and upload it to your Proxmox ISO stash. Likewise, upload your Windows ISO for installation.

Give the machine decent hardware specs, depending on what you have available. I gave it 8 cores of CPU. Set the CPU type to "host" and enable NUMA for the CPU. Add an extra optical drive if you want to save some clicks to switch between install ISO and driver ISO during install.

Add a 50ish gig SSD for Windows and a larger disk for games. I'll be using 500GB of my ZFS HDDs since i don't have a bunch of SSDs. The mirrored ZFS config should give ok read speeds anyways.

Hold off on configuring the PCIE devices, since it'll disable the Proxmox console when in use, and we need to configure a remote desktop of some sort first.

Installing Windows

Boot the installer from the Windows ISO. When the installer can't find a disk to install to, just point to the virtio-io drive that you have mounted (or just eject the installer ISO and mount the dirver ISO temporarily):

Use the install the dirver

Complete the installation normally.

After install

You will need remote desktop access, but NOT windows' own Remote Desktop since Nvidia won't allow configuration of streaming when RD is active. Because that's just nvidia being nvidia.

VNC will do fine, so just install tightvnc server. Chrome remote desktop seems to work fine too, but for whatever reason it refuses for work for me today, so I'll make do with VNC.

Install Steam/Games/etc to your large drive.

Note that steam may need a tcp/udp port 27000-27037 firewall rule on your (Sophos) firewall.

Reboot and test your VNC/Chrome RD connection. Power Windows back down and configure the GPU PCIE device:

Add the PCI devices in the hardware tab and check the GPU as "Primary GPU" and "PCIE Device". I also checked ROM-Bar without knowing what it does. Remember to also add the audio device as a PCI-E device.

Start Windows back up and install the newest Nvidia drivers INCLUDING "Nvidia Experience".

Nvidia are being assholes again and are now requiring that you sign up and login to be able to use nvidia experience for streaming. Version 2.11 of Nvidia Experience will probably still work fine if you don't feel like signing up AND allowing them to collect unspecified "data".

In Nivida experience, click the settings cogwheel up top right, go to the Shield tab and enable Gamestream. If the Shield tab is missing or empty, make sure that you are not using Windows Remote desktop. (this step cost me around 1 day)

Add the paths for your games - for me it is basically Steam.

IF YOU ARE GETTING ERROR 43 ON YOUR DEVICE AFTER DRIVER INSTALL. Well that's just Nvidia being nvidia, and they are disabling your device for running on a vm without you paying 5x prices for their Quadros or Teslas or whatever. The solution is to hide that fact from the driver.

To hide the virtualization from the driver, edit the vm configuration file on the proxmox host - The conf files named by proxmox vm id are found at /etc/pve/qemu-server/ Just adjust your cpu line as follows:

cpu: host,hidden=1

VPN in and point Moonlight to your Windows machine's IP

And you're done.

todo: details of this