diff --git a/docs/evidencia/cosmic-app-library-click-qemu-2026-08-04.png b/docs/evidencia/cosmic-app-library-click-qemu-2026-08-04.png new file mode 100644 index 00000000..4a3195a9 Binary files /dev/null and b/docs/evidencia/cosmic-app-library-click-qemu-2026-08-04.png differ diff --git a/docs/evidencia/cosmic-teclado-busqueda-qemu-2026-08-04.png b/docs/evidencia/cosmic-teclado-busqueda-qemu-2026-08-04.png new file mode 100644 index 00000000..3b71512c Binary files /dev/null and b/docs/evidencia/cosmic-teclado-busqueda-qemu-2026-08-04.png differ diff --git a/docs/runbooks/cosmic-desktop.md b/docs/runbooks/cosmic-desktop.md index b55d0c8f..37be2abe 100644 --- a/docs/runbooks/cosmic-desktop.md +++ b/docs/runbooks/cosmic-desktop.md @@ -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 diff --git a/recipes/incoming-cosmic/cosmic-comp.toml b/recipes/incoming-cosmic/cosmic-comp.toml index 888d0cec..2f184d2b 100644 --- a/recipes/incoming-cosmic/cosmic-comp.toml +++ b/recipes/incoming-cosmic/cosmic-comp.toml @@ -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 '''