🏔 cosmic: EL ESCRITORIO ENTERO DIBUJADO — panel, dock y applets en QEMU
26/26 recetas selladas, escritorio-cosmic 62/62. La captura (895 colores) muestra el panel superior con Workspaces/Applications, reloj y los applets de a11y, audio, red, batería y encendido; el dock inferior con lanzador, workspaces y biblioteca; y el fondo en el color exacto que configura cosmic-start. 48 procesos cosmic estables a los 30s. Y CORRIGE UN DIAGNÓSTICO MÍO. Cuando el panel selló y no dibujó, lo atribuí a que le faltaban los applets. Hacían falta —sin ellos el panel está vacío— pero no eran la causa de la pantalla lisa: -device virtio-gpu-pci no reemplaza la VGA por defecto de QEMU, la SUMA. Dos cards, dos outputs, cosmic-bg pinta en los dos y el panel se ancla en uno; el screendump capturaba el otro. Log impecable, pantalla lisa. Con -vga none sale entero. Un síntoma puede tener dos causas suficientes: arreglar la primera no prueba nada. También: PATH como primera línea de cosmic-start. El getty da un PATH sin /usr/bin y en la imagen mkdir sólo vive ahí, así que los cuatro mkdir -p fallaban en silencio — gratis hoy porque los directorios venían horneados, fatal el día que cambie la imagen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
@@ -102,19 +102,15 @@ Más `cosmic-settings-daemon` y `xdg-desktop-portal-cosmic` fuera de esa lista.
|
||||
| `cosmic-osd` | ✅ sellado | `b3:f15cb9c1` |
|
||||
| `cosmic-settings-daemon` | ✅ sellado | `b3:0263288e` |
|
||||
| `cosmic-notifications` | ✅ sellado | `b3:3e2a5478` |
|
||||
| `cosmic-applets` · `cosmic-launcher` · `cosmic-app-library` · `cosmic-workspaces-epoch` | receta escrita, **build cortado a mitad** | — |
|
||||
| `cosmic-launcher` | ✅ sellado | `b3:c17b4956` |
|
||||
| `cosmic-app-library` | ✅ sellado | `b3:b2a163e7` |
|
||||
| `cosmic-workspaces-epoch` | ✅ sellado (necesitó `mesa`, ver gotcha 11) | `b3:a031249e` |
|
||||
| **`cosmic-applets`** (19 binarios en uno) | ✅ **sellado** (necesitó `dbus-shared`, ver gotcha 10) | `b3:3e53a325` |
|
||||
|
||||
**Los cuatro últimos quedaron sin sellar porque se cortó la sesión de trabajo, no porque fallaran**:
|
||||
los tres clientes venían compilando limpio y `cosmic-applets` ya había pasado el vendoreo y la dep de
|
||||
`libdbus`. Se retoman con `hammer build recipes/incoming-cosmic/<pieza>.toml --store store` — no hay
|
||||
nada que diagnosticar primero.
|
||||
**La cola está COMPLETA: 26 recetas, `escritorio-cosmic` 62/62.**
|
||||
|
||||
**El mínimo viable de una sesión son cuatro**: `cosmic-comp` + `cosmic-settings-daemon` +
|
||||
`cosmic-notifications` + `cosmic-panel` (los tres `.expect` de la tabla de arriba). Tres están
|
||||
sellados; falta notifications.
|
||||
|
||||
Y `cosmic-applets` es aparte pero no opcional para VER algo: sin sus veinte symlinks el panel arranca,
|
||||
dice «Done spawning applets» y no dibuja.
|
||||
`cosmic-notifications` + `cosmic-panel` (los tres `.expect` de la tabla de arriba).
|
||||
|
||||
**El orden no es el de la lista de arranque.** `cosmic-bg` va antes que el panel a propósito: habla
|
||||
Wayland con `smithay-client-toolkit` y **no toca libcosmic ni iced**, mientras que panel, launcher,
|
||||
@@ -312,6 +308,40 @@ cerró hoy en GNOME.
|
||||
con una fuente `Color`, que cosmic-bg soporta de fábrica — y va en el lanzador, no en el artefacto,
|
||||
porque es política de la imagen de prueba y no algo que el paquete prometa.
|
||||
|
||||
10. **`build.rs` contento ≠ linker contento: `cosmic-applets` necesita la libdbus COMPARTIDA.**
|
||||
Los applets de red, bluetooth y status-area hablan D-Bus por `libdbus-sys` (FFI a la C, no zbus
|
||||
como el resto de la suite). Declarar `dbus` a secas alcanza para que su `build.rs` pase —le basta
|
||||
el `.pc`, que el paquete del daemon trae— y el fallo aparece **una hora después, en el enlace
|
||||
final del multiplexor**: `unable to find dynamic system library 'dbus-1'`. El corpus sólo
|
||||
empaqueta `libdbus-1.a`; el `.so` vive en `dbus-shared`. Son dos preguntas distintas y las
|
||||
contestan dos herramientas distintas: pkg-config dice si la dep *existe*, el linker si hay algo
|
||||
que *enlazar*. Era la única receta de la cola que pedía la estática.
|
||||
|
||||
11. **`cosmic-workspaces` necesita `mesa`, y la dep sale de lo que el programa MUESTRA.** La vista de
|
||||
espacios de trabajo dibuja miniaturas vivas de las ventanas; el compositor se las pasa como
|
||||
DMA-BUF por `zcosmic-toplevel-info` y el cliente importa el fd con GBM ⇒ `-lgbm`. Es el único
|
||||
cliente de la suite que toca el pipeline gráfico además del compositor, así que el juego fijo de
|
||||
cuatro (`libxkbcommon`, `pkgconf`, `libudev-zero`, `libinput`) no alcanza. Corolario del gotcha
|
||||
de siempre: la dep no se deduce de la familia del paquete, se lee de lo que hace.
|
||||
|
||||
12. **DOS GPUs en QEMU = el panel dibuja en la pantalla que no mirás.** `-device virtio-gpu-pci` no
|
||||
reemplaza a la VGA por defecto de QEMU: la SUMA. El invitado ve `card0` y `card1`, cosmic-comp
|
||||
crea dos outputs (`Virtual-1` y `Unknown-1`), `cosmic-bg` pinta el fondo en ambos y el panel se
|
||||
ancla en uno solo. El `screendump` captura el otro ⇒ **fondo perfecto, panel invisible, y ni un
|
||||
solo error en el log**. Con `-vga none` el escritorio aparece entero a la primera.
|
||||
**Y esto corrige un diagnóstico anterior de este mismo runbook**: cuando el panel selló y no
|
||||
dibujó, lo atribuí a que le faltaban los applets. Los applets hacían falta —sin ellos el panel
|
||||
está vacío— pero **no eran la causa de la pantalla lisa**; la causa era la segunda GPU, que ya
|
||||
estaba ahí. Un síntoma puede tener dos causas suficientes y arreglar la primera no prueba nada:
|
||||
la prueba es la pantalla, no el razonamiento.
|
||||
|
||||
13. **`mkdir: not found` en `cosmic-start`, y la sesión arrancaba igual.** El getty entrega un PATH
|
||||
sin `/usr/bin`, y en la imagen fundida `mkdir` sólo vive ahí (`/usr/bin/mkdir → coreutils`; la
|
||||
base metal no tendió el symlink `/bin/mkdir → busybox` que sí tienen chmod, mount, sed y tee).
|
||||
Los cuatro `mkdir -p` de la preparación fallaban y **no se notaba**, porque los directorios
|
||||
venían horneados en la imagen. Es la forma más traicionera de bug: gratis hoy, fatal el día que
|
||||
alguien cambie cómo se arma la imagen. Fix: exportar `PATH` como primera línea del script.
|
||||
|
||||
## Cómo se construye
|
||||
|
||||
```sh
|
||||
@@ -320,13 +350,42 @@ cd ~/hammer
|
||||
./target/release/hammer build recipes/incoming-cosmic/<pieza>.toml --store store
|
||||
```
|
||||
|
||||
## 🏔 EL ESCRITORIO ENTERO, DIBUJADO (2026-08-04)
|
||||
|
||||
`docs/evidencia/cosmic-panel-applets-qemu-2026-08-04.png` — 1280×800, **895 colores distintos**:
|
||||
|
||||
- **panel superior** (banda `(27,27,27)`, 32 px): botones *Workspaces* y *Applications* a la
|
||||
izquierda, reloj al centro, y a la derecha los applets de accesibilidad, audio, red, batería y
|
||||
encendido;
|
||||
- **dock inferior** centrado y redondeado, con lanzador, workspaces, biblioteca de aplicaciones y
|
||||
las entradas `.desktop` del rootfs;
|
||||
- fondo `(33,74,135)` = exactamente el `Color(Single((0.13,0.29,0.53)))` que escribe `cosmic-start`.
|
||||
|
||||
48 procesos `cosmic-*` estables a los 30 s, sobre el kernel de hammer con arje-zero como PID1.
|
||||
Se reproduce así (headless y automatizable; **el `-vga none` no es opcional**, ver gotcha 12):
|
||||
|
||||
```sh
|
||||
COSMIC_MODE=session bash scripts/cosmic/qemu-desktop-image.sh
|
||||
qemu-system-x86_64 -machine q35,accel=kvm -cpu host -smp 4 -m 4096 \
|
||||
-drive if=pflash,format=raw,readonly=on,file=/usr/share/edk2/x64/OVMF_CODE.4m.fd \
|
||||
-drive if=pflash,format=raw,file=/tmp/OVMF_VARS.fd \
|
||||
-drive file=work/hammer-cosmic-qemu.img,format=raw,if=virtio \
|
||||
-vga none -device virtio-gpu-pci,xres=1280,yres=800 \
|
||||
-display none -serial file:/tmp/cosmic.serial -qmp unix:/tmp/qmp.sock,server,nowait
|
||||
# y después, por QMP: {"execute":"screendump","arguments":{"filename":"/tmp/shot.ppm"}}
|
||||
```
|
||||
|
||||
El veredicto es **contar colores distintos del PPM**, no leer el log: con dos GPUs el log salía
|
||||
impecable y la pantalla estaba lisa.
|
||||
|
||||
## Lo que falta, en orden
|
||||
|
||||
1. Cerrar `cosmic-comp`. Es el gate: sin compositor no hay escritorio que probar.
|
||||
2. El primer cliente de iced (`cosmic-panel`), que es la pregunta abierta de verdad — libcosmic con
|
||||
`winit`/`wgpu` puede pedir más de lo que pide cosmic-bg.
|
||||
3. `cosmic-settings-daemon`, `cosmic-launcher`, `cosmic-app-library`, `cosmic-notifications`,
|
||||
`cosmic-osd`, `cosmic-workspaces-epoch`, `cosmic-idle`.
|
||||
4. Imagen QEMU con `bash` + `dbus-run-session` + `hicolor-icon-theme`, y **validar CON PANTALLA**
|
||||
(`DISP=gtk` + `screendump`, contar colores distintos) — regla heredada de KDE y GNOME.
|
||||
5. `xdg-desktop-portal-cosmic` y `cosmic-greeter`, que son de la etapa siguiente.
|
||||
1. **Entrada real**: el escritorio está dibujado pero nadie probó un click ni una tecla. `virtio-tablet`
|
||||
+ `virtio-keyboard` y verificar que el launcher abre (es lo que separa «pinta» de «se usa»).
|
||||
2. `xdg-desktop-portal-cosmic` — sin él no hay captura de pantalla, ni file-chooser, ni compartir.
|
||||
3. `cosmic-settings` (el panel de control) y `cosmic-files`: la suite tiene aplicaciones y el
|
||||
catálogo todavía no.
|
||||
4. `cosmic-greeter` (hoy `cosmic-session` lo lanza y falla con ENOENT, sin consecuencias) y
|
||||
`cosmic-osd` con teclas de brillo/volumen reales.
|
||||
5. Metal: la imagen de QEMU y la de metal comparten todo menos el driver; el viaje físico es el
|
||||
mismo que el de `metal-dual-desktop-en-curso`.
|
||||
|
||||
Regular → Executable
+7
-1
@@ -7,6 +7,12 @@
|
||||
# corre ANTES, prepara el entorno, y después le pasa la posta. Cuanto menos dependa, más temprano
|
||||
# puede reportar.
|
||||
set -u
|
||||
# PATH ARRIBA DE TODO, y no es cosmético. El getty entrega un PATH que NO trae /usr/bin, y en esta
|
||||
# imagen `mkdir` sólo existe ahí (`/usr/bin/mkdir → coreutils`; la base metal no tendió el symlink
|
||||
# `/bin/mkdir → busybox` que sí tienen chmod, mount, sed y tee). Resultado: los cuatro `mkdir -p` de
|
||||
# la preparación fallaban con «mkdir: not found» y la sesión arrancaba IGUAL, porque los directorios
|
||||
# venían horneados en la imagen. Un fallo que no se cobra nada hasta que alguien cambia la imagen.
|
||||
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
|
||||
say() { echo "== cosmic-qemu :: $*" | tee -a /dev/console /dev/ttyS0 2>/dev/null; }
|
||||
dump() { echo "---- $1 ----" > /dev/ttyS0 2>/dev/null; cat "$1" > /dev/ttyS0 2>/dev/null; }
|
||||
alive() { s=$(sed -n 's/^State:[[:space:]]*//p' /proc/$1/status 2>/dev/null); case "$s" in ""|Z*) return 1;; *) return 0;; esac; }
|
||||
@@ -40,7 +46,7 @@ else
|
||||
[ -w "$XDG_RUNTIME_DIR" ] && say " ✓ ahora sí" || say " ✗ sigue sin andar"
|
||||
fi
|
||||
mkdir -p /root/.config /root/.cache /var/lib/dbus /run/dbus /tmp && chmod 1777 /tmp
|
||||
export HOME=/root SHELL=/bin/bash PATH=/usr/bin:/bin:/usr/sbin:/sbin
|
||||
export HOME=/root SHELL=/bin/bash # PATH ya salió arriba, antes del primer mkdir
|
||||
|
||||
say "kernel $(uname -r) · drm: $(ls /dev/dri 2>/dev/null | tr '\n' ' ')"
|
||||
|
||||
|
||||
Regular → Executable
Regular → Executable
Reference in New Issue
Block a user