From 7d1846847744baf74ea6366c0995d3f2cb42d562 Mon Sep 17 00:00:00 2001 From: enricobuehler Date: Tue, 28 Jul 2026 22:56:48 +0200 Subject: [PATCH] fix(packaging/arch): a client that never speaks Pulse must not demand the Pulse shim MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `punktfunk-client` hard-depended on `pipewire-pulse`, which CONFLICTS with `pulseaudio` — so anyone keeping real PulseAudio could not install the client at all ("unresolvable package conflicts detected"), even though the client has no use for the shim: audio.rs drives libpipewire-0.3 directly for both playback and the mic uplink, and never opens a Pulse socket. Dropped it from the client. The host doesn't speak Pulse either — it captures the sink monitor natively — but the shim is genuinely useful there, for the GAMES, which commonly emit through the PulseAudio API. That's an optdepend, and one real `pulseaudio` satisfies just as well, so the host stops blocking that choice too. Both now match what the .deb and the RPM already said (Recommends / "degrade gracefully without it"); only the Arch package had hardened it into a conflict. Co-Authored-By: Claude Opus 5 (1M context) --- packaging/arch/PKGBUILD | 16 +++++++++++++--- packaging/arch/README.md | 3 ++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packaging/arch/PKGBUILD b/packaging/arch/PKGBUILD index 397e857a..f173a670 100644 --- a/packaging/arch/PKGBUILD +++ b/packaging/arch/PKGBUILD @@ -126,9 +126,14 @@ package_punktfunk-host() { pkgdesc="Low-latency desktop/game streaming HOST (Moonlight-compatible + punktfunk/1)" # NVENC + GPU EGL/CUDA come from the NVIDIA driver (nvidia-utils) — kept an optdepend, never a # hard dep, exactly as the RPM (__requires_exclude libcuda) and deb (shlibdeps filter) do. - depends=('ffmpeg' 'pipewire' 'pipewire-pulse' 'wireplumber' 'opus' 'libei' + # The host captures the sink monitor through NATIVE PipeWire (audio/linux.rs) — it never + # opens a Pulse socket itself, so pipewire-pulse is an OPTdepend, not a depend: it exists + # for the GAMES, which commonly emit through the PulseAudio API. Hard-depending on it made + # the package uninstallable next to real `pulseaudio`, which serves those games just as well. + depends=('ffmpeg' 'pipewire' 'wireplumber' 'opus' 'libei' 'mesa' 'libglvnd' 'libxkbcommon' 'wayland') - optdepends=('nvidia-utils: NVENC hardware encode + GPU EGL/CUDA zero-copy (REQUIRED to encode on NVIDIA)' + optdepends=('pipewire-pulse: PulseAudio-API audio from games/apps (real `pulseaudio` also works)' + 'nvidia-utils: NVENC hardware encode + GPU EGL/CUDA zero-copy (REQUIRED to encode on NVIDIA)' 'gamescope: per-session nested compositor backend (no desktop login needed) — needs >=3.16.22' 'kwin: stream a KDE Plasma desktop (kwin VirtualDisplay backend)' 'mutter: stream a GNOME desktop (Mutter RecordVirtual backend)' @@ -227,7 +232,12 @@ package_punktfunk-client() { # The GTK4/libadwaita shell + its Vulkan session streamer: SDL3 gamepads, FFmpeg (VAAPI + # Vulkan Video) decode, PipeWire audio/mic. vulkan-icd-loader: the session binary loads # libvulkan at runtime (ash) for its ash/Skia presenter. - depends=('gtk4' 'libadwaita' 'sdl3' 'ffmpeg' 'pipewire' 'wireplumber' 'pipewire-pulse' + # NOT pipewire-pulse: the client speaks NATIVE PipeWire (audio.rs drives libpipewire-0.3 + # directly for both playback and the mic uplink) and never opens a Pulse socket, so the + # compat shim buys it nothing — while `pipewire-pulse` CONFLICTS with `pulseaudio`, which + # made the package uninstallable for anyone keeping real PulseAudio. Matches the .deb + # (Recommends) and the RPM (Recommends, "degrade gracefully without it"). + depends=('gtk4' 'libadwaita' 'sdl3' 'ffmpeg' 'pipewire' 'wireplumber' 'opus' 'libglvnd' 'vulkan-icd-loader') optdepends=('libva-mesa-driver: VAAPI hardware decode on AMD (incl. Steam Deck); software fallback otherwise' 'intel-media-driver: VAAPI hardware decode on Intel' diff --git a/packaging/arch/README.md b/packaging/arch/README.md index eacb3cd5..0c1b4d3b 100644 --- a/packaging/arch/README.md +++ b/packaging/arch/README.md @@ -107,7 +107,8 @@ NVENC/EGL come from the NVIDIA driver: `sudo pacman -S --needed nvidia-utils`. A | Need | Arch package | |------|--------------| | FFmpeg + NVENC | `ffmpeg` (NVENC built in) | -| PipeWire + Pulse + session mgr | `pipewire` `pipewire-pulse` `wireplumber` | +| PipeWire + session mgr | `pipewire` `wireplumber` | +| PulseAudio-API audio for games | `pipewire-pulse` *(host optdepend — real `pulseaudio` also works; never a hard dep, it CONFLICTS with `pulseaudio`)* | | Opus / input injection | `opus` `libei` | | GL/EGL + gbm + xkb + wayland | `libglvnd` `mesa` `libxkbcommon` `wayland` | | NVIDIA driver (NVENC/EGL/CUDA) | `nvidia-utils` *(optdepend — never a hard dep)* |