My Journey into Gaming on Linux

To the folks that know me, it’s no secret that I’m not a fan of Windows 10. Microsoft has made a number of decisions leading towards gathering more data and controlling the overall user experience. There’s enough in those statements to unpack into an entire blog post (read: rant) on its own, but that’s not the focus here.

Considering Linux

I was getting to the point that I wanted to upgrade my system (Z87 board with an i7-4770k) with current-gen hardware, and I didn’t really want to try to wrestle with a lack of Windows 7 driver support on the new hardware. That coupled with my general disdain for Windows 10, led me to decide to take the plunge into using a Linux-based OS as my primary operating system.

I’ve avoided using Linux for a long time because my primary use for my home systems is for gaming, and I’ve known about the struggles with getting Windows games to run in alternative OS’s. However, after seeing the release of Proton for Steam, and a general uptick in industry interest in supporting Linux, I was feeling pretty optimistic. While I do enjoy solving technical challenges, I don’t really want to spend hours tweaking settings in my off-time in order to get games running.

So I purchased and built my new system (X570 board with a 3700X, a couple of 2TB NVMe drives, and I reused my 1080 Ti), and took the plunge! I decided on Manjaro because it looked easy to get into and game-friendly. I had some initial struggles with getting things set up, but one of the great things about using Linux was being able to find the answers to my questions online pretty quickly and easily. That’s not to say it’s easier than finding answers online for Windows issues, but there’s a lot fewer generic answers like, “Update your drivers, run SFC, and if that doesn’t work, Reset your PC”. (By the way, those DO often fix problems, but when I’m searching online, I’m looking for options that I don’t already know about!)

Installing Steam

So then I installed Steam and was thinking, “I’m all set to start playing my entire Steam library through Proton!” Well, not quite. I found that by default, a lot of my games had their “Install” button grayed out. What gives? It turns out “Steam Play” (Which includes, but is not limited to Proton), is by default only enabled for the titles it has been tested & vetted with, and to make it available for all titles, you must enable the “Enable Steam Play for all other titles” setting. OK, no big deal, EXCEPT for the fact that once you do that, all of the not-officially-supported games get dumped into the same library category as officially-supported games. It’s a pretty minor thing overall, but it would be nice to have separate categories for games with a native Linux client, official Proton support, and non-official support.

Then I was finally ready to play! So, how well did it work? Pretty darn well! I was impressed with how easy it was to get playing once I had figured out the “Enable Steam Play for all other titles” thing. At the time, I was playing Outward and Remnant: From the Ashes with friends, and I was concerned that we were going to run into issues connecting to each other, but we didn’t experience any network issues at all. I occasionally ran into a texture not loading right, or a particular graphical effect not working, but they were usually minor issues, and could be resolved by tweaking the in-game graphics options.

Eventually, however, I ran into an issue that I wasn’t going to be able to work around. I am a fan of Escape from Tarkov, and the developer had recently implemented the Battleye anti-cheat service. Battleye does have support for games with a native Linux client, but not through Proton. If I wanted to keep playing EFT (answer: YES!), I was going to need a Windows installation. Crap!

Left is 'Steam play for all other titles' disabled, and Linux-compatible filter off. Middle is 'Steam play for all other titles' disabled, and Linux-compatible filter on. Right is 'Steam play for all other titles' enabled, and Linux filter-compatible on.

Going Dual Boot

When I realized that I was going to need to install Windows 10 after all, I took the easy way out: I installed it onto my secondary NVMe drive, and let GRUB handle distinguishing between the two OS’s. This added the minor inconvenience of being prompted for an OS on boot, but that comes with the territory of dual-boot systems.

Over time, I found myself booting into my Manjaro installation less and less frequently, and just living inside of Windows all the time. One reason for this was familiarity, but another was that I discovered even though games ran well enough through Proton, the performance was always better running in Windows natively. I don’t have any hard numbers or benchmarks, but it was noticeable enough that I drifted away from actually using Manjaro.

I used this dual-boot setup for a few months, but it was bothering me that I wasn’t really getting much benefit from my two NVMe drives, because I was hardly touching one of them at all. Eventually, the COVID-19 situation had me working from home, which quickly led me to wanting to reinstall Windows. When I’m doing my work as a Support Technician, I often find myself making a mess of my OS! I’m constantly downloading & installing random applications and drivers (some of which don’t belong on my system). It’s not an unrecoverable state, but I’m the kind of person who likes clean installations over cleaning installations.

Making a VM

So I was considering my options, (Do I wipe both installs since I’m not really using Manjaro anymore? Do I just wipe Windows, and if I do, am I going to find myself wanting to wipe again in a couple months?) when I stumbled upon the wonderful world of PCI pass through.

Essentially, this method promises “near-native performance” in a VM by dedicating a graphics card for the exclusive use by the VM. All I needed to get going was a second video card! I ordered a passively-cooled (no fan) GT 1030, and got started.

It took probably about an hour after getting started on the setup before I was loading up my new VM with my primary GPU passed through to it. It wasn’t too difficult because I was just following along with guides I found online. I did have a bit of a scare when I got an error message about my system not supporting IOMMU, but then I realized that it was simply disabled within my BIOS. *phew*

I loaded up one of my latest obsessions, Mount & Blade 2: Bannerlord, and was absolutely floored by how well it ran! I never thought that gaming through a VM could be this smooth. The one major issue I came across was audio popping & crackling due to latency. This has been something on my mind due to support requests, so I knew exactly what the problem was. Instead of adding my USB DAC as a device to the VM, I added the entire USB controller, which immediately resolved the latency issue.

After getting Windows all set up, I simply cloned it over to a new VM, and now I’ve got a “work” VM and a “play” VM. All of that is stored on my Linux NVMe drive, and my secondary drive is where I install my games, so that if I decide to wipe out a VM, then I don’t have to re-download all of my games.

Conclusion

Overall, I’m very happy with my new setup, and I really feel like I’ve got the best of both worlds between Linux and Windows. I have heard of issues with certain anti-cheat services absolutely not functioning when running inside of a VM, but that hasn’t been a problem for me (so far). I’m currently having a bit of trouble with network shares between other systems on my LAN, but I found that I’m able to connect to them via IP, but not by hostname. I’m sure that I can fix this too, but it’s easy enough to work around for now.

I hope you enjoyed reading about my journey, and I hope that it inspires you to try something new!