gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1471Shell 174Rust 106Markdown 953584 Sutichaykuna

⎇ fe474dab636d4f43ea912ac0144e76bb83ba3717 docs/runbooks/kde-qemu-desktop.md Markdown · 89 siq'ikuna · 4.6 KB Ñawpa willay ch'uya

docs: runbook para relanzar el escritorio KDE en QEMU a1ceaf6ff · sergio ·

1# Runbook — relanzar el escritorio KDE Plasma 6 en QEMU
2
3Plasma 6 renderizado 100% por software (QPainter + llvmpipe) sobre `virtio-gpu`, en la cadena
4soberana de hammer (LLVM 18 + mesa desde fuente). Sin GPU real. Cerrado 2026-07-20 tras resolver
55 bugs estructurales + 2 de cursor (ver [[kde-metal-qemu-desktop]] en memoria y `git log` del frente
6`kde/qemu:`). Este runbook es sólo para **relanzar y verificar**, no para rediagnosticar.
7
8## Relanzar (caso normal — la imagen ya existe)
9
10```sh
11cd ~/hammer
12# la ventana gtk necesita el X del laptop (Xwayland de mirada):
13DISPLAY=:0 GDK_BACKEND=x11 TIMEOUT=1800 DISP=gtk bash scripts/kde/run-qemu-desktop.sh
14```
15
16- Abre una ventana gtk con el virtio-gpu. Bootea UEFI → kernel → arje-zero → Plasma pinta solo (~30-45s).
17- `TIMEOUT=1800` = auto-kill a los 30 min (omitir para dejarlo indefinido; matarlo a mano con el kill de abajo).
18- `DISP=none` = headless (sólo serial, para diagnóstico sin ventana ni interferir con mirada).
19- Toda la config que lo hace funcionar (los 7 fixes) vive en `scripts/kde/plasma-start-qemu.sh`, que se
20  hornea en la imagen. No hace falta setear nada a mano.
21
22## Verificar sin mirar la ventana (oráculo screendump)
23
24La ventana gtk **se congela si mirada reinicia su Xwayland** (QEMU sigue vivo por dentro). Para ver el
25scanout REAL del guest, independiente de la ventana:
26
27```sh
28cd ~/hammer
29printf 'screendump %s/shot.ppm\n' "$PWD" | socat - unix-connect:work/qemu-monitor.sock
30magick shot.ppm /tmp/shot.png        # y abrir /tmp/shot.png ; luego: rm shot.ppm
31```
32
33Salud por el serial (no necesita la ventana):
34
35```sh
36grep -a 'STATUS +' work/qemu-desktop-serial.log | tail -3   # kwin=1 plasmashell=1 = vivo
37grep -ac 'código 139' work/qemu-desktop-serial.log          # crashes de kwin (÷3: cada línea sale x3)
38```
39
40## Matar / cerrar
41
42```sh
43pkill -KILL -f 'qemu-sys[t]em-x86_64 -machine q35'          # el [t] evita auto-matar el propio comando
44```
45
46## Reconstruir la imagen (si se tocó una receta KDE, mesa/llvm, o plasma-start)
47
48```sh
49cd ~/hammer
50bash scripts/kde/qemu-desktop-image.sh      # funde base+kde-rootfs, inyecta llvmpipe/musl, hornea plasma-start
51# necesita en store/: *-mesa-llvmpipe, *-llvm18, y los rootfs work/{metal-rootfs,kde-metal-rootfs}
52```
53
54Rebuild ~40s (host-side, hardlinks + artefactos ya sellados; **no** compila nada). Luego relanzar.
55
56## Los 7 fixes que lo hacen andar (por si algo regresa)
57
58Todos en `plasma-start-qemu.sh` salvo `-vga none` (en `run-qemu-desktop.sh`):
59
60| Fix | Sin él |
61|---|---|
62| `GBM_ALWAYS_SOFTWARE=1` | segfault al init (virtio sin 3D tratado como HW → vtable NULL) |
63| `KWIN_DRM_USE_MODIFIERS=0` | negro total (virtio rechaza `AddFB2WithModifiers` con EINVAL) |
64| `KWIN_DRM_DEVICES=<card virtio>` | doble output (efifb+virtio) rompe buffers (redundante con `-vga none`) |
65| `KWIN_COMPOSE=Q` (QPainter) | kwin segfaltea en el rasterizador llvmpipe (`lp_rast_clear_color`) |
66| `-vga none` | **pantalla clavada en TianoCore** (VGA-std por defecto + simpledrm roban el scanout) |
67| `XCURSOR_THEME=breeze_cursors` + `kcminputrc` | `Failed to load cursor theme "default"` (cursor invisible) |
68| `KWIN_FORCE_SW_CURSOR=1` | cursor aparece/desaparece (plano HW de virtio no se presenta) |
69
70## Gotchas de operación
71
72- **Lectura STALE del serial:** no se trunca hasta que el run-script arranca QEMU (tras el rebuild ~40s).
73  Un `until grep 'escritorio arriba'` matchea el run ANTERIOR. Esperá un marcador único del run nuevo:
74  `rm -f work/qemu-monitor.sock` antes de lanzar y `until [ -S work/qemu-monitor.sock ]; do sleep 2; done`.
75- **`pkill -f qemu...` se auto-mata** (el patrón matchea el propio comando) → usar siempre `qemu-sys[t]em`.
76- **"Se queda en TianoCore" tras varios relanzamientos:** el `work/qemu-desktop-OVMF_VARS.fd` persistente
77  acumula boot entries stale → `rm -f work/qemu-desktop-OVMF_VARS.fd` (el run-script lo recrea limpio).
78- **Serial triplicado:** cada línea sale ×3 (`say` tee a console+ttyS0). "139: 3" = 1 crash real.
79- El escritorio queda sólo con wallpaper+panel; sin discos/energía reales (no hay udisksd/upowerd en el
80  rootfs) ni efectos GL pesados (llvmpipe no los soporta). Es esperado, no un fallo.
81
82## Prerrequisitos
83
84- `work/hammer-kde-qemu.img` (la imagen; si falta, reconstruir arriba).
85- OVMF: `/usr/share/edk2/x64/OVMF_CODE.4m.fd` + `OVMF_VARS.4m.fd`.
86- Herramientas host: `qemu-system-x86_64`, `socat`, `magick` (ImageMagick) para el screendump.
87- Para la ventana gtk: sesión gráfica del laptop viva (`DISPLAY=:0`). Headless (`DISP=none`) no la necesita.
88
89Relacionado: memoria [[kde-metal-qemu-desktop]], [[frente-escritorio-kde]], [[arranque-grafo-mirada]].

