From 8d10bccf343cf25108c5aa927d48070fad1ce2fd Mon Sep 17 00:00:00 2001 From: sergio Date: Wed, 5 Aug 2026 10:54:54 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=87=20wireplumber:=20construido,=20cor?= =?UTF-8?q?riendo=E2=80=A6=20y=20NO=20era=20el=20bloqueo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit b3:b8f3baf0, selló a la primera. Arranca desde cosmic-start ("wireplumber OK (pid 192) — hay gestor de sesión"), se conecta al grafo (dos clientes en wpctl status) y wpctl pasa a mostrar una sección Video que antes no existía. Y el Start de ScreenCast SIGUE sin Response a los 60s. Mismo resultado exacto. LA HIPÓTESIS QUEDA MATADA POR MEDICIÓN. "Falta el gestor de sesión que mueva el nodo de Paused a Streaming" era mía y era razonable; no era cierta. Queda escrita junto a su refutación porque una hipótesis descartada CON EVIDENCIA vale más que una lista de sospechosos: acota el próximo paso a lo que queda, que es el backend mismo. El dato nuevo, que es por dónde seguir: con wireplumber corriendo, `wpctl status` lista `Video → Streams` VACÍO durante el handshake. O sea que el nodo `cosmic-screencast` que SÍ existe en `pw-cli ls Node` no llega a wireplumber como stream gestionado. Próximo movimiento: RUST_LOG=trace sobre screencast_thread, no otra dep. ── por qué receta propia y no la de GNOME ────────────────────────────────────── La de incoming-gnome funciona pero NEEDea libglib/libgobject/libpipewire de la ISLA DINÁMICA de GNOME: traerla metería una segunda glib y una segunda pipewire en la imagen. De 19 deps, 14 dan hash idéntico; las que divergen divergen a propósito — sobre todo `pipewire`, que acá apunta a la de COSMIC (338d1d8c), la que el escritorio realmente ARRANCA. Un gestor de sesión contra otra pipewire que la que corre no gestiona nada. El cambio de fondo es glib → glib-shared. COSMIC usa la glib ESTÁTICA del corpus, que le alcanza al portal porque es un ejecutable. Acá no: wireplumber produce un .so y 17 módulos, y libglib-2.0.a tiene 44.275 reubicaciones R_X86_64_32/32S ⇒ no es PIC. La regla del frente GNOME (readelf -r ANTES de gastar el build) ahorró uno. Y la salida no fue una campaña nueva sino una MEDICIÓN: incoming-kde/glib-shared copiada a esta cola resuelve al MISMO hash (0584ce1f) y ya estaba sellada ⇒ cero rebuild. Idem pcre2-shared, lua y libelogind. Las dos glib coexisten sin pisarse (.a y .so son ficheros distintos) y el portal conserva sus 3 NEEDED. escritorio-cosmic: 84 → 89 recetas, 0 faltantes. Co-Authored-By: Claude Opus 5 (1M context) --- .../cosmic-wireplumber-wpctl-2026-08-05.png | Bin 0 -> 66964 bytes docs/runbooks/cosmic-desktop.md | 51 +++++++++- docs/state/targets.toml | 5 + recipes/incoming-cosmic/glib-shared.toml | 32 ++++++ recipes/incoming-cosmic/libelogind.toml | 69 +++++++++++++ recipes/incoming-cosmic/lua.toml | 95 ++++++++++++++++++ recipes/incoming-cosmic/pcre2-shared.toml | 36 +++++++ recipes/incoming-cosmic/wireplumber.toml | 86 ++++++++++++++++ scripts/cosmic/cosmic-start-qemu.sh | 28 ++++++ scripts/cosmic/hydrate-cosmic.sh | 5 + 10 files changed, 402 insertions(+), 5 deletions(-) create mode 100644 docs/evidencia/cosmic-wireplumber-wpctl-2026-08-05.png create mode 100644 recipes/incoming-cosmic/glib-shared.toml create mode 100644 recipes/incoming-cosmic/libelogind.toml create mode 100644 recipes/incoming-cosmic/lua.toml create mode 100644 recipes/incoming-cosmic/pcre2-shared.toml create mode 100644 recipes/incoming-cosmic/wireplumber.toml diff --git a/docs/evidencia/cosmic-wireplumber-wpctl-2026-08-05.png b/docs/evidencia/cosmic-wireplumber-wpctl-2026-08-05.png new file mode 100644 index 0000000000000000000000000000000000000000..c99c8516dfa0826c31cebca9c401d20dbcf276e9 GIT binary patch literal 66964 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 ZPdT$LdXK` de mutter resuelve sin que mutter sepa que somos nosotros. Es el +# mismo arreglo de elogind upstream. +install = ''' +set -e +mkdir -p /out/usr/lib/pkgconfig /out/usr/include/elogind/systemd +cp target/release/libelogind.so /out/usr/lib/libelogind.so.0 +ln -s libelogind.so.0 /out/usr/lib/libelogind.so +cp 03_ukupacha/arje/arje-sdlogin-compat/include/systemd/sd-login.h /out/usr/include/elogind/systemd/ +# sd-daemon.h va aparte porque en systemd también son dos cabeceras y quien la usa la pide por su +# nombre: gdm hace `#include ` en common/gdm-log.c para `sd_booted()`. +cp 03_ukupacha/arje/arje-sdlogin-compat/include/systemd/sd-daemon.h /out/usr/include/elogind/systemd/ +cp 03_ukupacha/arje/arje-sdlogin-compat/pkgconfig/libelogind.pc /out/usr/lib/pkgconfig/ +''' diff --git a/recipes/incoming-cosmic/lua.toml b/recipes/incoming-cosmic/lua.toml new file mode 100644 index 00000000..95c23872 --- /dev/null +++ b/recipes/incoming-cosmic/lua.toml @@ -0,0 +1,95 @@ +# lua 5.4.8 — el intérprete y **la librería compartida**, que es lo que hace falta acá. +# +# POR QUÉ ENTRA: `wireplumber` —el gestor de sesión de PipeWire, sin el cual PipeWire acepta clientes +# pero no enumera ni enruta dispositivos— tiene su política escrita EN LUA y embebe un intérprete +# (`lib/wplua`). Su `subprojects/lua.wrap` DESCARGA Lua 5.5 de lua.org, cosa imposible en el sandbox +# hermético (`--wrap-mode=nodownload`), así que va con `-Dsystem-lua=true` y el sistema tiene que +# tener Lua. Su meson acepta 5.5, 5.4 o 5.3 (meson.build:91-95); se elige **5.4**, la serie estable +# larga que usan las distros, en vez de la 5.5 del wrap. +# +# ══ LO QUE ESTA RECETA TIENE QUE INVENTAR, porque upstream no lo da ═════════════════════════════ +# El Makefile de Lua sólo produce `liblua.a` y los binarios. **No hay regla de `.so` ni fichero +# pkg-config**: los agrega cada distro. Acá se agregan las dos cosas, y a mano, porque no hay dónde +# copiarlas de: +# +# 1. `-fPIC` en `MYCFLAGS`. Sin esto la `.a` no es reubicable y `libwplua` —que es un objeto +# compartido— no linkea: es la regla del corpus sobre `.a` no-PIC dentro de un `.so` +# («relocation R_X86_64_32 … recompile with -fPIC»), la misma que obligó a las variantes +# `-shared` de zlib, sqlite, libxml2, libuuid y dbus. +# 2. La `.so` se enlaza a mano desde la `.a` con `--whole-archive`, porque una librería estática sólo +# aporta los objetos que alguien referencia y acá hay que llevárselos TODOS. SONAME +# `liblua-5.4.so.0`, que es el que graba quien enlace. +# 3. El `.pc` se escribe acá. El nombre importa: wireplumber prueba `lua-5.4`, `lua5.4` y `lua54` en +# ese orden, así que el fichero se llama `lua5.4.pc` y ADEMÁS se deja `lua-5.4.pc` y `lua.pc` como +# enlaces — es más barato satisfacer las tres convenciones que adivinar cuál buscará el próximo +# consumidor. +# +# `-DLUA_USE_LINUX` es lo que activa `dlopen` y el resto de POSIX; sin él Lua se compila en modo ANSI +# genérico y `require` de módulos C no funciona. **SIN readline a propósito**: sólo lo usa el REPL +# interactivo, y el ncurses del catálogo es static-only y arrastra `-static` al link (el mismo +# problema que hizo saltar `pw-top` en la receta de pipewire). +# +# `SYSLIBS` pierde el `-Wl,-E` de upstream: exportar todos los símbolos del EJECUTABLE sirve para que +# módulos C cargados por `require` vean la API de Lua, y acá el que exporta es la `.so`. +name = "lua" +version = "5.4.8" + +[source] +tarball = "https://www.lua.org/ftp/lua-5.4.8.tar.gz" +sha256 = "4f18ddae154e793e46eeab727c59ef1c0c0c2b744e7b94219710d76f530629ae" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" + +[build.phases] +configure = "true" +compile = ''' +set -e +# CC se pasa explícito: el Makefile de Lua lo fija a `gcc -std=gnu99` en la línea 9 y ganaría sobre el +# del entorno. +make -C src all CC="hammer-zig-cc -std=gnu99" \ + SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-ldl" MYCFLAGS="-fPIC" +# La .so que upstream no construye. --whole-archive porque de una estática el linker sólo se lleva lo +# referenciado, y acá hay que llevárselo todo. +hammer-zig-cc -shared -o src/liblua-5.4.so.0.0.0 \ + -Wl,-soname,liblua-5.4.so.0 \ + -Wl,--whole-archive src/liblua.a -Wl,--no-whole-archive -lm +''' +install = ''' +set -e +mkdir -p /out/usr/bin /out/usr/lib/pkgconfig /out/usr/include /out/usr/share/man/man1 +install -m755 src/lua /out/usr/bin/lua5.4 +install -m755 src/luac /out/usr/bin/luac5.4 +ln -s lua5.4 /out/usr/bin/lua +ln -s luac5.4 /out/usr/bin/luac +install -m644 src/lua.h src/luaconf.h src/lualib.h src/lauxlib.h src/lua.hpp /out/usr/include/ +install -m644 src/liblua.a /out/usr/lib/liblua-5.4.a +install -m755 src/liblua-5.4.so.0.0.0 /out/usr/lib/ +ln -s liblua-5.4.so.0.0.0 /out/usr/lib/liblua-5.4.so.0 +ln -s liblua-5.4.so.0 /out/usr/lib/liblua-5.4.so +ln -s liblua-5.4.so /out/usr/lib/liblua.so +cat > /out/usr/lib/pkgconfig/lua5.4.pc <<'PC' +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include +INTERPRETER=${exec_prefix}/bin/lua5.4 +COMPILER=${exec_prefix}/bin/luac5.4 + +Name: Lua +Description: Lua language engine +Version: 5.4.8 +Requires: +Libs: -L${libdir} -llua-5.4 -lm +Cflags: -I${includedir} +PC +# Las tres convenciones de nombre que se usan por ahí; wireplumber prueba lua-5.4, lua5.4 y lua54. +ln -s lua5.4.pc /out/usr/lib/pkgconfig/lua-5.4.pc +ln -s lua5.4.pc /out/usr/lib/pkgconfig/lua54.pc +ln -s lua5.4.pc /out/usr/lib/pkgconfig/lua.pc +''' + +[deps] +build = ["make", "pkgconf"] diff --git a/recipes/incoming-cosmic/pcre2-shared.toml b/recipes/incoming-cosmic/pcre2-shared.toml new file mode 100644 index 00000000..7ebc72d7 --- /dev/null +++ b/recipes/incoming-cosmic/pcre2-shared.toml @@ -0,0 +1,36 @@ +# pcre2-shared 10.47 — variante DINÁMICA (libpcre2-8.so.0, PIC) para el escritorio KDE. +# El canónico (recipes/pcre2.toml) es --disable-shared SIN --with-pic ⇒ su .a no enlaza dentro de un .so. +# Lo exige glib-shared (libglib-2.0.so linkea pcre2 para GRegex). Deuda Capa 0 (static↔dinámico). +# +# compiler=gcc igual que el canónico: su comentario advierte que zig-cc MISCOMPILA libs C (patrón file/jq); +# el gcc del rootfs es musl, y el .so resultante es ABI-compatible con los consumidores zig. +# --disable-symvers como el canónico (musl no maneja symbol versioning de la forma que asume pcre2). +name = "pcre2-shared" +version = "10.47" + +[source] +tarball = "https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.47/pcre2-10.47.tar.bz2" +sha256 = "47fe8c99461250d42f89e6e8fdaeba9da057855d06eb7fc08d9ca03fd08d7bc7" + +[build] +compiler = "gcc" +target = "x86_64-linux-musl" +link = "dynamic" +flags = [] + +[build.phases] +compile = ''' +./configure \ + --build=$CBUILD --host=$CHOST \ + --prefix=/usr \ + --enable-shared --disable-static \ + --enable-pcre2-16 --enable-pcre2-32 \ + --enable-jit \ + --enable-pcre2grep-libz \ + --disable-symvers +make -j"$(nproc)" +''' +install = "make DESTDIR=/out install && find /out -name '*.la' -delete" + +[deps] +build = ["zlib-shared"] diff --git a/recipes/incoming-cosmic/wireplumber.toml b/recipes/incoming-cosmic/wireplumber.toml new file mode 100644 index 00000000..ab1cec75 --- /dev/null +++ b/recipes/incoming-cosmic/wireplumber.toml @@ -0,0 +1,86 @@ +# wireplumber 0.5.15 — EL GESTOR DE SESIÓN de PipeWire, en la variante de COSMIC. +# +# ── POR QUÉ EXISTE ESTA COPIA Y NO SE REUSA LA DE GNOME ───────────────────────────────────────── +# `recipes/incoming-gnome/wireplumber.toml` está sellada y funciona, pero su binario NEEDea +# `libglib-2.0.so.0`, `libgobject-2.0.so.0` y `libpipewire-0.3.so.0` **de la isla dinámica de GNOME**. +# Traerlo tal cual a la imagen de COSMIC significaría meter una segunda glib y una segunda pipewire — +# justo el choque de 370 ficheros solapados que la campaña midió y evitó. +# +# La regla del runbook es que copiar entre colas sale gratis **sólo si toda la clausura resuelve +# igual**. Acá NO resuelve igual, y eso es lo que se quiere: de las 19 deps, 14 dan hash idéntico y +# las que divergen divergen A PROPÓSITO —`pipewire` apunta a la de COSMIC (`338d1d8c`), que es la que +# el escritorio realmente ARRANCA. Un gestor de sesión contra otra pipewire que la que corre no +# gestiona nada. +# +# ── EL CAMBIO DE FONDO: `glib` → `glib-shared` ────────────────────────────────────────────────── +# COSMIC usa la `glib` ESTÁTICA del corpus (le sirve a `xdg-desktop-portal`, que es un ejecutable). +# Acá no alcanza: wireplumber produce `libwireplumber-0.5.so` y sus módulos, y la estática del corpus +# tiene **44.275 reubicaciones `R_X86_64_32/32S`** en `libglib-2.0.a` ⇒ no es PIC y no se puede +# enlazar dentro de un `.so`. (Regla del frente GNOME: `readelf -r` ANTES de gastar un build.) +# +# La salida no fue una campaña nueva sino una MEDICIÓN: `incoming-kde/glib-shared.toml` copiada acá +# resuelve al **mismo hash** (`0584ce1f`) y **ya está sellada** ⇒ cero rebuild. Idem `pcre2-shared` +# (`f254abaa`), `lua` (`e6c35f98`) y `libelogind` (`f1a690b2`), traídas por la misma razón: no existen +# en el catálogo padre y sus hashes coinciden con los de su cola de origen. +# +# ── LO QUE APORTA, Y POR QUÉ HACE FALTA ACÁ ───────────────────────────────────────────────────── +# `pipewire` se construye con `-Dsession-managers=[]`: arranca, acepta clientes y sirve —el portal ya +# figura como cliente suyo— pero **no hay política** de qué es entrada, qué es salida, ni quién mueve +# un nodo de `Paused` a `Streaming`. Y ahí está parado ScreenCast: el backend crea el nodo +# (`cosmic-screencast`, `Video/Source`, visible en `pw-cli ls Node`), su log dice +# `state-changed 'Connecting' -> 'Paused'`… y no emite el `Response`. La hipótesis a confirmar o +# matar con esta receta es que falta exactamente esto. +# +# La política está escrita EN LUA: embebe un intérprete (`lib/wplua`) y sus reglas viven en +# `src/scripts/*.lua`. Por eso la dep interesante no es PipeWire sino **`lua`**. +# +# `-Dsystem-lua=true` es obligatorio: por defecto 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` — la C-ABI de logind otra vez, y acá la sirve `arje-sdlogin-compat`, el mismo +# shim que en el resto del fractal. wireplumber la usa para saber si la sesión está activa antes de +# tomar los dispositivos, que es justo el problema que ese shim resuelve. +# +# Apagados: `-Dsystemd=disabled` y sus units (PID1 es arje-zero y el arranque lo hace `cosmic-start`); +# `-Ddoc=disabled` (falta sphinx/doxygen); `-Dtests=false -Ddbus-tests=false`; `-Dintrospection=disabled` +# porque nadie carga `Wp-0.5` por typelib. +name = "wireplumber" +version = "0.5.15" + +[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] +# Sin `rm -rf output`: con el árbol de fuentes compartido (ADR 0012) borrar el dir de build es +# sabotear a quien esté compilando en paralelo. Lección heredada de la receta de GNOME. +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] +# Difiere de la de GNOME en cuatro nombres, y los cuatro a propósito: `glib-shared` en vez de `glib` +# (la estática no es PIC), `pcre2-shared` en vez de `pcre2` (coherencia con lo que el `.pc` de +# glib-shared declara), y `pipewire`/`pulseaudio` que resuelven a los de ESTA cola — los que el +# escritorio arranca. +build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "lua", "pipewire", + "glib-shared", "dbus-shared", "libelogind", "alsa-lib", "libsndfile", "pulseaudio", + "expat", "pcre2-shared", "libffi", "libudev-zero", "zlib-shared"] diff --git a/scripts/cosmic/cosmic-start-qemu.sh b/scripts/cosmic/cosmic-start-qemu.sh index 35d27df8..c5c48c40 100755 --- a/scripts/cosmic/cosmic-start-qemu.sh +++ b/scripts/cosmic/cosmic-start-qemu.sh @@ -170,6 +170,34 @@ else say "!! sin /usr/bin/pipewire — ScreenCast no va a poder crear stream" fi +# ── EL GESTOR DE SESIÓN: wireplumber ──────────────────────────────────────────────────────────── +# pipewire se construye con `-Dsession-managers=[]`, o sea que arranca y sirve pero NO TIENE +# POLÍTICA: nada decide qué es entrada, qué es salida, ni quién mueve un nodo de `Paused` a +# `Streaming`. wireplumber es esa política, escrita en Lua. +# +# Por qué está acá y no antes: **necesita el socket de pipewire ya abierto**. Se lanza después a +# propósito, no por orden estético — un gestor de sesión sin demonio que gestionar sale con error. +# +# Acá NO se puede esperar un socket, porque wireplumber no abre ninguno: es un CLIENTE de pipewire, +# no un servidor. Lo que dice que hizo su trabajo es que aparezca como cliente en el grafo +# (`pw-cli ls Client`), y eso es una medición del sistema, no una condición de arranque. Así que se +# espera un instante y se reporta si el proceso sigue vivo — con el log a mano, que es lo que sirve +# cuando falla. +if [ -x /usr/bin/wireplumber ] && [ -S "$XDG_RUNTIME_DIR/pipewire-0" ]; then + /usr/bin/wireplumber >/tmp/wireplumber.log 2>&1 & + WP_PID=$! + sleep 2 + if alive $WP_PID; then + say "wireplumber OK (pid $WP_PID) — hay gestor de sesión" + else + say "!! wireplumber MURIÓ:"; dump /tmp/wireplumber.log + fi +elif [ -x /usr/bin/wireplumber ]; then + say "!! wireplumber presente pero sin socket de pipewire — no se lanza" +else + say "-- sin wireplumber (pipewire sirve, pero sin política de sesión)" +fi + # ── FONDO: color liso, porque la imagen por defecto NO SE PUEDE EMPAQUETAR ──────────────────── # El default de cosmic-bg apunta a `/usr/share/backgrounds/cosmic/orion_nebula_nasa_heic0601a.jpg`, # que vive en el repo `cosmic-wallpapers`… en **git-lfs**: el tarball de GitHub pesa 20 KB y trae diff --git a/scripts/cosmic/hydrate-cosmic.sh b/scripts/cosmic/hydrate-cosmic.sh index 2e6ce37e..e329bba4 100755 --- a/scripts/cosmic/hydrate-cosmic.sh +++ b/scripts/cosmic/hydrate-cosmic.sh @@ -84,6 +84,11 @@ else # con el bus y el compositor vivos— y sale estática, sin un NEEDED, justamente para que nunca # falle por algo del sistema que está midiendo. recipes/incoming-cosmic/portal-probe.toml + # El GESTOR DE SESIÓN de pipewire. Ningún `[deps]` lo alcanza —es un cliente del demonio, no una + # librería de nadie— así que es raíz a mano como todo lo que se lanza por PATH. Trae consigo la + # glib COMPARTIDA (`glib-shared`), que no es la estática que usa el resto de la cola: wireplumber + # produce `.so` y la estática del corpus no es PIC. + recipes/incoming-cosmic/wireplumber.toml recipes/incoming-cosmic/cosmic-app-library.toml recipes/incoming-cosmic/cosmic-workspaces-epoch.toml # Ni binario ni librería: DATOS. El tema de iconos de COSMIC — sin él el escritorio no se ve