cosmic: la entrada anda — click y teclado por QMP; y 29 atajos caídos por UNA línea

El click sobre «Applications» abre la biblioteca (el color dominante pasa de fondo 91%
a 27,27,27 84%) y tecleando aparece «cosmic» en el buscador. Se maneja entero por QMP
con input-send-event, sin humano y sin ver la pantalla.

USB HID, no virtio-input: el kernel de hammer no trae VIRTIO_INPUT, así que
-device virtio-keyboard no crea ni un /dev/input/event*. Con qemu-xhci + usb-kbd +
usb-tablet anda, y además es lo que se va a usar en metal.

Y el hallazgo de fondo: Super no abría el lanzador TENIENDO la ligadura en el fichero.
keybindings.ron de epoch-1.5.0 liga Super+Alt+S a System(ScreenReader), acción que el
crate que lo parsea (cosmic-settings-config, rev 8c54bbbc) no tiene en su enum. RON no
ignora lo desconocido: falla el mapa entero y se caen las 29 ligaduras. El único rastro
era un WARN de cosmic-idle a 200 líneas del arranque hablando de un enum — el síntoma no
nombra ni la tecla ni el fichero. El pin lockstep fallando desde adentro de upstream.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-04 01:08:41 -04:00
co-authored by Claude Opus 5
parent cd1497d740
commit 39b91b5146
4 changed files with 70 additions and 4 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

+59 -3
View File
@@ -378,11 +378,67 @@ qemu-system-x86_64 -machine q35,accel=kvm -cpu host -smp 4 -m 4096 \
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.
## 🖱 LA ENTRADA: se usa, no sólo se ve (2026-08-04)
**Hay que usar USB HID, no virtio-input.** El kernel de hammer no trae `VIRTIO_INPUT` (mirá el
`-e …` de `recipes/linux-generic.toml`), así que `-device virtio-keyboard` no produce ni un
`/dev/input/event*`. Sí trae `USB_XHCI_HCD` + `USB_HID` + `INPUT_EVDEV`, y además es lo que se va a
usar en metal, así que la prueba es más fiel:
```
-device qemu-xhci,id=xhci -device usb-kbd,bus=xhci.0 -device usb-tablet,bus=xhci.0
```
`usb-tablet` y no `usb-mouse`: reporta coordenadas ABSOLUTAS, y QMP sólo sabe mandar eventos `abs`
(el eje va de 0 a 32767 sobre el ancho/alto de la pantalla, no en píxeles).
**Se maneja entero por QMP**, sin ver la pantalla y sin humano:
```jsonc
// mover el puntero a (155,16) — el botón «Applications»
{"execute":"input-send-event","arguments":{"events":[
{"type":"abs","data":{"axis":"x","value":3968}},
{"type":"abs","data":{"axis":"y","value":655}}]}}
// click
{"execute":"input-send-event","arguments":{"events":[{"type":"btn","data":{"down":true,"button":"left"}}]}}
{"execute":"input-send-event","arguments":{"events":[{"type":"btn","data":{"down":false,"button":"left"}}]}}
// una tecla
{"execute":"input-send-event","arguments":{"events":[
{"type":"key","data":{"down":true,"key":{"type":"qcode","data":"c"}}},
{"type":"key","data":{"down":false,"key":{"type":"qcode","data":"c"}}}]}}
```
**El veredicto también es de píxeles, y conviene medirlo por REGIÓN.** El click en *Applications*
llevó el color dominante de `(33,74,135)` (fondo, 91 %) a `(27,27,27)` (84 %): la biblioteca de
aplicaciones se abrió a pantalla casi completa. Y para el teclado, contar colores del rectángulo del
buscador (440..840 × 80..112) bastó: 155 → 118 colores al reemplazarse el placeholder por lo tecleado.
Evidencia: `cosmic-app-library-click-qemu-2026-08-04.png` y `cosmic-teclado-busqueda-qemu-2026-08-04.png`.
**La biblioteca sale vacía y está BIEN.** Los 20 `.desktop` de la imagen son `NoDisplay=true` —son
applets y componentes de sesión, no aplicaciones—, así que no hay nada que listar. Que la búsqueda no
devuelva resultados no es un fallo del escritorio: es que la distro todavía no tiene ni una sola
aplicación gráfica. Se sabrá arreglado cuando entre `cosmic-files` o un terminal.
### 🔑 El atajo que no era: 29 ligaduras caídas por UNA línea de datos
`Super` no abría el lanzador, **teniendo `(modifiers: [Super]): System(Launcher)` en el fichero**.
La causa: `data/keybindings.ron` de epoch-1.5.0 liga `Super+Alt+S` a `System(ScreenReader)`, una
acción que `cosmic-settings-config` —el crate que parsea el fichero, pineado por cargo en la rev
`8c54bbbc`— todavía no tiene en su enum. **RON no ignora lo que no conoce: falla la deserialización
del MAPA COMPLETO**, y con ella se caen las 29 ligaduras.
Lo que hace este bug difícil es cómo se presenta: apretás una tecla, no pasa nada, y el único rastro
es un `WARN` de *cosmic-idle* —ni siquiera del compositor— a doscientas líneas del arranque, hablando
de un enum. El síntoma no nombra ni la tecla, ni el fichero, ni el componente que lo sufre.
**Es el riesgo del pin lockstep asomando desde adentro de upstream**: acá el dato y el parser del
*mismo* epoch no coinciden. El fix va en el install de `cosmic-comp` y filtra esa única línea
(`grep -v 'System(ScreenReader)'`): se cae la acción que no existe, no las 28 que sí. El screen
reader no está en la imagen de todas formas.
## Lo que falta, en orden
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.
1. `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
+11 -1
View File
@@ -65,7 +65,17 @@ mkdir -p /out/usr/bin \
/out/usr/share/cosmic/com.system76.CosmicSettings.WindowRules/v1
cp target/release/cosmic-comp /out/usr/bin/cosmic-comp
chmod 755 /out/usr/bin/cosmic-comp
cp data/keybindings.ron /out/usr/share/cosmic/com.system76.CosmicSettings.Shortcuts/v1/defaults
# ⚠ SE FILTRA UNA LÍNEA, Y ES LA DIFERENCIA ENTRE 28 ATAJOS Y NINGUNO.
# `data/keybindings.ron` de epoch-1.5.0 liga Super+Alt+S a `System(ScreenReader)`, una acción que el
# crate que PARSEA el fichero —`cosmic-settings-config`, que cargo pinea en la rev 8c54bbbc— todavía
# no tiene en su enum. RON no ignora lo que no conoce: falla la deserialización del MAPA COMPLETO, y
# con ella se caen las 29 ligaduras, incluida `(modifiers: [Super]): System(Launcher)`.
# Se ve así: apretás Super, no pasa NADA, y el único rastro es un WARN de cosmic-idle a 200 líneas
# del arranque que habla de un enum. Medido: sin el filtro, Super no abre el lanzador.
# Es el riesgo del pin lockstep asomando desde adentro de upstream: el dato y el parser del MISMO
# epoch no coinciden. Se cae la acción que no existe, no las 28 que sí.
grep -v 'System(ScreenReader)' data/keybindings.ron \
> /out/usr/share/cosmic/com.system76.CosmicSettings.Shortcuts/v1/defaults
cp data/tiling-exceptions.ron /out/usr/share/cosmic/com.system76.CosmicSettings.WindowRules/v1/tiling_exception_defaults
'''