r/SteamOS•
nikitahya

I ported my VPN-client to the SteamDeck and it was "funny"

Hey, guys

Going to share my pain.

So I use Arch (btw). I built my own VPN-client time ago with GUI that didn't fight me. Worked great.

Then I decided to port it to my deck, cause it was always hellish to connect proxy there. And SteamOS is Arch under the hood, right? Same package manager, same everything. Should just work. Ha.

Quick context: it's written in Rust, with a Tauri GUI, packaged for AUR so it compiles from source on install, and it depends on Xray (a separate Go-based proxy core) as a runtime dependency. So there's a genuinely full native build happening under the hood Rust, C, and Go all compiling.

First attempt: pkg-config can't find gobject-2.0. Fine, weird, but okay, turns out glib2 was installed according to pacman, but half its .pc metadata files just... weren't there. Physically absent from disk, despite the package manager insisting everything was fine. So I write a stub file by hand. Cool, moving on.

Except it wasn't just glib2. It was zlib. Then libmount. Then basically the entire GTK3/Cairo/Pango stack - nine or ten libraries deep, each one a fresh why is this missing moment. At some point I found gobject-2.0.pc sitting right there in a Flatpak SDK runtime folder, perfectly intact, just not where any normal build tool would look for it. So SteamOS clearly HAS this stuff, it's just... not where it's supposed to be for actually compiling anything.

Then OpenSSL. Same story, except this time it wasn't just missing pkg-config metadata the actual header files were gone. Not package not installed, pacman genuinely believed openssl was there. The files just weren't on disk. Had to force-reinstall with overwrite to get pacman to actually re-extract what it already thought it had extracted.

Then, on a friend's Deck testing the same install: glibc itself. errno.h, stdio.h, stdint.h the actual bedrock of compiling anything in C missing. Then linux-api-headers on top of that (turns out glibc's own headers reach into kernel headers for some stuff, and those were gone too).

Then, another try, different Deck: pacman refusing to trust Valve's own CI-signed packages. Fresh keyring, populate steamos except there's no steamos keyring, it's called "holo," and that particular keyring file didn't even exist where pacman-key expected it. Took a full keyring nuke-and-rebuild.

At this point I stopped being surprised and just automated all I met into the install script. The result was the craziest PKGBUILD I’ve ever created.

Anyway. It works now well, tested clean from both Desktop and Game Mode. But god, SteamOS really did a number on what ships versus what a normal Arch install would have. I get why. Smaller image, faster boot, less to update, but as someone who assumed "it's just Arch" going in, I was not prepared for how much of "just Arch" had quietly been removed.

Posted Aug 27, 2026, 1:02 PM UTC

11
Loading comments…