# wireplumber 0.5.15 — EL GESTOR DE SESIÓN de PipeWire. La pieza que faltaba para que el audio sea # audio y no sólo un socket que acepta conexiones. # # QUÉ APORTA, y por qué no alcanzaba con pipewire: `pipewire` se construyó con # `-Dsession-managers=[]`, así que arranca, acepta clientes y gnome-shell conecta —el # `Gvc-WARNING: Failed to connect context` desapareció— pero **no enumera ni enruta dispositivos**: no # hay política de qué es entrada, qué es salida, qué se enlaza con qué. El sink que veía el shell era # `auto_null` («Dummy Output»). Eso es el nodo de descarte, no una tarjeta. # # wireplumber es esa política, y está escrita EN LUA: embebe un intérprete (`lib/wplua`) y sus reglas # viven en `src/scripts/*.lua`. De ahí que la dep interesante de esta receta no sea PipeWire sino # **`lua`**, que hubo que autorar (el Makefile de Lua no produce `.so` ni `.pc`; ver esa receta). # # `-Dsystem-lua=true` es obligatorio acá: por defecto wireplumber usa su `subprojects/lua.wrap`, que # **DESCARGA Lua 5.5 de lua.org**, y el sandbox va con `--wrap-mode=nodownload`. Con la perilla # prendida busca por pkg-config `lua-5.5`/`lua5.5`/`lua55`, después las 5.4 y después las 5.3 # (meson.build:91-95): nuestra `lua5.4.pc` entra por la segunda tanda. # # `-Delogind=enabled` — cuarta vez que la C-ABI de logind aparece en esta campaña, y la primera en que # está desde el principio: `libelogind` (arje-sdlogin-compat) ya está sellada. wireplumber la usa para # saber si la sesión está activa antes de tomar los dispositivos de audio, que es exactamente el # problema que resuelve nuestro shim. # # ✅ RESUELTO (2026-07-30): el `-I$PWD/lib/wp` de `c_args` NO HACÍA FALTA y ya no está. # # Se había agregado porque el build cortaba con `../lib/wp/wp.h:13: fatal error: 'client.h' file not # found` — un header que SÍ existe justo al lado del que lo incluye, o sea que el `#include "..."` # relativo debía haberlo encontrado. La explicación real era la CARRERA DEL ADR 0012: otro agente # construía en el mismo repo y borraba árboles de `work/sources/` en pleno build. Esa carrera produce # exactamente esa firma —ficheros que existen cuando los mirás después y no existían al compilar—, y es # de las que hacen inventar arreglos para síntomas que no son del código. # # **Re-probado con el repo QUIETO y sella igual sin la bandera.** Confirmado, no supuesto: se comprobó # primero que no hubiera ningún `takana build` corriendo, después se quitó el flag y el build pasó # entero. La lección: antes de agregar una bandera que no se explica, mirar si hay otro build vivo. # # Por lo mismo se QUITÓ de esta receta un `rm -rf output` que había puesto antes en el configure: con # el árbol compartido, borrar el directorio de build es sabotear a quien esté compilando en paralelo. # # Apagados: `-Dsystemd=disabled` y sus units (acá PID1 es arje-zero, y el arranque lo hace # `gnome-start`); `-Ddoc=disabled` (falta sphinx/doxygen); `-Dtests=false -Ddbus-tests=false`; # `-Dintrospection=disabled` porque nadie carga `Wp-0.5` por typelib — el shell habla con PipeWire por # el protocolo de PulseAudio, no con wireplumber por GObject. name = "wireplumber" version = "0.5.15" license = "MIT" [source] tarball = "https://gitlab.freedesktop.org/pipewire/wireplumber/-/archive/0.5.15/wireplumber-0.5.15.tar.gz" sha256 = "baa121bc918df5fa0e0e70755bb1c99ffab0ab107225ecf99aa470e2c6ba5e7b" [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "dynamic" [build.phases] configure = ''' set -e PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output \ --prefix=/usr --buildtype=release --wrap-mode=nodownload \ -Ddefault_library=shared \ -Dsystem-lua=true -Dsystem-lua-version=auto \ -Delogind=enabled -Dsystemd=disabled \ -Dsystemd-system-service=false -Dsystemd-user-service=false \ -Dintrospection=disabled -Ddoc=disabled \ -Dtests=false -Ddbus-tests=false \ -Dc_args=-Wno-error=date-time ''' compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output" install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild" [deps] build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "lua", "pipewire", "glib", "dbus-shared", "libelogind", "alsa-lib", "libsndfile", "pulseaudio", "expat", "pcre2", "libffi", "libudev-zero", "zlib-shared"] # ── EL SERVICIO QUE ESTE PAQUETE TRAE (SDD 30) ────────────────────────────────────────────────── # El gestor de sesión de pipewire. Mismo `scope = "session"` y misma advertencia: fuera de mirada # nadie entrega Cards de sesión todavía. [[service]] label = "wireplumber" id = "01HQAR53D4M2NBV8KZTYXFQA28" exec = "/usr/bin/wireplumber" scope = "session" restart = { initial_ms = 500, max_ms = 20000 }