Seemingly Seamless Steamless Gaming on Linux

  • Posted on by prescientmoon
  • Last updated on . Source | Changelog
  • About 1300 words; a short 6 minute read

The rest of the headings in this article are named after Baba is You levels, because why not :p

Former Glory

I have a love-hate relationship with Steam. On one hand, Valve has been super awesome when it comes to supporting & pushing development of Linux gaming; they sponsored various open source projects in the space, which is great! On the other hand, they’re known for pushing gambling onto children and the like. Most of us seemingly overlook this kind of stuff, if for no other reason than Steam being a pretty good platform (especially when the alternatives supposedly keep shooting themselves in the foot) — a platform where many of us have accumulated collections over the years.

A 4chan screenshot containing an image of Gabe Newell together with the lines “>does nothing”, “>competition just keeps shooting themselves in the foot”, and “What is this business strategy called”

(source)

I’ve used Steam ever since I got into PC gaming1 back in my dual booting days. Since the platform has always had a good reputation, I had never really looked into the alternatives. Fast-forward to about a year ago: I got my new laptop, and stopped dual booting entirely as a result (I… just didn’t want to bother2). After all, gaming on Linux was said to “just work”3… Thing is… this has hardly been the case for me.

Here’s a short selection of illustrative examples of the kind of issues I’ve encountered:

  1. Neon White has only worked when launching Steam (the entire client) inside gamescope (wrapping the game itself in gamescope did nothing)
  2. Noita used to be super buggy (items would duplicate in front of me, the world would spawn with missing chunks4, audio would not play, pausing would freeze the game for a second or two); it stopped working entirely after a certain point
  3. Rain World would act in super finicky ways. Mods would not work, even after trying the workarounds I found online. The game stopped working entirely after a certain point

I am aware of ProtonDB — every game I listed has platinum status on there! Not only do these not work out of the box — they often do not work at all, not even after trying every single tweak or workaround I could find on the net! I was able to solve some of these situations by manually sifting through logs for a bit, which is sometimes enough for me to diagnose the issue. Unfortunately, said “sometimes” is far from “always”. I’m sure this is a skill issue in the end, although one can then view switching platforms as the skill solution.

And yes, yes, yes… I know this has to be an issue with my setup. I’m sure there’s something wrong with my operating system + hardware + configuration combination. Something has to be wrong somewhere — there’s no way it’s this bad for everybody else…

A Way Out?

I had briefly talked about GOG with a friend a few days prior to spending multiple hours trying (and failing!) to launch Noita. I looked up Noita’s page on the storefront and, lo and behold — it was on sale! I had already played the game for hundreds of hours (not to mention it being one of my favourite games of all time), thus I decided to buy the game on there as well (worst case scenario I could simply refund it anyways).

Since it was my first time running a GOG game on Linux, I went ahead and set up the Heroic Games Launcher. A few minutes later, I had Noita working perfectly on my system… it was that easy!

A Noita GIF set in the Jungle. The player shoots a wand that spaws multiple bombs that home onto a spider before exploding it to death, with its limbs blowing up across the screen

Have a random non-spoilery Noita GIF from one of my daily runs :3

Using the Heroic Games Launcher for a while made me realise I… don’t need Steam; I had been using it out of nothing but inertia for so long. Gaming on Linux can be awesome, but Steam was making it the opposite for me. But this — this opened my eyes to dreaming bigger.

The obvious issue with the Heroic Games Launcher is that it’s… slooooow. Opening it takes 10s (hey, that’s like, three times quicker than Steam!), since it has to connect to the network and everything (or so I would assume, not sure what’s happening otherwise). I don’t use such a launcher for any other apps on my system, so why am I putting up with it here? Why have I put up with Steam being even slower for years?5 I mean what the fuck, do we really need a web browser of all things for launching apps that already exist on the system????

Another thing that had me annoyed was having the Steam/Heroic UI present in the background at all times while I was playing the game. I tried the various command line arguments I found on the net, but none solved the issue completely (some only delayed it).

Nonetheless, the solution was simple — setting up launch scripts directly tied to XDG desktop entries, making it so I can launch the games directly from anyrun. I later also came across Pegasus — a cross-platform game launcher that’s a bit more configurable & lightweight. I technically don’t need Pegasus, but I set it up anyways for no other reason than the aesthetics of seeing my game collection displayed on a pretty grid6.

As for launching the games themselves, I ended up using the umu-launcher CLI (together with XDG entries / Pegasus metadata / launch scripts automatically generated by a series of custom NixOS modules I wrote), which seems to launch most of my games without issues. Thankfully, a lot of the games in my Steam catalog already work without any DRM, thus I can simply run their executables without involving the Steam runtime. Moreover, I’ve also gotten Rain World modding working (through RainDB), which already puts this approach ahead of whatever the fuck was going on with the Steam Workshop setup.

Not Quite

There are a few things one loses when deciding not to use any of the big launchers. First, these launchers take care of save-data backups for the player. While this is nice and all, I already have my own backup solution set up for all my data, so this wasn’t a big loss. Did I mention that Steam has fucked my Baba is You save before? (no, the pop-up did not appear when launching the game — Steam simply overrode everything I had, yikes…).

The launchers in question also keep track of one’s playtime. Pegasus also implements this, although this obviously does not work when launching the games directly without Pegasus. For now, I’ve been manually tracking my playtime, although I plan to write a quick Python script to do this for me (and package that up as part of the launch scripts generated by my Nix code).

Last but not least, we must address the elephant in the room — achievements. I do not care about achievements for most games, although I unfortunately do for others. In the future, I plan to manually track them on this website (I’m already working on a page tracking my Necrodancer progress!).

I won’t go over the actual Nix setup, since a lot of it is not currently in a super-clean state, nor is it general enough to work for most people. If you are interested, feel free to message me and I’ll try to explain more.

The End

Thanks for reading! This article is not super long, but I’ve been trying to get myself to write more (whatever that might be), so I decided to throw this out there :3 *goes back to necrodancing*


  1. Well… ignoring the era I had no money for games and would just pirate everything

    Return to content ↩︎
  2. Windows is well known for fucking up the bootloader and the like at any random point. It’s happened to me five minutes before I had to join a meeting in the past, and it’s horrible…

    Return to content ↩︎
  3. …unless anti-cheat rears its head into the mix, but I don’t really play competitive multiplayer games

    Return to content ↩︎
  4. This has happened during regular daily runs — no god-run shenanigans were involved

    Return to content ↩︎
  5. Did I mention Noita and Rain World both took 30s+ to launch after pressing the “play” button on Steam?

    Return to content ↩︎
  6. And by that I’m referring to the default theme. I’ve tried about ten of Pegasus’ available themes, and every single one of them had at least one thing that was broken with it. I could’ve went ahead and tried fixing it myself, but I realised I don’t really need Pegasus anyways, so simply kept using the default theme (which looks great, by the way!).

    Return to content ↩︎