OpenProStreetClient /
linux-launcher
Install and play Need for Speed: ProStreet online with OpenProStreet on Linux and the Steam Deck. The game runs in Steam with Proton, and the launcher sets all of that up.
Get linux-launcher
Version 0.6.0 · 10 Nov 2026
OpenProStreet Launcher for Linux
Install and play Need for Speed: ProStreet online with OpenProStreet on Linux and the Steam Deck. The game runs in Steam with Proton, and the launcher sets all of that up.
It can:
- install the game from your own disc image: it runs the game's installer and the official 1.1 patch in Proton (you click through them and type your CD key, like on Windows), then puts your nfs.exe 1.1 in place;
- or use a game folder you already have, for example one copied from a Windows PC;
- install the Ultimate ASI Loader, XNFSPS MultiFix and the OpenProStreet client, and offer client updates;
- add the game to Steam as Need for Speed: ProStreet (OpenProStreet), with Proton turned on and the launch option the ASI loader needs;
- edit every option in
scripts/OpenProStreetClient.ini; - start the game through Steam.
The launcher doesn't download the game or a No-CD exe. You need your own disc image, the 1.1 patch if your disc doesn't have it, and the unpacked 1.1 nfs.exe (the "Battery" No-CD works; the packed "Vitality" one doesn't).
Using it
Download OpenProStreetLauncher from the newest Build Release Tag build, make it executable and install it:
chmod +x OpenProStreetLauncher
./OpenProStreetLauncher install
That copies it to ~/.local/bin/openprostreet-launcher and adds it, with its icon, to your application menu. Desktop menus and rofi's drun mode (rofi -show drun -show-icons) both find it. Then start it from the menu or with openprostreet-launcher. It includes .NET, so there's nothing else to install.
| Command | What it does |
|---|---|
install |
Copies the binary to ~/.local/bin, the menu entry to ~/.local/share/applications and the icon to ~/.local/share/icons/hicolor. With sudo (or --system, as root), it uses /usr/local/bin and /usr/local/share instead, for every user. |
update |
Replaces the binary it's run as with the newest release. A copy in /usr/local/bin needs sudo. --force installs the newest release even if it isn't newer. |
uninstall |
Removes what install added. The game, its prefix and your settings stay. Add --system (with sudo) for an install in /usr/local. |
version, help |
What they say. |
Without a command, the window opens. It also offers launcher updates when it starts.
If ~/.local/bin isn't on your PATH, install says so; most distributions add it once it exists, after you log in again.
You need Steam, signed in once, with a Proton build installed. Proton Experimental is preferred; to install it, search your Steam library for "Proton Experimental". Native Steam and the Flatpak are both found.
What it changes
| Where | What |
|---|---|
~/.local/share/OpenProStreet/prefix |
The Proton prefix the game is installed into, with its registry and saved settings |
~/.config/OpenProStreet/launcher.ini |
The game folder the launcher uses |
userdata/<account>/config/shortcuts.vdf in Steam |
The game's library entry, for every account on the PC |
config/config.vdf in Steam |
Proton turned on for that entry (CompatToolMapping) |
steamapps/compatdata/<id> in Steam |
A link to the launcher's prefix, so Steam runs the game where it was installed |
Steam keeps both of its files in memory and writes them back when it closes, so the launcher asks to close Steam before changing them. It backs each one up as *.openprostreet.bak first. A prefix Steam already made for the entry is kept as <id>.backup-<date>.
The 1.1 No-CD nfs.exe keeps a few small functions in the last 0x66 bytes of the file, past the end its last section (.securom) declares. Windows maps them anyway, but Wine fills that part of the page with zeros, so the game crashes right after its window opens (page fault on write access ... at address 01F6880E). The launcher fixes the exe's headers so the section covers those bytes: its raw size is aligned up (the file is padded with zeros), and its virtual size and SizeOfImage follow. No code or data changes. It does this when it puts the exe in place, and again before Play if needed, and keeps the original as nfs.exe.before-proton-fix.
Inside Proton, the game needs WINEDLLOVERRIDES="dinput8=n,b", so that the ASI loader's dinput8.dll loads instead of Wine's. The launcher sets it as the entry's launch option.
Not working yet
Discord status probably doesn't show: the Discord SDK inside Proton can't reach the Linux Discord app without a bridge. Everything else in the client works without it.
Building
With the .NET 9 SDK or newer:
./build.sh
It runs the tests in tests/ (Steam's files, Proton builds, the Wine prefix, disc images, the client ini), then publishes out/release/OpenProStreetLauncher for linux-x64. The UI is Avalonia, so dotnet run also starts it on Windows, which helps when working on the layout. --screenshot <folder> saves each page as a PNG and exits.
Releases
Raising <Version> in OpenProStreetLauncher.csproj and pushing to master tags the release, and the tag builds it on OneDev.