docs(bazzite): join the input group via ujust add-user-to-input-group
ci / rust (push) Has been cancelled

On Bazzite (atomic rpm-ostree) `sudo usermod -aG input $USER` doesn't stick —
/etc/group is managed declaratively, so the change is dropped or reverted on
the next update. The supported path is the `ujust add-user-to-input-group`
recipe, which edits the group the immutable-OS-correct way. Update the bazzite
README + the packaging quickstart + the troubleshooting note (which also now
points at the host's "virtual gamepad/DualSense created" vs "creation failed"
log as the unambiguous signal).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-11 20:32:55 +00:00
parent d39ad478bb
commit 902cc162f7
2 changed files with 17 additions and 6 deletions
+2 -1
View File
@@ -62,7 +62,8 @@ sudo bootc switch ghcr.io/<you>/bazzite-punktfunk && systemctl reboot
## First-run setup (either option)
```sh
sudo usermod -aG input "$USER" # virtual gamepads need /dev/uinput (then re-login)
ujust add-user-to-input-group # virtual gamepads need /dev/uinput (then re-login).
# On Bazzite use ujust, NOT `usermod -aG input` (atomic OS — it won't stick).
mkdir -p ~/.config/punktfunk
cp /usr/share/punktfunk/host.env.bazzite ~/.config/punktfunk/host.env # edit (gamescope app, etc.)
systemctl --user enable --now punktfunk-host
+15 -5
View File
@@ -114,9 +114,15 @@ The RPM **already installs** the rule to `/usr/lib/udev/rules.d/60-punktfunk.rul
reloads udev. So on a packaged install (Path A or B) **you only need to join the `input` group**:
```sh
sudo usermod -aG input "$USER" # then LOG OUT and back in (or reboot)
ujust add-user-to-input-group # then LOG OUT and back in (or reboot)
```
> ⚠️ **On Bazzite use `ujust add-user-to-input-group`, NOT `sudo usermod -aG input $USER`.** Bazzite
> is an atomic (rpm-ostree) OS where `/etc/group` is managed declaratively — a plain `usermod` either
> doesn't stick or gets reverted on the next update. The `ujust` recipe edits the group the
> immutable-OS-correct way (and reloads udev). (`ujust` ships with Bazzite; `ujust --list` shows all
> recipes.)
> 🔁 **The group change does not apply to your current login session** — you must re-login (or
> reboot). Until then, gamepad creation fails with a permission error on `/dev/uinput`. This is the
> single most common "why don't my gamepads work" gotcha.
@@ -126,7 +132,7 @@ manually — the exact commands from the rule file's header (`scripts/60-punktfu
```sh
sudo cp scripts/60-punktfunk.rules /etc/udev/rules.d/
sudo usermod -aG input "$USER" # then re-login (or reboot)
ujust add-user-to-input-group # NOT `usermod` on Bazzite (see the note above); then re-login
sudo udevadm control --reload-rules && sudo udevadm trigger
```
@@ -313,9 +319,13 @@ desktop viewer.
## 8. Troubleshooting (grounded in the repo's real gotchas)
- **Gamepads don't appear / permission denied on `/dev/uinput` or `/dev/uhid`.** You haven't
re-logged-in after `usermod -aG input`. Log out and back in (or reboot) — group membership only
takes effect on a new session. (`scripts/60-punktfunk.rules`, `packaging/README.md`.)
- **Gamepads don't appear / permission denied on `/dev/uinput` or `/dev/uhid`.** Either you haven't
joined the `input` group, or you haven't re-logged-in since. On Bazzite join it with
`ujust add-user-to-input-group` (a plain `sudo usermod -aG input` doesn't stick on an atomic OS —
see section 3), then log out and back in (or reboot): group membership only takes effect on a new
session. The host log makes this unambiguous — it prints `virtual gamepad created` /
`virtual DualSense created` on success, or `… creation failed — controller input disabled` when
the device node isn't writable. (`scripts/60-punktfunk.rules`, `packaging/README.md`.)
- **No video / NVENC fails to encode.** RPM Fusion's `ffmpeg-libs` (with NVENC) is missing — it's a
weak dependency, so the package installed without it. Re-run the RPM Fusion step in section 1.