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:
@@ -6,30 +6,42 @@ de la arquitectura Cerebro↔Cuerpo de `mirada` (ver
|
|||||||
clientes, compone sus superficies y aplica la geometría que decide el
|
clientes, compone sus superficies y aplica la geometría que decide el
|
||||||
Cerebro.
|
Cerebro.
|
||||||
|
|
||||||
Backend `winit`: corre **anidado** — una ventana dentro de tu sesión
|
Tiene **dos backends gráficos**:
|
||||||
gráfica actual, X11 o Wayland. No toca DRM/KMS, así que es seguro de
|
|
||||||
arrancar sin dejar la sesión.
|
|
||||||
|
|
||||||
## 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
|
Sin argumentos elige solo: con `DISPLAY`/`WAYLAND_DISPLAY` → `winit`;
|
||||||
dibujar la ventana del compositor — es donde `winit` se anida. En un
|
sin ellos → `drm`. O fuérzalo: `mirada-compositor --winit` / `--drm`.
|
||||||
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.
|
|
||||||
|
|
||||||
Para verlo en una caja headless: levanta un servidor X virtual y
|
## Backends
|
||||||
conéctate por VNC.
|
|
||||||
|
### winit — anidado
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
Xvfb :99 -screen 0 1280x800x24 &
|
cargo run -p mirada-compositor -- --winit
|
||||||
x11vnc -display :99 -localhost -nopw & # luego túnel SSH al :5900
|
|
||||||
DISPLAY=:99 cargo run -p mirada-compositor
|
|
||||||
```
|
```
|
||||||
|
|
||||||
El backend nativo DRM/KMS —que pintaría directo en la pantalla sin
|
Necesita una sesión gráfica anfitriona (X11 o Wayland) donde dibujar su
|
||||||
sesión anfitriona— está pendiente (ver el SDD), y de todos modos
|
ventana; sin ella aborta con un mensaje que lo explica.
|
||||||
necesitaría un `/dev/dri`.
|
|
||||||
|
### 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
|
## Dos modos
|
||||||
|
|
||||||
@@ -100,7 +112,9 @@ En modo enlazado el socket de control lo abre el Cerebro (la app
|
|||||||
## Qué implementa
|
## Qué implementa
|
||||||
|
|
||||||
`wl_compositor`, `xdg_shell` (toplevels y popups), `wl_shm`, `wl_seat`
|
`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
|
Reusa `mirada-body` para la contabilidad de salidas y superficies, y
|
||||||
`mirada-link` para el cable hacia un Cerebro externo. Toda la lógica
|
`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
|
## Pendiente
|
||||||
|
|
||||||
Backend nativo DRM/libinput (de ventana anidada a sesión real),
|
Del backend DRM: puntero/ratón (hoy sólo teclado), conmutación de VT,
|
||||||
puntero/ratón completo y aislamiento de clientes. Ver el SDD.
|
hotplug de monitores. Aislamiento de clientes. Ver el SDD.
|
||||||
|
|
||||||
[`smithay`]: https://github.com/Smithay/smithay
|
[`smithay`]: https://github.com/Smithay/smithay
|
||||||
|
|||||||
@@ -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`).
|
manual) y `mirada-ctl` (CLI, probado vía el ejemplo `headless-ctl`).
|
||||||
|
|
||||||
El **Cuerpo** ya existe: `mirada-compositor` es un compositor Wayland
|
El **Cuerpo** ya existe: `mirada-compositor` es un compositor Wayland
|
||||||
teselante real sobre `smithay`, con backend `winit` — corre **anidado**
|
teselante real sobre `smithay`. Habla `wl_compositor`/`xdg_shell`/
|
||||||
como una ventana dentro de la sesión gráfica actual. Habla
|
`wl_shm`/`wl_seat`/`wl_output`/`wl_data_device`, compone las superficies
|
||||||
`wl_compositor`/`xdg_shell`/`wl_shm`/`wl_seat`/`wl_data_device`, compone
|
de los clientes con `GlesRenderer` y aplica la geometría del Cerebro.
|
||||||
las superficies de los clientes con `GlesRenderer` y aplica la geometría
|
Reusa `mirada-body` (contabilidad) y `mirada-link` (cable). Dos modos de
|
||||||
del Cerebro. Reusa `mirada-body` (contabilidad) y `mirada-link` (cable).
|
Cerebro: **autónomo** (`Desktop` embebido) o **enlazado** (`MIRADA_SOCKET`
|
||||||
Dos modos: **autónomo** (Cerebro `Desktop` embebido, un solo proceso) o
|
→ la app `mirada`).
|
||||||
**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`.
|
|
||||||
|
|
||||||
**Pendiente** — refinamientos del Cuerpo, no verificables en modo
|
**Dos backends gráficos** (`main()` elige; `--winit`/`--drm` lo fuerzan):
|
||||||
desatendido:
|
|
||||||
|
- **`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 |
|
| capa pendiente | rol |
|
||||||
| -------------------- | -------------------------------------------------------- |
|
| ---------------- | ------------------------------------------------------------ |
|
||||||
| backend DRM/libinput | de `winit` anidado a sesión nativa: superficies KMS, GPU |
|
| puntero en `drm` | ratón/touchpad por `libinput` (hoy el backend DRM sólo teclado) |
|
||||||
| `mirada-input` | puntero/ratón completo, repetición de teclas, gestos |
|
| `mirada-input` | repetición de teclas, gestos; conmutación de VT, hotplug |
|
||||||
| `mirada-sandbox` | aislamiento de clientes sobre `arje-incarnate` |
|
| `mirada-sandbox` | aislamiento de clientes sobre `arje-incarnate` |
|
||||||
|
|
||||||
CRIU (congelar/restaurar ventanas) queda anotado como futuro.
|
CRIU (congelar/restaurar ventanas) queda anotado como futuro.
|
||||||
|
|||||||
Reference in New Issue
Block a user