66c2bee183
apple / swift (push) Successful in 1m16s
ci / bench (push) Successful in 1m32s
ci / web (push) Successful in 27s
ci / docs-site (push) Successful in 30s
deb / build-publish (push) Successful in 4m21s
ci / rust (push) Successful in 6m50s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 5s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 5s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 4s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 5s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 5s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 5m31s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Successful in 5m36s
docker / deploy-docs (push) Successful in 18s
The session-aware selector drives a KWin virtual output at the client's
resolution when the Bazzite box is in KDE Desktop Mode — validated live. But a
normal KDE login withholds two things the headless host needs:
1. KWIN_WAYLAND_NO_PERMISSION_CHECKS=1 — so KWin exposes the privileged
zkde_screencast virtual-output protocol to an external client.
2. the kde-authorized RemoteDesktop grant — so libei input auto-approves
instead of popping a dialog a headless host can't answer.
Add packaging/bazzite/kde-desktop-setup.sh (idempotent, no root): writes the
environment.d KWIN drop-in and seeds the grant DB (shipped at
/usr/share/punktfunk/headless/kde-authorized) into ~/.local/share/flatpak/db/,
restarting the portal chain. Ship it via the RPM at
/usr/share/punktfunk/bazzite/ and document it in the Bazzite README (new §6.5).
Gaming Mode needs none of this (auto-attach).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
49 lines
2.5 KiB
Bash
49 lines
2.5 KiB
Bash
#!/usr/bin/env bash
|
|
# One-shot setup so the punktfunk host can stream the Bazzite KDE *Desktop* session (KWin virtual
|
|
# output at the client's resolution). Run ONCE as the streaming user (no root needed). Gaming Mode
|
|
# (gamescope) needs none of this — it auto-attaches. Idempotent: safe to re-run.
|
|
#
|
|
# bash /usr/share/punktfunk/bazzite/kde-desktop-setup.sh
|
|
#
|
|
# Two things a normal KDE login lacks that the headless host needs:
|
|
# 1. KWIN_WAYLAND_NO_PERMISSION_CHECKS=1 — so KWin exposes the privileged `zkde_screencast`
|
|
# virtual-output protocol to the host (an external client) at all.
|
|
# 2. The `kde-authorized` RemoteDesktop grant — so libei input setup auto-approves instead of
|
|
# popping an "Allow remote control?" dialog the headless host can't answer.
|
|
# After running, log out + back into the KDE Desktop session once (or reboot) so KWin restarts
|
|
# with the flag. Gaming Mode is unaffected.
|
|
set -euo pipefail
|
|
|
|
GRANT_SRC="${PUNKTFUNK_GRANT_SRC:-/usr/share/punktfunk/headless/kde-authorized}"
|
|
ENVD="$HOME/.config/environment.d/10-punktfunk-kwin.conf"
|
|
GRANT_DST="$HOME/.local/share/flatpak/db/kde-authorized"
|
|
|
|
echo "punktfunk: KDE Desktop-mode setup"
|
|
|
|
# 1. KWin permission-check bypass (persistent, picked up by the next KDE session via systemd).
|
|
mkdir -p "$(dirname "$ENVD")"
|
|
cat > "$ENVD" <<'EOF'
|
|
# punktfunk: let the streaming host bind KWin's privileged zkde_screencast (virtual output).
|
|
# A dedicated streaming box; this relaxes KWin's Wayland permission checks for the desktop path.
|
|
KWIN_WAYLAND_NO_PERMISSION_CHECKS=1
|
|
EOF
|
|
echo " wrote $ENVD"
|
|
|
|
# 2. RemoteDesktop portal grant for headless libei input (never clobber an existing one).
|
|
if [[ -s "$GRANT_DST" ]]; then
|
|
echo " grant DB already present ($GRANT_DST) — leaving it"
|
|
elif [[ -s "$GRANT_SRC" ]]; then
|
|
mkdir -p "$(dirname "$GRANT_DST")"
|
|
cp "$GRANT_SRC" "$GRANT_DST"
|
|
echo " seeded RemoteDesktop grant -> $GRANT_DST"
|
|
# Pick it up now without a relogin (the portal store caches at start).
|
|
systemctl --user restart xdg-permission-store 2>/dev/null || true
|
|
systemctl --user restart plasma-xdg-desktop-portal-kde xdg-desktop-portal-kde 2>/dev/null || true
|
|
systemctl --user restart xdg-desktop-portal 2>/dev/null || true
|
|
else
|
|
echo " WARN: grant source not found at $GRANT_SRC — input will need a manual portal approval" >&2
|
|
fi
|
|
|
|
echo "punktfunk: done. Log out + back into the KDE Desktop session (or reboot) so KWin restarts"
|
|
echo " with the flag, then connect a client while in Desktop Mode."
|