PC Game Pass on an ARM Handheld: Xodus Nexus on the Odin 3
Xodus Nexus only ships for x86_64 Linux, but on ArmadaOS it runs through FEX. Here's how I got PC Game Pass working on an AYN Odin 3, Game Mode included.
I’m playing Well Dweller from my Game Pass Ultimate subscription on an AYN Odin 3, running locally under Linux at a locked 60 fps.
Update, October 22, 2026: The install script now sets up a native arm64 build of the launcher, which I build from my own fork, instead of running the x86_64 AppImage through FEX. The games, the backend, and Wine still go through FEX, so game support is the same. The launcher is a lot snappier, mostly in the search and the game list, which were the slowest parts before. Add to Steam now works for single games, and with Decky Loader installed the artwork shows up right away. You can also choose a wallet password now: Xodus Nexus asks for it once after each boot, Game Mode included. The arm64 build doesn’t update itself, so run
./install.shagain to update. If you set this up before, run the new script once. It replaces the old x86_64 build and keeps your sign-in, games, and Steam shortcuts.
That combination shouldn’t work. The Odin 3 is a Snapdragon 8 Elite handheld, so it’s ARM all the way down. I’m running ArmadaOS on it, a SteamOS-style Linux distro for ARM handhelds with Steam and the FEX translation layer built in. Game Pass comes through Xodus Nexus, an unofficial, open-source launcher for Microsoft Store and PC Game Pass games on Linux. It’s not affiliated with Microsoft, and it only ships an x86_64 build. The developer has said ARM support is not planned.
It runs anyway. FEX translates the x86 code on the fly, the same job Rosetta 2 does on a Mac, and ArmadaOS hands every x86 program to it automatically. The launcher just needs a few things around it that a normal desktop would already have.
I’ve been playing a lot of Well Dweller on this setup, and the Odin has become my pick over the Steam Deck for it. It’s smaller, and at a reported 390 grams it weighs a lot less than the Deck OLED’s 640. For a metroidvania on the couch, that difference matters more than raw horsepower.
The quick way
I put the whole setup in a script: xodus-nexus-arm-port on GitHub. Run it in Desktop Mode, in Konsole:
git clone https://github.com/burghr/xodus-nexus-arm-port.git
cd xodus-nexus-arm-port
./install.sh
It downloads the latest Xodus Nexus release and checks its checksum, installs everything below, and adds Xodus Nexus to Steam. It asks before it closes Steam. If you don’t have a KDE wallet yet, a KDE Wallet window pops up. Pick Classic, and leave the password empty (more on why below).
At the end, it opens Chrome once. Accept Chrome’s terms and close it, because the Microsoft sign-in won’t work until you do. Then it opens Xodus Nexus for you to sign in. After that, it’s in your Steam library for Game Mode. Everything lives in your home folder, so ArmadaOS updates leave it alone, and the launcher keeps updating itself the way it normally does. I tested all of this with Xodus Nexus 0.3.10.
What the script does, if you’d rather do it by hand
These steps are for the original x86_64 setup. The script no longer installs the NSS libraries or uses --no-sandbox, because the native arm64 build doesn’t need them. I’m keeping them here for anyone who wants to run the official AppImage through FEX.
Add the missing libraries
If you download the AppImage from the Xodus Nexus releases page and double-click it, it won’t open, and it shows no error. The app needs Mozilla’s NSS libraries, and the x86 library set that ArmadaOS ships for FEX doesn’t include them, so it quits before it can show a window.
Put the AppImage where the start script below expects it:
mkdir -p ~/.local/share/xodus-nexus-fex
mv ~/Downloads/Xodus-Nexus-*-x86_64.AppImage ~/.local/share/xodus-nexus-fex/Xodus-Nexus.AppImage
chmod +x ~/.local/share/xodus-nexus-fex/Xodus-Nexus.AppImage
Then grab the NSS libraries from Arch’s x86_64 package:
mkdir -p ~/.local/lib/xodus-x86_64/pkg && cd ~/.local/lib/xodus-x86_64/pkg
PKG=$(curl -s https://geo.mirror.pkgbuild.com/core/os/x86_64/ | grep -oE 'nss-[0-9][^"]*-x86_64\.pkg\.tar\.zst' | head -1)
curl -fsSLO "https://geo.mirror.pkgbuild.com/core/os/x86_64/$PKG"
tar --zstd -xf "$PKG" usr/lib
mv usr/lib/*.so* .. && cd .. && rm -rf pkg
rm libnssckbi.so
cp /usr/share/guestos/fex-mesa/usr/lib/pkcs11/p11-kit-trust.so libnssckbi.so
The last two lines swap a symlink for a real file, which the app needs to trust HTTPS certificates.
Skip the password prompt
When you sign in, the backend asks KDE for your password so it can read the PC’s hardware ID from firmware. ARM handhelds don’t have that table, so the read fails even with the right password, and the prompt keeps coming back. It looks exactly like you’re typing your password wrong. You aren’t.
The backend carries on fine without that data, so give it a stand-in pkexec that fails right away:
mkdir -p ~/.local/lib/xodus-x86_64/bin
printf '#!/bin/sh\nexit 1\n' > ~/.local/lib/xodus-x86_64/bin/pkexec
chmod +x ~/.local/lib/xodus-x86_64/bin/pkexec
Only the launcher uses it. The rest of the system still gets the real one.
Set up the wallet and Chrome
Xodus keeps your Microsoft sign-in in KDE Wallet, and a fresh ArmadaOS install doesn’t have a wallet yet. This command makes KDE show its setup wizard:
secret-tool store --label="wallet test" app wallet-test
Choose Classic, and leave the password empty. Then type anything at the prompt in Konsole and clean up:
secret-tool clear app wallet-test
The empty password is what makes Game Mode work. Game Mode logs you in automatically, so nothing unlocks the wallet at login. With no password, the start script can unlock it silently. Xodus Nexus 0.3.10 added its own wallet unlock window for Game Mode, which could make a password workable, but I haven’t tested that on ArmadaOS yet. The trade-off is that any program running as your user can read that wallet. On a handheld that only holds game logins, I’m fine with it.
The Microsoft sign-in also runs in Google Chrome. Flathub has an ARM64 build:
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install --user -y flathub com.google.Chrome
flatpak run --user com.google.Chrome
That last line opens Chrome once. Accept its terms, then close it. The sign-in fails until you do.
The start script
The start script ties it together. It adds the libraries, starts and unlocks the wallet when Game Mode hasn’t, and launches the app with --no-sandbox, because the Chromium sandbox crashes under FEX. It expects the AppImage at ~/.local/share/xodus-nexus-fex/Xodus-Nexus.AppImage, or wherever XODUS_NEXUS_APPIMAGE points:
mkdir -p ~/.local/bin
curl -fsSL -o ~/.local/bin/xodus-nexus-fex https://raw.githubusercontent.com/burghr/xodus-nexus-arm-port/b219866/xodus-nexus-fex
chmod +x ~/.local/bin/xodus-nexus-fex
Start it once from Konsole, sign in, and let your library load. Then open Steam in Desktop Mode, choose Games, then Add a Non-Steam Game, and browse to the script. ArmadaOS adds its own armada-game-launch %command% to the launch options. Leave that in place.
In Game Mode
Launch it from your Steam library like any other game. You’ll still be signed in, and games launch from inside the launcher the way they do on a Deck. The launcher itself is slow under translation. Once a game is running, that stops mattering.
I’m not the only one doing this. Another ArmadaOS user posted a near-identical setup on a Snapdragon 8 Gen 3 device, with downloads and game launches working too. Two people landing on the same fixes independently is a good sign this holds up beyond my one handheld.
A year ago, PC Game Pass on a small ARM handheld meant cloud streaming and hoping the Wi-Fi held. Now it’s one install script and Well Dweller at 60 fps on a handheld that weighs about 250 grams less than a Deck.