docs(mirada): el backend DRM funciona — README y SDD al día

mirada-compositor tiene dos backends: winit (anidado) y drm (nativo
sobre TTY, verificado en hardware). README con la selección de backend,
los requisitos de cada uno y MIRADA_STARTUP/MIRADA_DRM_TIMEOUT; SDD con
la estructura del backend DRM. Pendiente: puntero en DRM, VT switch,
hotplug.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-21 03:08:46 +00:00
parent 84f94574f1
commit c07356d8bc
2 changed files with 54 additions and 36 deletions
+34 -20
View File
@@ -6,30 +6,42 @@ de la arquitectura Cerebro↔Cuerpo de `mirada` (ver
clientes, compone sus superficies y aplica la geometría que decide el
Cerebro.
Backend `winit`: corre **anidado** — una ventana dentro de tu sesión
gráfica actual, X11 o Wayland. No toca DRM/KMS, así que es seguro de
arrancar sin dejar la sesión.
Tiene **dos backends gráficos**:
## Requisitos
- **`winit`** — corre **anidado**, como una ventana dentro de tu sesión
gráfica actual (X11 o Wayland). Para desarrollar y probar sin dejar el
escritorio.
- **`drm`** — corre **nativo** sobre una TTY, sin sesión anfitriona:
toma la GPU (DRM/KMS/GBM/EGL), el teclado (`libinput`) y la pantalla
entera. Es carmen como tu escritorio de verdad.
Hace falta una **sesión gráfica anfitriona** (X11 o Wayland) donde
dibujar la ventana del compositor — es donde `winit` se anida. En un
servidor *headless* (SSH a una caja sin escritorio, `XDG_SESSION_TYPE=tty`,
sin `/dev/dri`) no hay dónde mostrar nada y el arranque aborta con un
mensaje que lo explica.
Sin argumentos elige solo: con `DISPLAY`/`WAYLAND_DISPLAY``winit`;
sin ellos → `drm`. O fuérzalo: `mirada-compositor --winit` / `--drm`.
Para verlo en una caja headless: levanta un servidor X virtual y
conéctate por VNC.
## Backends
### winit — anidado
```sh
Xvfb :99 -screen 0 1280x800x24 &
x11vnc -display :99 -localhost -nopw & # luego túnel SSH al :5900
DISPLAY=:99 cargo run -p mirada-compositor
cargo run -p mirada-compositor -- --winit
```
El backend nativo DRM/KMS —que pintaría directo en la pantalla sin
sesión anfitriona— está pendiente (ver el SDD), y de todos modos
necesitaría un `/dev/dri`.
Necesita una sesión gráfica anfitriona (X11 o Wayland) donde dibujar su
ventana; sin ella aborta con un mensaje que lo explica.
### drm — nativo sobre TTY
```sh
cargo run -p mirada-compositor -- --drm
```
Corre directo sobre el hardware. Requiere una **TTY** (`Ctrl+Alt+F3`),
una GPU con `/dev/dri`, y `seatd` o `logind` para la sesión. Toma la
pantalla completa; sal con `Super+Shift+e` o `Ctrl+C`.
- `MIRADA_STARTUP=<cmd>` — lanza una app al arrancar (`MIRADA_STARTUP=foot`).
- `MIRADA_DRM_TIMEOUT=<s>` — cierra el compositor solo tras N segundos
(0 o sin definir = sin tope).
## Dos modos
@@ -100,7 +112,9 @@ En modo enlazado el socket de control lo abre el Cerebro (la app
## Qué implementa
`wl_compositor`, `xdg_shell` (toplevels y popups), `wl_shm`, `wl_seat`
(teclado) y `wl_data_device` (selección). Composición con `GlesRenderer`.
(teclado), `wl_output` y `wl_data_device` (selección). Composición con
`GlesRenderer` — en `winit` sobre la ventana, en `drm` con un
`DrmCompositor` por salida.
Reusa `mirada-body` para la contabilidad de salidas y superficies, y
`mirada-link` para el cable hacia un Cerebro externo. Toda la lógica
@@ -109,7 +123,7 @@ espacial es agnóstica de Wayland y vive en los crates de
## Pendiente
Backend nativo DRM/libinput (de ventana anidada a sesión real),
puntero/ratón completo y aislamiento de clientes. Ver el SDD.
Del backend DRM: puntero/ratón (hoy sólo teclado), conmutación de VT,
hotplug de monitores. Aislamiento de clientes. Ver el SDD.
[`smithay`]: https://github.com/Smithay/smithay
+20 -16
View File
@@ -183,23 +183,27 @@ apps `mirada` y `mirada-compositor` (compilan; verificación visual
manual) y `mirada-ctl` (CLI, probado vía el ejemplo `headless-ctl`).
El **Cuerpo** ya existe: `mirada-compositor` es un compositor Wayland
teselante real sobre `smithay`, con backend `winit` — corre **anidado**
como una ventana dentro de la sesión gráfica actual. Habla
`wl_compositor`/`xdg_shell`/`wl_shm`/`wl_seat`/`wl_data_device`, compone
las superficies de los clientes con `GlesRenderer` y aplica la geometría
del Cerebro. Reusa `mirada-body` (contabilidad) y `mirada-link` (cable).
Dos modos: **autónomo** (Cerebro `Desktop` embebido, un solo proceso) o
**enlazado** (`MIRADA_SOCKET` → la app `mirada` decide la geometría).
Compila y pasa clippy; verificación visual manual — ver
`crates/apps/mirada-compositor/README.md`.
teselante real sobre `smithay`. Habla `wl_compositor`/`xdg_shell`/
`wl_shm`/`wl_seat`/`wl_output`/`wl_data_device`, compone las superficies
de los clientes con `GlesRenderer` y aplica la geometría del Cerebro.
Reusa `mirada-body` (contabilidad) y `mirada-link` (cable). Dos modos de
Cerebro: **autónomo** (`Desktop` embebido) o **enlazado** (`MIRADA_SOCKET`
→ la app `mirada`).
**Pendiente** — refinamientos del Cuerpo, no verificables en modo
desatendido:
**Dos backends gráficos** (`main()` elige; `--winit`/`--drm` lo fuerzan):
| capa pendiente | rol |
| -------------------- | -------------------------------------------------------- |
| backend DRM/libinput | de `winit` anidado a sesión nativa: superficies KMS, GPU |
| `mirada-input` | puntero/ratón completo, repetición de teclas, gestos |
| `mirada-sandbox` | aislamiento de clientes sobre `arje-incarnate` |
- **`winit`** — corre anidado, una ventana en la sesión gráfica actual.
- **`drm`** (`drm_backend.rs`) — corre nativo sobre una TTY, sin sesión
anfitriona: `libseat` (sesión), `udev` (GPU), `DrmDevice` + GBM + EGL +
`DrmCompositor`, `libinput` (teclado), bucle `calloop`. Verificado en
hardware: sesión, render, teclado, atajos, clientes, salida limpia.
**Pendiente** — refinamientos del Cuerpo:
| capa pendiente | rol |
| ---------------- | ------------------------------------------------------------ |
| puntero en `drm` | ratón/touchpad por `libinput` (hoy el backend DRM sólo teclado) |
| `mirada-input` | repetición de teclas, gestos; conmutación de VT, hotplug |
| `mirada-sandbox` | aislamiento de clientes sobre `arje-incarnate` |
CRIU (congelar/restaurar ventanas) queda anotado como futuro.