Bazzite
Install the Punktfunk host on Bazzite (or any Fedora Atomic spin) as a sysext — no layering, no reboot — and stream both Gaming Mode and the desktop.
Bazzite already ships everything a host needs — the NVIDIA driver, NVENC, PipeWire, gamescope, KDE Plasma — so this is the most appliance-like setup. One host streams both of Bazzite's faces, Steam Gaming Mode and the KDE desktop, and follows the box when you switch, even mid-stream. Nothing in the config picks a mode.
One command instead? The guided installer (preview) does
everything on this page — it detects the distro, installs the host, joins the input and
punktfunk groups, enables linger, opens the firewall and starts it. Those last two match the
hand steps below (Bazzite hosts are usually headless, and the virtual Steam Deck pad needs the
group):
curl -fsSL https://punktfunk.unom.io/install.sh | shThe steps below are the same thing by hand, and stay the documented path.
1. Install the host
The host installs as a systemd system extension — it overlays /usr from
/var/lib/extensions/, survives OS updates, and installs, updates and uninstalls without a
reboot (no rpm-ostree layering, which Bazzite's docs treat as a last resort). The feed is
signed; the installer refuses one it can't verify.
curl -fsSLO https://git.unom.io/unom/punktfunk/raw/branch/main/packaging/bazzite/punktfunk-sysext.shsudo bash punktfunk-sysext.sh installThat fetches the newest image — host, web console, tray, the plugin runner (started for you, because
the game-library scanners are plugins) and the HDR punktfunk-gamescope build — and
applies the udev/sysctl setup on the spot. From then on sudo punktfunk-sysext update (or the
console's update button) moves you to the newest build; status shows where you
are. After an update restart the host: systemctl --user restart punktfunk-web punktfunk-host.
2. Let it use your controllers
On Bazzite the input group is managed by a recipe, so don't usermod it — use the helper. The
punktfunk group is ours (the sysext creates it) and gates the virtual Steam Deck controller
(paddles, trackpads, gyro) — without it that pad arrives as an ordinary Xbox 360 controller. Then
log out and back in:
ujust add-user-to-input-group
sudo usermod -aG punktfunk "$USER"3. Start it
Bazzite hosts are usually headless, so enable the services and linger, from a terminal in the
desktop session — without linger the --user units wait for a login that never comes:
systemctl --user enable --now punktfunk-host punktfunk-web
sudo loginctl enable-linger "$USER"Two one-time steps for streaming the KDE desktop (Gaming Mode needs neither): log out and back into the Desktop session once so KWin re-reads the screencast grant the package installed, and seed the input grant so the host auto-approves instead of popping a dialog nobody can answer:
bash /usr/share/punktfunk/bazzite/kde-desktop-setup.sh4. Open the firewall
Bazzite runs firewalld, and a package never opens ports for you — until you allow it, no client can reach the host. The image installed the service definitions; enable them once:
sudo firewall-cmd --reload # load the definitions the package installed
sudo firewall-cmd --permanent --add-service=punktfunk-native --add-service=punktfunk-web
sudo firewall-cmd --reload(punktfunk-web is only needed to reach the console from another device; Moonlight compat needs
punktfunk-gamestream too — Ports & firewall.)
That's the install. Continue with the Quick Start from step 3 — open the console, pair a client, stream. Moonlight works great for couch gaming here, the Apple app for Apple TV and iPad.
When you want more
- Gaming Mode: what the client gets. By default the host relaunches Gaming Mode headless at the
client's exact resolution (a display of its own, real HDR, the compositor's cursor), idling the
box's own session with a user-level drop-in for the length of the stream — no privilege needed,
and Steam's "Switch to Desktop" keeps working — and restores the box on idle.
PUNKTFUNK_GAMESCOPE_ATTACH=1makes it attach to the box's own session instead — rock-solid switching, but a box with a screen serves a mirror of it, and loses HDR and the cursor. How the host gets a gamescope has the whole model; the Bazzite template (/usr/share/punktfunk/host.env.bazzite) forces neither. - Stream lags, then freezes, with a DualSense-type client pad — an SELinux storm, with a shipped fix: Troubleshooting.
- Channels, rollback, after a Bazzite major rebase — Updating → Bazzite sysext. Removing it — Uninstall.
- Other ways in. Plain
rpm-ostreelayering from the RPM repo (use thebazzitegroup) still works, andpackaging/bootc/in the repo bakes an appliance image; the sysext is the supported default. Already layering? Install the sysext (it shadows the layer at once), thensudo rpm-ostree uninstall punktfunk punktfunk-web && systemctl reboot. - Everything Gaming-Mode-specific — overlay, touch, HDR, the two gamescope version floors — Steam / gamescope; the desktop — KDE.
Omarchy
Install the Punktfunk host on Omarchy 4.x — one setup command wires up the firewall, autostart, the app menu and toasts the Omarchy way.
SteamOS (Host)
Run a Punktfunk host on SteamOS — stream its Game Mode (or desktop) to your other devices. One script, built on-device and ABI-matched to SteamOS.