diff --git a/docs/runbooks/gnome-qemu-desktop.md b/docs/runbooks/gnome-qemu-desktop.md index 22736fc4..5f11a4b4 100644 --- a/docs/runbooks/gnome-qemu-desktop.md +++ b/docs/runbooks/gnome-qemu-desktop.md @@ -48,19 +48,37 @@ gdb -batch -q -ex "set sysroot $PWD/work/gnome-qemu-rootfs" \ -ex "core-file /tmp/core.gnome-shell" -ex "bt 25" work/gnome-qemu-rootfs/usr/bin/gnome-shell ``` -## EL MURO DE HOY — el typelib de AccountsService +## EL MURO DE HOY — los typelibs de runtime de la capa JS -``` -Gjs-CRITICAL: JS ERROR: Error: Requiring AccountsService, version 1.0: - Typelib file for namespace 'AccountsService', version '1.0' not found -Execution of main.js threw exception → gnome-shell sale con código 1 -``` +No es un cuelgue ni un crash: el compositor sube, expone `wayland-0`, y el shell sale con código 1 +porque a `imports.gi.*` le falta un typelib. Cada vez que se cierra uno, aparece el siguiente. -No es un cuelgue: es una dep de RUNTIME que falta. La receta está escrita y medida en -`recipes/incoming-gnome/accountsservice.toml` y **no sella todavía** por dos huecos de NUESTRA capa -de compatibilidad, contados símbolo por símbolo en el comentario de esa receta: ocho símbolos -`sd-*` que `libelogind` no exporta (los cinco `sd_login_monitor_*` son una API de notificación, no -getters) y `fgetspent_r`, que es extensión de glibc y musl no tiene. +**Y ESA ITERACIÓN ES INNECESARIA — la lista está declarada en el propio shell.** +`js/misc/dependencies.js` enumera EXACTAMENTE lo que el shell exige al arrancar. Cruzada contra el +rootfs hidratado, la frontera completa es de **siete typelibs**, de cinco recetas nuevas y una a +rehacer (medido, no estimado): + +| typelib | lo provee | estado | +|---|---|---| +| `GnomeDesktop-4.0`, `GnomeBG-4.0` | `gnome-desktop` | **ya sellada, pero con `-Dintrospection=false` y estática** ⇒ hace falta la variante de isla dinámica | +| `Geoclue-2.0` | geoclue | sin receta | +| `GWeather-4.0` | libgweather | sin receta | +| `IBus-1.0` | ibus | sin receta | +| `Rsvg-2.0` | librsvg | sin receta (**es Rust**) | +| `UPowerGlib-1.0` | upower | sin receta | + +Lo demás de esa lista ya está: AccountsService, Atk, Atspi, Gcr, Gdk, Gdm, Gio, GioUnix, +GDesktopEnums, GdkPixbuf, Graphene, Pango, Polkit, PolkitAgent, Soup, y los cinco de mutter/shell +(Meta, Clutter, Cogl, Shell, St). `GnomeBluetooth`, `NM`/`NMA4` y `Malcontent` son condicionales de +compilación o de runtime y no bloquean. + +**La regla que sale de acá, y es el precio de no haberla aplicado antes: cuando el muro es +`Requiring X`, no cierres X y vuelvas a arrancar — leé el fichero donde el programa DECLARA sus +dependencias de runtime y cerralas todas de una.** Cada ronda de este bucle cuesta un rebuild de +imagen y un arranque completo. + +Cerrados por este camino hasta hoy, en orden: `AccountsService` → `DBus-1.0` (que incluye `Atspi`) → +`cairo-1.0` (que incluyen `Gdk` y `Pango`) → `Gdm-1.0`. ## CÓMO CAYÓ EL MURO ANTERIOR — la hebra de input (cerrado 2026-07-29) @@ -134,12 +152,20 @@ elige `/dev/dri/card0` como primaria sin quejarse. Es el rédito directo de la c ## Lo que falta, en orden -1. **`AccountsService`** (el muro de hoy): cerrar los ocho símbolos `sd-*` en `arje-sdlogin-compat` - y `fgetspent_r`, sellar `accountsservice`, y hidratar su typelib. Ojo al costo: re-sellar - `libelogind` re-hashea todo lo que lo declara (mutter, gnome-shell, polkit…) ⇒ pasar - `yupana radio libelogind` ANTES de tocarlo. +1. **Los seis proveedores de typelib de la tabla de arriba**, en una sola tanda. `gnome-desktop` + dinámica+introspectada primero (ya está sellada, sólo cambia el modo), después geoclue, + libgweather, upower, librsvg e ibus. Ojo al costo de `libelogind`: re-sellarla re-hashea todo lo + que la declara (mutter, gnome-shell…) ⇒ pasar `yupana radio libelogind` ANTES de tocarla — ya + pasó dos veces en esta campaña. 2. **Empaquetar la política D-Bus de login1** dentro del artefacto de arje-logind-compat (hoy la escribe el script de imagen). 3. Arreglar el `identity mismatch` del `Announce` al bus del fractal (hoy sólo un WARN). 4. Con la capa JS viva: validar CON PANTALLA (`DISP=gtk`), nunca sólo por serial — regla heredada de KDE ([[metal-dual-desktop-en-curso]]). + +## Recetas nuevas de esta etapa + +`accountsservice` (b3:0328b0d0, + parche `fgetspent_r` para musl) · `gi-foreign-typelibs` +(b3:c8a4d2f8 — un `.gir` NO es un typelib: gjs resuelve contra el compilado) · `libgdm` +(b3:46fac484 — sólo la librería cliente; el demonio sigue aparcado por linux-pam). +`libelogind` pasó de 14 a 25 símbolos en tres tandas.