feat(mirada): sesión de escritorio — autostart y conmutación de VT

Dos piezas para usar carmen como tu escritorio de verdad.

Conmutación de VT — `Ctrl+Alt+Fn` salta a otra TTY y vuelve sin romper
la sesión. El `SessionEvent` de `libseat` ahora hace trabajo de verdad:
- al ceder la VT, pausa el `DrmDevice` y suspende `libinput`; `render()`
  no vuelve a tocar la GPU mientras la sesión esté cedida (`active`).
- al recuperarla, reanuda `libinput`, reactiva el `DrmDevice`, llama a
  `DrmCompositor::reset_state` y repinta.
`DrmState` conserva ahora `drm` y un clon del contexto `libinput`.

Sesión — `~/.config/mirada/autostart` (un comando por línea, `#`
comenta) se lanza al arrancar el backend DRM, vía un `spawn_autostart`
que reusa `spawn_command`. Y `session/`: el script `mirada-session`
(fija el entorno XDG y exec del compositor) y `carmen.desktop` para
registrarlo en un gestor de login, más un `autostart.example`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-21 04:31:55 +00:00
parent 58e72c3d08
commit 5ede927d34
8 changed files with 172 additions and 8 deletions
+9 -1
View File
@@ -214,13 +214,21 @@ Cerebro: **autónomo** (`Desktop` embebido) o **enlazado** (`MIRADA_SOCKET`
la ventana ahí (`Workspace::set_floating`). Cada ventana lleva un marco
de 2 px (4 `SolidColorBuffer` por ventana, `Id` estable): azul si tiene
el foco, gris si no.
- **Conmutación de VT** — `Ctrl+Alt+Fn` salta a otra TTY: el
`SessionEvent` de `libseat` pausa el `DrmDevice` y suspende `libinput`;
al volver, los reactiva, llama a `DrmCompositor::reset_state` y
repinta. Mientras está cedida, `render()` no toca la GPU.
- **Sesión** — `~/.config/mirada/autostart` (un comando por línea) se
lanza al arrancar el backend DRM; el script `session/mirada-session` y
`session/carmen.desktop` integran carmen con un gestor de login.
**Pendiente** — refinamientos del Cuerpo:
| capa pendiente | rol |
| ---------------- | ------------------------------------------------------------ |
| puntero en `winit` | ratón en el backend anidado (hoy sólo el backend DRM) |
| `mirada-input` | repetición de teclas, gestos; conmutación de VT, hotplug |
| `mirada-input` | repetición de teclas, gestos; hotplug de monitores |
| barra de estado | `wlr-layer-shell` + un cliente que dibuje la barra |
| `mirada-sandbox` | aislamiento de clientes sobre `arje-incarnate` |
CRIU (congelar/restaurar ventanas) queda anotado como futuro.