A split-screen game launcher for Linux/SteamOS
Note
PartyDeck is in early development, and may contain violations of software best practices and security flaws; use at your own discretion! If you are experienced in software any advice and contributions are greatly appreciated.
- Runs multiple instances of a game at a time and automatically tiles up to 4 game windows per monitor
- Supports native Linux games as well as Windows games through Proton-GE/UMU Launcher
- Handler system that tells the launcher how to handle game files, meaning very little manual setup is required
- Steam multiplayer API is emulated, allowing for multiple instances of Steam games
- Works with most game controllers without any additional setup, drivers, or third-party software
- Now works with multiple keyboards and mice!
- Now supports launching the instances across multiple monitors when using the SDL gamescope backend!
- Uses sandboxing software to mask out controllers so that each game instance only detects the controller assigned to it, preventing input interference
- Profile support allows each player to have their own persistent save data, settings, and stats for games
- Works out of the box on SteamOS
Download the latest release here and extract it into a folder. Download game handlers here.
SteamOS includes all of PartyDeck's dependencies, but you will need to be on SteamOS 3.7.0 or above for the splitscreen script to work.
If you're in desktop mode, simply run partydeck-rs
. To use PartyDeck in Gaming Mode, add GamingModeLauncher.sh
as a shortcut to Steam, and in the settings for that shortcut disable Steam Input.
You'll need to install KDE Plasma, Gamescope, Bubblewrap, and Fuse-overlayfs using your distro's package manager. Then, while in a KDE Plasma session, run partydeck-rs
to get started. If you're running Steam, make sure none of the controllers are using a Steam Input desktop layout, as Steam Input causes issues such as duplicate controllers being detected.
Once in the main menu, click the + button to add a game: this can be just a regular Linux executable, a Windows game (.exe), or a PartyDeck Handler (.pdh). Create profiles if you want to store save data, and have a look through the settings menu.
To build PartyDeck, You'll need a Rust toolchain installed with the 2024 Edition. For the mouse/keyboard gamescope build, you'll need ninja and meson installed.
Clone the repo with submodules by running git clone --recurse-submodules https://github.com/wunnr/partydeck-rs.git
. Navigate to the gamescope submodule at deps/gamescope
and run these commands to build the mouse/keyboard gamescope:
git submodule update --init
meson setup build/
ninja -C build/
build/gamescope -- <game>
Then, in the main partydeck folder, run build.sh
. This will build the executable, and place it in the build
folder, along with the relevant dependencies and resources.
PartyDeck uses a few software layers to provide a console-like split-screen gaming experience:
- KWin Session: This KWin Session displays all running game instances and runs a script to automatically resize and reposition each Gamescope window.
- Gamescope: Contains each instance of the game to its own window. Also has the neat side effect of receiving controller input even when the window is not currently active, meaning multiple Gamescope instances can all receive input simultaneously
- Bubblewrap: Uses bindings to mask out evdev input files from the instances, so each instance only receives input from one specific controller. Also uses directory binding to give each player their own save data and settings within the games.
- Runtime (Steam Runtime/Proton): If needed, the app can run native Linux games through a Steam Runtime (currently, 1.0 (scout) and 2.0 (soldier) are supported) for better compatibility. Windows games are launched through UMU Launcher
- Goldberg Steam Emu: On games that use the Steam API for multiplayer, Goldberg is used to allow the game instances to connect to each other, as well as other devices running on the same LAN.
- And finally, the game itself.
- AppImages and Flatpaks are not supported yet for native Linux games. Handlers can only run regular executables inside folders.
- Controller navigation support in the launcher is super primitive; I'd love to try making a more controller-friendly, Big-Picture-style UI in the future, but have no immediate plans for it.
- Games using Goldberg might have trouble discovering LAN games from other devices. If this happens, you can try adding a firewall rule for port 47584. If connecting two Steam Decks through LAN, their hostnames should be changed from the default "steamdeck".
- @davidawesome02-backup for the Gamescope keyboard/mouse fork, and Valve for Gamescope
- @blckink for contributions
- MrGoldberg & Detanup01 for Goldberg Steam Emu
- GloriousEggroll and the rest of the contributors for UMU Launcher
- Inspired by Tau5's Coop-on-Linux and Syntrait's Splinux
- Talos91 and the rest of the Splitscreen.me team for Nucleus Coop, and for helping with handler creation
This software has been created purely for the purposes of academic research. It is not intended to be used to attack other systems. Project maintainers are not responsible or liable for misuse of the software. Use responsibly.