ci / web (push) Successful in 1m3s
ci / docs-site (push) Successful in 2m11s
ci / rust-arm64 (push) Successful in 2m41s
docker / builders (--build-arg FEDORA_VERSION=44, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm, -f44) (push) Successful in 11s
docker / builders (ci/android-ci.Dockerfile, punktfunk-android-ci) (push) Successful in 11s
docker / builders (ci/arch-ci.Dockerfile, punktfunk-arch-ci) (push) Successful in 24s
deb / build-publish-client-arm64 (push) Successful in 2m28s
docker / builders (ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 8s
docker / builders (ci/rust-ci-noble.Dockerfile, punktfunk-rust-ci-noble) (push) Successful in 7s
docker / builders (ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 7s
docker / apps (., web/Dockerfile, punktfunk-web) (push) Successful in 13s
apple / swift (push) Successful in 4m48s
docker / apps (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 1m36s
arch / build-publish (push) Successful in 7m20s
ci / rust (push) Successful in 7m21s
deb / build-publish-host (push) Successful in 7m4s
docker / builders-arm64cross (push) Successful in 8s
deb / build-publish (push) Successful in 5m31s
docker / deploy-docs (push) Successful in 34s
android / android (push) Successful in 8m17s
windows-host / package (push) Successful in 10m43s
windows-host / winget-source (push) Skipped
windows-host / canary-manifest (push) Successful in 18s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 16m40s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Failing after 17m31s
apple / screenshots (push) Successful in 20m57s
Fallout from the documentation sweep: verifying doc claims against the code
turned up defects in the code and the shipped templates. Mostly comments that
describe behaviour we no longer have — which is how the docs went wrong in the
first place, since someone reads the comment and writes the page.
The one that mattered: a fresh deb/RPM/Arch install could not start the host at
all. The unit's `EnvironmentFile=` had no `-`, making host.env mandatory, and no
package creates it — all three ship only the templates under /usr/share and the
postinst merely prints the copy command. So `systemctl --user enable --now
punktfunk-host` died on "Failed to load environment files". Every field in
HostConfig::from_env resolves through unwrap_or/filter/None, so absent means all
defaults, exactly like a hand-run `serve`; the Nix module already wrote it as
`-${environmentFile}`. The Deck installer's own generated unit gets the same
prefix for the case where an operator later removes the file.
Shipped templates: PUNKTFUNK_SECURE_DDA is read by nothing (DDA/WGC are gone;
IDD-push is the sole Windows capture path and the secure desktop is
unconditional), so it stops being written into a fresh host.env;
PUNKTFUNK_INPUT_BACKEND offered a `uinput` value that does not exist and omitted
`kwin`, which is what a KDE session actually resolves to; PUNKTFUNK_RENDER_ADAPTER
no longer claims to pick a "Desktop-Duplication" GPU.
Comments corrected rather than deleted, since each explains a real why:
PUNKTFUNK_10BIT is default-on with explicit-off grammar, not an operator opt-in;
GNOME reaches EIS through Mutter's direct RemoteDesktop API, so it needs no portal
approval and is headless-capable; and the host does not run in session 0 — the
service is the session-0 supervisor and the host runs as SYSTEM in the interactive
console session, which is why game_term has to bind the input desktop at all.
packaging/bazzite/update-punktfunk.sh is now installed to /usr/share/punktfunk/,
so the command the docs promised exists.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
65 lines
3.7 KiB
Bash
65 lines
3.7 KiB
Bash
# punktfunk host configuration (Windows) — read by the `PunktfunkHost` service.
|
|
#
|
|
# `punktfunk-host service install` writes a default copy of this to
|
|
# %ProgramData%\punktfunk\host.env
|
|
# Edit that file (not this one) and restart the service to apply:
|
|
# punktfunk-host service stop
|
|
# punktfunk-host service start
|
|
#
|
|
# Format: KEY=VALUE per line; '#' starts a comment. The service loads these into its environment
|
|
# and passes PUNKTFUNK_* and RUST_LOG through to the host it launches into the active session.
|
|
|
|
# Hardware encode backend. `auto` (default) detects the GPU vendor: NVIDIA->nvenc (direct SDK),
|
|
# AMD->amf, Intel->qsv (both libavcodec). Force one with: nvenc | amf | qsv | sw (software H.264).
|
|
# nvenc needs the `--features nvenc` build; amf/qsv need the `--features amf-qsv` build (FFmpeg DLLs
|
|
# ship in the installer). The published installer is built with all three.
|
|
PUNKTFUNK_ENCODER=auto
|
|
|
|
# Video source: `virtual` creates a per-client virtual display at the client's exact resolution +
|
|
# refresh — the flagship mode. Requires the bundled pf-vdisplay indirect display driver installed.
|
|
PUNKTFUNK_VIDEO_SOURCE=virtual
|
|
|
|
# Virtual-display backend: the all-Rust pf-vdisplay IddCx driver the installer bundles is the only
|
|
# backend now (the legacy SudoVDA backend was removed). This is informational; leave it as `pf`.
|
|
PUNKTFUNK_VDISPLAY=pf
|
|
|
|
# Capture is IDD-push: straight from the pf-vdisplay driver's shared ring — zero-copy, and it always
|
|
# includes the secure desktop (UAC / lock / login), so the stream survives those transitions. It is
|
|
# the SOLE capture path (DDA/WGC were removed; the former PUNKTFUNK_IDD_PUSH and PUNKTFUNK_SECURE_DDA
|
|
# knobs are gone — secure-desktop capture has no setting, and a stale line is ignored).
|
|
|
|
# The name this host shows up under in Moonlight and the Punktfunk clients. Defaults to the
|
|
# machine's computer name; set it to give the box a friendly name without renaming Windows.
|
|
#PUNKTFUNK_HOST_NAME=Living Room
|
|
|
|
# Log level (info | debug | trace). Logs land in %ProgramData%\punktfunk\logs\.
|
|
RUST_LOG=info
|
|
|
|
# The host subcommand the service launches. The native punktfunk/1 host is ALWAYS on; `--gamestream`
|
|
# adds the GameStream/Moonlight-compat planes, which pair over plain HTTP and reuse legacy GCM
|
|
# nonces (security-review #5/#9) — so `serve` alone is the SECURE native-only host.
|
|
#
|
|
# A Windows install writes this line explicitly from the installer's "Enable GameStream (Moonlight)
|
|
# compatibility" task, which is OPT-IN (unchecked) — so a default install lands `serve`. Only if
|
|
# this line is absent altogether does the service fall back to its built-in `serve --gamestream`.
|
|
# Change it later with `punktfunk-host service install --gamestream=on|off` + a service restart; a
|
|
# custom value you write here by hand is never overwritten by a reinstall/upgrade.
|
|
#PUNKTFUNK_HOST_CMD=serve --gamestream
|
|
|
|
# Multi-GPU boxes only: force the render GPU by adapter Description substring. One pick drives the
|
|
# whole pipeline — pf-vdisplay's IddCx render adapter, the IDD-push capture ring, and the encoder
|
|
# (NVENC/AMF/QSV) that reads it. A manual GPU preference in the web console outranks this; with
|
|
# neither set the host auto-picks the adapter with the most dedicated VRAM. Leave unset on
|
|
# single-GPU machines.
|
|
#PUNKTFUNK_RENDER_ADAPTER=4090
|
|
|
|
# Keep a per-client virtual display alive briefly after disconnect so a quick reconnect reuses it
|
|
# (no display connect/disconnect chime). Default 10000 ms.
|
|
#PUNKTFUNK_MONITOR_LINGER_MS=10000
|
|
|
|
|
|
# Run the virtual display at a MULTIPLE of the session's frame rate, without sending a single extra
|
|
# frame — halves the worst-case wait for a freshly composited frame at 2. Costs the extra
|
|
# composites, so it's opt-in; 1 (default) is off, 4 is the ceiling.
|
|
#PUNKTFUNK_VDISPLAY_HZ_MULT=2
|