Gets unsteamed Windows games running under Proton on Linux, including Steam multiplayer.
Only use this with games you're entitled to run. This doesn't bypass anything, the unsteam files in your game folder already do that. This just makes the existing setup work under Proton instead of only Windows.
unsteam ships as unsteam_loader64.exe + unsteam64.dll in a game's Binaries/Win64. It reimplements Steam's interface layer and proxies matchmaking to a real Steam client. The loader won't start without a live steam.exe process and a working Steam client library. On Windows that's fine. Under Proton it breaks in three ways.
Proton's steam.exe exits immediately, so there's no live process for the loader to find. The Steam client DLL the registry points at can't talk to native Linux Steam. And the game's real appID gets rejected since your account doesn't own it.
The fixes: steam_stub.c is a steam.exe that actually stays running and registers itself where the loader expects. The installer drops Proton's lsteamclient.dll into the prefix, that's the DLL that actually bridges Wine to your Linux Steam install. And it sets steam_appid.txt to the fake appID from unsteam.ini, usually 480 (Spacewar, which every account owns).
Last problem: Proton runs in a container with its own process namespace, so a stub started from outside is invisible to the game. unsteam_launcher.c handles this by being what Proton launches as the game, it starts the stub inside the same Wine session, then runs the unsteam loader.
git clone https://github.com/Meekiavelique/unsteam-linux unsteam-linux && cd unsteam-linux
./setup.shInstalls dependencies (mingw-w64, python) for Arch/Debian-Ubuntu/Fedora, finds your unsteam games by scanning Steam's non-Steam shortcuts, and sets each one up. No shortcut editing, no closing Steam.
First time on a game, launch it once through Steam so the Wine prefix gets created, then run ./setup.sh.
./install.sh --win64 "/path/to/Game/.../Binaries/Win64" --appid <shortcut-appid>Renames the real unsteam_loader64.exe to unsteam_loader64_real.exe and puts our launcher in its place, so your existing shortcut just works. patch-shortcut.py is there if you'd rather point the shortcut at a separate unsteam_launcher.exe.
In the game's Win64: mv unsteam_loader64_real.exe unsteam_loader64.exe, delete steam.exe and unsteam_launcher.exe, restore steam_appid.txt.orig. In the prefix's Program Files (x86)\Steam, restore steamclient64.dll.orig and steamclient.dll.orig.
- Steam running and logged in when you play
- Computer
MIT