diff --git a/crates/apps/mirada-compositor/README.md b/crates/apps/mirada-compositor/README.md index 11575ad..a7d68ae 100644 --- a/crates/apps/mirada-compositor/README.md +++ b/crates/apps/mirada-compositor/README.md @@ -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=` — lanza una app al arrancar (`MIRADA_STARTUP=foot`). +- `MIRADA_DRM_TIMEOUT=` — 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 diff --git a/crates/modules/mirada/SDD.md b/crates/modules/mirada/SDD.md index a25604a..4b843c6 100644 --- a/crates/modules/mirada/SDD.md +++ b/crates/modules/mirada/SDD.md @@ -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.