diff --git a/docs/runbooks/cosmic-desktop.md b/docs/runbooks/cosmic-desktop.md index 751a547d..cdc1d7cb 100644 --- a/docs/runbooks/cosmic-desktop.md +++ b/docs/runbooks/cosmic-desktop.md @@ -1195,14 +1195,67 @@ error que suena a «falta la librería» cuando lo que falta es la ruta. tiempo: ese daemon está sellado y corre. Un comentario viejo manda a buscar un bloqueo que ya no existe, y eso cuesta igual que un bug. +## 🔩 EL VIAJE A METAL: qué hacer con el USB en la mano (2026-08-05) + +`scripts/cosmic/metal-desktop-image.sh` → `work/hammer-cosmic-metal.img`, quemada a `/dev/sda`. +**No es «lo mismo pero en metal»**: es la única forma de saber si ScreenCast está bien, porque el +`mesa` del corpus se construye con `-Dgallium-drivers=iris` y en QEMU ese driver nunca se usaba. + +**Validado en OVMF ANTES de quemar, y con PANTALLA** —la regla de oro que costó un USB en el primer +viaje de KDE—, con `-serial null` para simular un metal sin puerto serie: `arje-zero` PID 1, las +cuatro particiones montadas, el motd VISIBLE y el prompt `/ #` en pantalla (o sea que el getty de +`tty1` hace su trabajo). El shell responde: `iris_dri.so` presente, `/dev/dri/card0`, y +`cosmic-start` / `portal-probe` / `wireplumber` en PATH. +Evidencia: `docs/evidencia/cosmic-metal-boot-pantalla-2026-08-05.png`. + +### La secuencia en la máquina física, en orden + +```sh +ls /dev/dri # card0 + renderD128 ⇐ renderD128 es la novedad: NO existe con swrast +dmesg | grep -iE 'i915|drm' # que i915 haya hecho modeset, no simpledrm +cosmic-start # el MISMO script que corre en QEMU +# …y desde cosmic-term, dentro de la sesión: +portal-probe version # ScreenCast v5 +portal-probe screencast # ⇐ LO QUE VINIMOS A VER +``` + +**El veredicto es el `[4/4] OpenPipeWireRemote` con su fd**, no que el diálogo aparezca: eso ya +pasaba en QEMU. Si `Start` devuelve `Response: 0` y la sonda imprime `✓✓ HAY REMOTO DE PIPEWIRE`, el +frente cierra. Si vuelve a colgarse en `Start`, mirar `/tmp/cosmic-session.log`: si **ya no** aparece +`Erroneous EGL call`, entonces la causa era otra y el diagnóstico de hoy estaba incompleto. + +### Qué mirar si la pantalla queda negra + +Es el fallo que ya nos pasó una vez y tiene una causa aburrida. En orden de probabilidad: + +1. **No es un cuelgue, es el prompt invisible.** Ya está arreglado (`tty1-getty`), pero si vuelve: + los printk van a las dos consolas y el shell a una sola. +2. **`ls /usr/lib/dri`** — si sólo hay `iris_dri.so` y la GPU no es Intel, no hay GL. Esta imagen es + Intel-only a propósito; para otra máquina va la imagen dual de KDE. +3. **`cosmic-comp` sin DRM master**: `dmesg | grep -i drm` y `ls -l /dev/dri/card0`. Sin `seatd` o + sin el shim de logind el compositor no toma el master. + +### Gotchas del quemado, medidos + +- **NUNCA a un NVMe**, y **nunca por nombre**: los nombres cambian entre arranques — hoy mismo, + después del reboot, `nvme0n1` y `nvme1n1` se intercambiaron respecto de lo anotado en julio. + Identificar por `lsblk -dpo NAME,SIZE,TYPE,TRAN,MODEL` y confirmar `TRAN=usb`. +- **El progreso NO se mide con `kill -0`**: `sudo dd` corre como root, así que desde el usuario da + EPERM y parece que terminó. Se mide con `awk '{print $7}' /sys/block/sda/stat` (sectores escritos). +- **No correr `os-prober` sobre el device que estás dd-eando**: monta la partición con `grub-probe` + mientras dd la sobreescribe y el dd cae a KB/s. +- **`pkill -f ` mata su propio shell** si el patrón aparece en su cmdline (exit 144). Pasó + otra vez hoy. Usar `pgrep -x` o un patrón que no se auto-matchee. + ## Lo que falta, en orden -1. **ScreenCast: DIAGNOSTICADO Y CERRADO como frente de software.** pipewire ✅, cliente persistente - ✅ (`portal-probe`, `b3:af49d32d`), `wireplumber` ✅ (`b3:b8f3baf0`) — y **ninguno era el - bloqueo**. La causa es **EGL por software en el compositor** (`kms_swrast`, sin dmabuf), medida - por correlación de 8 ms entre el `Erroneous EGL call` de smithay y el `Paused` del backend. No es - verificable en este QEMU (sin virgl): se cierra **en metal**, donde `iris_dri.so` ya está en la - imagen. Falta correr `portal-probe filechooser`, que ya puede capturar la URI. +1. **ScreenCast: en el USB, esperando el viaje físico.** pipewire ✅, cliente persistente ✅ + (`portal-probe`, `b3:af49d32d`), `wireplumber` ✅ (`b3:b8f3baf0`) — y **ninguno era el bloqueo**. + La causa es **EGL por software en el compositor** (`kms_swrast`, sin dmabuf), medida por + correlación de 8 ms entre el `Erroneous EGL call` de smithay y el `Paused` del backend. No es + verificable en QEMU (sin virgl), así que **la imagen de metal con `iris` ya está construida, + validada en OVMF y quemada** — ver la sección del viaje. Falta bootearla (acción física) y correr + `portal-probe screencast`. Y `portal-probe filechooser`, que ya puede capturar la URI. 2. **Decidir `gvfs`** (ver la corrección de arriba: las piezas ya están selladas, lo que falta es la decisión sobre la segunda glib). Destrabaría los montajes remotos de cosmic-files y su applet. 3. **Enchufar la tienda a `.swm`**: servir `org.freedesktop.PackageKit` y encender la feature