evidencia: el panel de Plasma con iconos, y el lanzador que NO abre por un módulo QML

Verificado en QEMU tras declarar `breeze-icons`: el panel pasa de «reloj solo» a completo —
kickoff, gestor de tareas, bandeja (notificaciones, volumen, teclado, red), reloj y mostrar
escritorio. Confirma que el panel nunca estuvo roto: no tenía iconos que dibujar. Y el mensaje
`kf.iconthemes: Icon theme "breeze" not found` desapareció del log.

⚠ CORRIJO una atribución del commit anterior (d69c437): dije que la barra derecha vacía de la
captura de GNOME era el mismo hueco de iconos, y NO lo es — `scripts/gnome/hydrate-gnome.sh` SÍ
hidrata `adwaita-icon-theme`, así que ese rootfs tenía tema. El hueco de GNOME es real pero está
en el PERFIL (`targets.toml`, que es lo que define la imagen enviable), no en aquella corrida;
la barra derecha vacía tiene otra causa, sin diagnosticar.

Y la segunda captura es un hallazgo nuevo, encontrado haciendo CLIC en el lanzador desde el
monitor de QEMU:

    kickoff/main.qml:191:25: Type FullRepresentation unavailable
    Header.qml:18:1: module "org.kde.coreaddons" is not installed

`kcoreaddons.toml` pasa `-DKCOREADDONS_USE_QML=OFF` ⇒ el módulo QML no se construye ⇒ **el menú
de aplicaciones no abre**. `yupana radio kcoreaddons` = 71: prenderlo es campaña de granja.

El barrido que lo generaliza (cruzar los `import` de los `.qml` instalados contra los módulos con
`qmldir` del rootfs) encontró además `org.kde.kscreenlocker` y `org.kde.newstuff.core`.

El runbook queda con las tres piezas que hacen falta en gioser, que no tiene ni ventana ni socat:
STAGE en el volumen (o EXDEV), monitor por socket unix desde python, y cómo hacer CLIC con un
ratón RELATIVO (fijar contra una esquina y moverse desde ahí).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YGXe6mShYYw6V8ea1dQ13u
This commit is contained in:
Sergio
2026-09-03 21:32:46 +00:00
co-authored by Claude Opus 5
parent ee21787713
commit e04fdf4599
3 changed files with 71 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 505 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 KiB

+71
View File
@@ -87,3 +87,74 @@ Todos en `plasma-start-qemu.sh` salvo `-vga none` (en `run-qemu-desktop.sh`):
- Para la ventana gtk: sesión gráfica del laptop viva (`DISPLAY=:0`). Headless (`DISP=none`) no la necesita.
Relacionado: memoria [[kde-metal-qemu-desktop]], [[frente-escritorio-kde]], [[arranque-grafo-mirada]].
## 2026-09-03 — verificar el escritorio SIN humano delante (gioser, TCG, sin socat)
Este runbook asumía el laptop: `DISP=gtk` para ver la ventana y `socat` para el monitor. En **gioser
no hay ninguna de las dos cosas** —es un vServer sin `/dev/kvm` y sin `socat`— y aun así se puede
verificar todo, incluido **hacer clic**. Las tres piezas:
```sh
# 1. la imagen y el rootfs viven en el VOLUMEN (/mnt/vvv está al 98%), y el STAGE también:
# sin STAGE= el install-image-efi hardlinkea de /mnt/cosecha a work/ y muere con EXDEV.
E=/mnt/cosecha/escritorios
BASE=$E/base-rootfs KDE=$E/kde-rootfs MERGED=$E/kde-qemu-rootfs \
IMG=$E/hammer-kde-qemu.img STAGE=$E/.stage-kde bash scripts/kde/qemu-desktop-image.sh
# 2. arrancar headless (cae solo a TCG: gioser no tiene KVM; Plasma pinta en ~2 min)
IMG=$E/hammer-kde-qemu.img SERIAL=work/kde-qemu-serial.log MON=work/kde-monitor.sock \
VARS=work/kde-OVMF_VARS.fd TIMEOUT=1200 DISP=none bash scripts/kde/run-qemu-desktop.sh &
```
3. el monitor de QEMU **por socket unix desde python**, que reemplaza a `socat`:
```python
import socket, time
s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM); s.connect('work/kde-monitor.sock')
time.sleep(.5); s.recv(65536)
def cmd(c, p=.6):
s.sendall((c+'\n').encode()); time.sleep(p)
try: s.recv(200000)
except: pass
cmd('screendump /mnt/cosecha/escritorios/shot.ppm', 4) # el scanout REAL del guest
```
### Hacer CLIC sin ventana — y por qué el ratón es relativo
`info mice` dice `QEMU PS/2 Mouse`: **movimiento RELATIVO**, así que no hay «ir a (x,y)». La
maniobra que sí funciona es **fijar contra una esquina** y moverse desde ahí:
```python
cmd('mouse_move -3000 3000', 2) # clava el puntero en la esquina INFERIOR IZQUIERDA
cmd('mouse_move 10 -8', 1) # y desde la esquina, al lanzador del panel
cmd('mouse_button 1', .5); cmd('mouse_button 0', 8)
```
`sendkey` también anda (`sendkey alt-f2`, `sendkey k`, …) y **la combinación arranca krunner** —se ve
en el log de kwin— pero **la ventana de krunner no llegó a pintar** en dos intentos. Queda anotado
como pendiente propio, separado del bug de abajo.
### Lo que estas dos herramientas destaparon el 2026-09-03
1. **El panel salía con el reloj y nada más, y no era el panel: eran los ICONOS.** Los `.so` de
todos los applets estaban instalados; lo que faltaba era `breeze-icons`. Ver el commit
«escritorios: KDE y GNOME corrían SIN tema de iconos». Evidencia:
`../evidencia/plasma6-qemu-2026-09-03-panel-con-iconos.png` — kickoff, gestor de tareas, bandeja
(notificaciones, volumen, teclado, red), reloj y «mostrar escritorio», todos pintando.
2. **El lanzador de aplicaciones NO ABRE**, y el diálogo de error lo dice entero:
```
qrc:/qt/qml/plasma/applet/org/kde/plasma/kickoff/main.qml:191:25: Type FullRepresentation unavailable
.../Header.qml:18:1: module "org.kde.coreaddons" is not installed
```
`recipes/incoming-kde/kcoreaddons.toml` pasa `-DKCOREADDONS_USE_QML=OFF` (la cabecera lo dice:
«QML bindings / python / docs apagados»), así que el módulo QML `org.kde.coreaddons` no se
construye. Evidencia: `../evidencia/plasma6-qemu-2026-09-03-kickoff-sin-coreaddons.png`.
**`yupana radio kcoreaddons` = 71**, o sea que prenderlo es una campaña de granja, no un ticket.
**Regla que sale de las dos:** una captura donde el escritorio «pinta» NO prueba que el escritorio
funcione. El barrido barato que sí lo prueba es cruzar los `import` de los `.qml` instalados contra
los módulos QML con `qmldir` que hay en el rootfs; así salió `org.kde.coreaddons` y, de yapa,
`org.kde.kscreenlocker` y `org.kde.newstuff.core`, que también faltan.