kde-qemu-desktop.md

Runbook — relanzar el escritorio KDE Plasma 6 en QEMU

Plasma 6 renderizado 100% por software (QPainter + llvmpipe) sobre virtio-gpu, en la cadena soberana de hammer (LLVM 18 + mesa desde fuente). Sin GPU real. Cerrado 2026-07-20 tras resolver 5 bugs estructurales + 2 de cursor (ver [[kde-metal-qemu-desktop]] en memoria y git log del frente kde/qemu:). Este runbook es sólo para relanzar y verificar, no para rediagnosticar.

Relanzar (caso normal — la imagen ya existe)

cd ~/hammer
# la ventana gtk necesita el X del laptop (Xwayland de mirada):
DISPLAY=:0 GDK_BACKEND=x11 TIMEOUT=1800 DISP=gtk bash scripts/kde/run-qemu-desktop.sh

Verificar sin mirar la ventana (oráculo screendump)

La ventana gtk se congela si mirada reinicia su Xwayland (QEMU sigue vivo por dentro). Para ver el scanout REAL del guest, independiente de la ventana:

cd ~/hammer
printf 'screendump %s/shot.ppm\n' "$PWD" | socat - unix-connect:work/qemu-monitor.sock
magick shot.ppm /tmp/shot.png        # y abrir /tmp/shot.png ; luego: rm shot.ppm

Salud por el serial (no necesita la ventana):

grep -a 'STATUS +' work/qemu-desktop-serial.log | tail -3   # kwin=1 plasmashell=1 = vivo
grep -ac 'código 139' work/qemu-desktop-serial.log          # crashes de kwin (÷3: cada línea sale x3)

Matar / cerrar

pkill -KILL -f 'qemu-sys[t]em-x86_64 -machine q35'          # el [t] evita auto-matar el propio comando

Reconstruir la imagen (si se tocó una receta KDE, mesa/llvm, o plasma-start)

cd ~/hammer
bash scripts/kde/qemu-desktop-image.sh      # funde base+kde-rootfs, inyecta llvmpipe/musl, hornea plasma-start
# necesita en store/: *-mesa-llvmpipe, *-llvm18, y los rootfs work/{metal-rootfs,kde-metal-rootfs}

Rebuild ~40s (host-side, hardlinks + artefactos ya sellados; no compila nada). Luego relanzar.

Los 7 fixes que lo hacen andar (por si algo regresa)

Todos en plasma-start-qemu.sh salvo -vga none (en run-qemu-desktop.sh):

FixSin él
GBM_ALWAYS_SOFTWARE=1segfault al init (virtio sin 3D tratado como HW → vtable NULL)
KWIN_DRM_USE_MODIFIERS=0negro total (virtio rechaza AddFB2WithModifiers con EINVAL)
KWIN_DRM_DEVICES=<card virtio>doble output (efifb+virtio) rompe buffers (redundante con -vga none)
KWIN_COMPOSE=Q (QPainter)kwin segfaltea en el rasterizador llvmpipe (lp_rast_clear_color)
-vga nonepantalla clavada en TianoCore (VGA-std por defecto + simpledrm roban el scanout)
XCURSOR_THEME=breeze_cursors + kcminputrcFailed to load cursor theme "default" (cursor invisible)
KWIN_FORCE_SW_CURSOR=1cursor aparece/desaparece (plano HW de virtio no se presenta)

Gotchas de operación

Prerrequisitos

Relacionado: memoria [[kde-metal-qemu-desktop]], [[frente-escritorio-kde]], [[arranque-grafo-mirada]].