Multi-seat game streaming on Linux: everyone gets their own game
Your gaming PC can run two games at once. Most streaming hosts still hand the second person a mirror of the first. punktfunk now gives each client on a Linux host its own session — picture, keyboard, controller, audio and mic. Here's how it works, and where the edges still are.
Your gaming PC is probably bored most of the time. The GPU could run two games side by side without breaking a sweat. But connect a second person to a typical streaming host and they don't get their own game. They get your screen. Same picture, same audio, and now two people fighting over one mouse cursor.
That's not a GPU problem. It's a plumbing problem. A normal desktop has one screen, one set of speakers and one input queue. A streaming host that captures that desktop can only ever share it.
The couch-and-upstairs problem
Here's the case we kept running into. One person is on the laptop upstairs playing something heavy. Someone else grabs a Steam Deck on the couch and wants to play a different game. Same house, same PC, two completely different sessions.
With a mirrored desktop that just doesn't work. So we stopped mirroring.
One gamescope per person
On Linux, punktfunk can now start a dedicated game session for every client that launches a game. Each one is its own headless gamescope, running at that client's exact resolution and refresh rate, with just the game inside. Nothing to do with the host's desktop, and nothing to do with the other person.
What each session gets:
- Its own picture. A separate gamescope and its own video stream.
- Its own keyboard and mouse. Every session gets a private input socket, so your keypresses land in your game and nowhere else.
- Its own audio. Each session gets its own PipeWire sink, and the game is pinned to it. In our test, a tone playing in one session reached only that client. The other got zero audio packets.
- Its own mic. Voice chat goes into your session's own virtual mic, not the whole box.
The session is tied to your device, not the network connection. Drop out and come back, and you land in your own game, not the other person's.
Turning it on
It's one setting. In the host's web console, go to Virtual displays → Dedicated game sessions and pick Dedicated. The host needs gamescope installed. Without it, Dedicated quietly falls back to Auto.
Two more things worth checking:
- PipeWire 1.6 or newer if you want the mic. On older PipeWire the per-session mic goes silent.
- Keep alive after disconnect. If your Wi-Fi drops, the session waits 10 seconds by default, then ends the game. Set it to Forever if you want the game to wait for you.
Where the edges are
We'd rather you hear this from us than find out mid-game.
- One Steam at a time. Steam only runs once per Linux user, and both sessions share one user. So it's one Steam game plus one non-Steam game, not two Steam games. Giving each session its own home folder is on the list, but it isn't built yet.
- Controllers aren't fully private yet. Each session gets its own virtual pads, but a game that listens to every controller on the box can see the other person's too. Private pads per session come with the same home-folder work.
- One GPU, shared. Two games split the GPU and its video encoder. A mid-range card can run two lighter games fine. Two AAA games at 4K is a different story. Consumer NVIDIA cards also cap how many encoder sessions can run at once.
- Host-launched gamescope only. This works for sessions the host starts itself. It doesn't split up SteamOS's own Game Mode, or a KDE or GNOME desktop.
Try it this weekend
Got a Linux box with a decent GPU and two people who want to play different things? Install gamescope, update PipeWire, flip the setting to Dedicated, and give the Steam game to one of you. The other takes something else from the library.
The full details on dedicated sessions and keep alive are in the virtual displays docs. And if you want the background on why punktfunk runs its own virtual displays on Linux at all, start with headless streaming without the EDID hacks.