fd699b3e2c
Fixes from live debugging on the Deck: - check_update() was dead on-device: Decky Loader's embedded (PyInstaller) Python has no usable default CA paths, so every HTTPS fetch failed with CERTIFICATE_VERIFY_FAILED. Build the SSL context explicitly: default paths first, then the known system bundles (SteamOS/Arch, Debian, Fedora/Bazzite, openSUSE), then certifi if importable. Verification stays on; the check stays offline-tolerant with its 30-min cache. - "could not chmod runner" on every use: Decky extracts plugin zips without exec bits into a root-owned dir the unprivileged backend can't chmod. The Steam shortcut now launches the runner through /bin/sh with the script as a %command% argument — no exec bit needed, existing shortcuts migrate on reuse, the chmod attempt is gone. UI/structure: - index.tsx (660 lines) split into page/pair/settings/hooks/boundary modules; PluginErrorBoundary kept guarding every surface. - New About section/tab: visible version + channel, explicit check-for-updates (forces past the cache, always toasts an outcome), setup-guide link, leave- chord help, and a Force-stop backstop for a wedged stream. - Host rows open a details modal (address, protocol, pairing policy, paired state, fingerprint). Settings gain 1280×800 (Deck native), Xbox One and DualShock 4 pad types, and a host-compositor picker. - Update flows note the Decky store contact can stall a couple of minutes on networks that blackhole plugins.deckbrew.xyz (observed live). - "Punktfunk" in all user-facing strings; plugin id/paths/env unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
42 lines
2.3 KiB
Bash
Executable File
42 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# punktfunk stream runner — the target of the hidden non-Steam shortcut the plugin creates.
|
|
#
|
|
# WHY A WRAPPER SCRIPT (load-bearing, from MoonDeck's hard-won knowledge): the stream client
|
|
# must be a descendant of the process Steam launches via `reaper`, or gamescope never gives
|
|
# its window focus/fullscreen in Gaming Mode (gamescope detects the "current app" by AppID,
|
|
# which only attaches to reaper's descendants — see gamescope#484). So the Decky plugin
|
|
# launches THIS script through SteamClient.Apps.RunGame; the script then execs the flatpak
|
|
# client, which inherits the shortcut's AppID and is focused. Launching the flatpak directly
|
|
# from the (root) Decky backend produces an unfocused, invisible window.
|
|
#
|
|
# Per-session parameters arrive as environment variables, set as the shortcut's Steam launch
|
|
# options by the plugin (SteamClient.Apps.SetAppLaunchOptions), so ONE generic shortcut serves
|
|
# every host:
|
|
# PF_HOST host[:port] to connect to (required)
|
|
# PF_APPID flatpak app id (default io.unom.Punktfunk)
|
|
# PF_FLATPAK override the flatpak binary path (default: `flatpak` on PATH)
|
|
#
|
|
# Runs as the `deck` user (Steam launched it), so the --user flatpak install is visible and
|
|
# WAYLAND_DISPLAY / XDG_RUNTIME_DIR are already correct for gamescope.
|
|
#
|
|
# NO EXEC BIT REQUIRED: the Steam shortcut's exe is `/bin/sh` and this script rides behind
|
|
# `%command%` as an argument (see src/steam.ts). Decky extracts plugin zips without preserving
|
|
# permission bits and ~/homebrew/plugins is root-owned (the unprivileged plugin backend can't
|
|
# chmod), so the launch path must never depend on +x. Keep this script POSIX-sh clean.
|
|
set -u
|
|
|
|
APPID="${PF_APPID:-io.unom.Punktfunk}"
|
|
FLATPAK="${PF_FLATPAK:-flatpak}"
|
|
|
|
if [ -z "${PF_HOST:-}" ]; then
|
|
echo "punktfunkrun: PF_HOST is not set (the plugin sets it as a launch option)" >&2
|
|
exit 2
|
|
fi
|
|
|
|
echo "punktfunkrun: streaming $APPID --connect $PF_HOST" >&2
|
|
# exec so the flatpak client IS the game process — when it exits, Steam ends the "game" and
|
|
# Gaming Mode reclaims focus automatically (no manual refocus needed).
|
|
# --fullscreen: present the stream chrome-less and fullscreen (the client also auto-detects the
|
|
# Deck/gamescope env, and ignores the flag harmlessly on older builds that predate it).
|
|
exec "$FLATPAK" run --arch=x86_64 "$APPID" --connect "$PF_HOST" --fullscreen
|