gnome: runbook — iconos/cursor cerrados, y el setuid del launch-helper era una causa con dos síntomas

Captura actualizada: ahora se ve el puntero (Adwaita) y el icono de la notificación.
Colores distintos 582 → 629.

El setuid del dbus-daemon-launch-helper explicaba DOS cosas, no una: el «permission of
the setuid helper is not correct» de colord y, por la misma vía, que ninguna activación
por bus de sistema funcionara. Con el arreglo, colord pasó de «permiso incorrecto» a
«timed out» — la activación ya se intenta y lo que queda es del demonio.

Queda UPower: upowerd arranca y sigue vivo, pero no adquiere su nombre en el bus (su
política D-Bus está verificada y permite own a root), así que el shell espera sus 25s.
Es el indicador de batería en una VM sin batería.

Y queda escrita la lección que costó una iteración: **un pid no es un servicio**.
Reportar «lanzado» sin comprobar que el daemon adquirió su nombre es reportar una
intención, no un hecho.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-29 19:02:45 -04:00
co-authored by Claude Opus 5
parent 3999b421da
commit 32926dc6df
2 changed files with 32 additions and 4 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB

+32 -4
View File
@@ -100,14 +100,42 @@ datos del demonio, es una interfaz publicada que consume otro programa.
esperar a que la imagen esté hecha Y no haya otro QEMU con el disco tomado (`Failed to get "write"
lock` es el aviso de que hay uno vivo).
### Iconos y cursor: `adwaita-icon-theme` (cerrado)
`No cursor theme available` no era cosmético: **con el cursor por software** —obligatorio en
virtio-gpu con render software— mutter dibuja la imagen que le da el tema, y sin tema el puntero se
movía invisible. Con `adwaita-icon-theme` (+ `hicolor-icon-theme`, que su `index.theme` hereda) el
cursor aparece y la notificación del shell tiene su icono. Colores distintos: 582 → 629.
Dos gotchas de esas dos recetas: **hicolor 0.18 pasó de autotools a meson** (su tarball ya no trae
`configure`, y un `./configure` heredado sale con 127), y adwaita declara `gtk-update-icon-cache`
como `required: true` para un `add_install_script` que **su propio autor marcó
`skip_if_destdir: true`** — exige un binario que en un build empaquetado no puede ejecutar. Se borran
los dos bloques; `required: false` no alcanza porque meson no propaga el disabler ahí dentro.
### El setuid del launch-helper: una causa, dos síntomas (cerrado)
`dbus-daemon-launch-helper` es el que `dbus-daemon` ejecuta para activar un servicio del bus de
SISTEMA bajo demanda, y **comprueba sus propios permisos antes de hacer nada**: si no es setuid root
se niega, y el cliente recibe `The permission of the setuid helper is not correct` — que es lo que
reportaba colord. Sin eso **ninguna** activación por bus de sistema funciona. La imagen ahora lo deja
`root:messagebus 4750`, y el síntoma de colord cambió de «permiso incorrecto» a «timed out»: la
activación ya se intenta de verdad, y lo que queda es del demonio, no del bus.
### Lo que queda, y ninguno impide el escritorio
- `Failed to activate service 'org.freedesktop.UPower': timed out` — falta lanzar `upowerd` en
`gnome-start`, como se hace con `accounts-daemon`.
- `No cursor theme available` — falta un tema de cursor (adwaita-icon-theme).
- colord no arranca: su helper setuid no tiene los permisos correctos en la imagen.
- **UPower**: `gnome-start` lanza `upowerd` y **verifica que siga vivo** (lo hace: «upowerd sigue
vivo»), pero el nombre `org.freedesktop.UPower` no aparece en el bus y el shell espera sus 25 s.
Su política D-Bus está bien (`allow own` para root, verificado en el artefacto), así que el proximo
paso es mirar el log del propio upowerd —probablemente se queda enumerando por gudev sobre
libudev-zero—. Es el indicador de batería en una VM sin batería.
- **colord**: activación por bus ya permitida, el demonio no llega a arrancar. Es gestión de color.
- `Missing required core component Settings` — es gnome-control-center, que no está en el corpus.
**Lección de las dos anteriores, que ya costó una iteración: un pid no es un servicio.** La primera
versión del lanzamiento de upowerd decía «lanzado» y el shell seguía esperando; reportar el arranque
de un daemon sin comprobar que adquirió su nombre es reportar una intención, no un hecho.
## CÓMO SE CERRÓ LA CAPA JS (2026-07-29)
Era el muro anterior, y quedó cerrado. Vale la pena dejar cómo, porque el método es reusable.