1# mirada-compositor — el Cuerpo de carmen
2
3Un compositor Wayland teselante real, sobre [`smithay`]. Es el **Cuerpo**
4de la arquitectura Cerebro↔Cuerpo de `mirada` (ver
5`crates/modules/mirada/SDD.md`): habla el protocolo Wayland con los
6clientes, compone sus superficies y aplica la geometría que decide el
7Cerebro.
8
9Backend `winit`: corre **anidado** — una ventana dentro de tu sesión
10gráfica actual, X11 o Wayland. No toca DRM/KMS, así que es seguro de
11arrancar sin dejar la sesión.
12
13## Requisitos
14
15Hace falta una **sesión gráfica anfitriona** (X11 o Wayland) donde
16dibujar la ventana del compositor — es donde `winit` se anida. En un
17servidor *headless* (SSH a una caja sin escritorio, `XDG_SESSION_TYPE=tty`,
18sin `/dev/dri`) no hay dónde mostrar nada y el arranque aborta con un
19mensaje que lo explica.
20
21Para verlo en una caja headless: levanta un servidor X virtual y
22conéctate por VNC.
23
24```sh
25Xvfb :99 -screen 0 1280x800x24 &
26x11vnc -display :99 -localhost -nopw & # luego túnel SSH al :5900
27DISPLAY=:99 cargo run -p mirada-compositor
28```
29
30El backend nativo DRM/KMS —que pintaría directo en la pantalla sin
31sesión anfitriona— está pendiente (ver el SDD), y de todos modos
32necesitaría un `/dev/dri`.
33
34## Dos modos
35
36- **Autónomo** (por defecto) — lleva un `Desktop` (de `mirada-brain`)
37 embebido. Es un compositor teselante completo en un solo proceso.
38
39 ```sh
40 cargo run -p mirada-compositor
41 ```
42
43- **Enlazado** — el Cuerpo escucha en un socket y la app `mirada` (el
44 Cerebro GPUI) se conecta y decide la geometría.
45
46 ```sh
47 # terminal 1 — el Cuerpo
48 MIRADA_SOCKET=/tmp/mirada.sock cargo run -p mirada-compositor
49 # terminal 2 — el Cerebro
50 MIRADA_SOCKET=/tmp/mirada.sock cargo run -p mirada
51 ```
52
53## Probarlo
54
55Al arrancar imprime el `WAYLAND_DISPLAY` que abrió. Lanza cualquier
56cliente Wayland contra él:
57
58```sh
59WAYLAND_DISPLAY=wayland-1 foot # o weston-terminal, alacritty, …
60```
61
62Las ventanas se teselan solas. El teclado, con la ventana del compositor
63enfocada, maneja el escritorio con atajos `Super+…`: foco `Super+j/k`,
64ciclar layout `Super+space`, escritorios `Super+1..9`, cerrar `Super+q`.
65Cierra la ventana del compositor para salir.
66
67## Atajos de teclado
68
69Los atajos son configurables en RON: `~/.config/mirada/keymap.ron`. En
70modo autónomo, el Cuerpo lo carga al arrancar (si no existe, escribe uno
71por defecto documentado) y lo **recarga en caliente** — edita el archivo,
72guarda, y los atajos cambian sin reiniciar. En modo enlazado el keymap es
73asunto del Cerebro (la app `mirada`).
74
75```sh
76cargo run -p mirada-brain --example keymap-default # ver el formato
77```
78
79El compositor en sí no interpreta atajos: sólo intercepta las
80combinaciones que el Cerebro le pide (`GrabKeys`) y le devuelve la
81pulsada. *Qué significa* cada una lo decide `mirada-brain`. Ver el SDD.
82
83## Control externo
84
85En modo autónomo, el compositor abre un socket de control y `mirada-ctl`
86lo maneja desde la terminal — al estilo de `swaymsg`/`hyprctl`:
87
88```sh
89mirada-ctl focus-next # cambia el foco
90mirada-ctl focus-window 5 # enfoca una ventana concreta
91mirada-ctl workspace 3 # va al escritorio 3
92mirada-ctl windows # lista las ventanas
93```
94
95En modo enlazado el socket de control lo abre el Cerebro (la app
96`mirada`), no el compositor.
97
98## Qué implementa
99
100`wl_compositor`, `xdg_shell` (toplevels y popups), `wl_shm`, `wl_seat`
101(teclado) y `wl_data_device` (selección). Composición con `GlesRenderer`.
102
103Reusa `mirada-body` para la contabilidad de salidas y superficies, y
104`mirada-link` para el cable hacia un Cerebro externo. Toda la lógica
105espacial es agnóstica de Wayland y vive en los crates de
106`crates/modules/mirada/`.
107
108## Pendiente
109
110Backend nativo DRM/libinput (de ventana anidada a sesión real),
111puntero/ratón completo y aislamiento de clientes. Ver el SDD.
112
113[`smithay`]: https://github.com/Smithay/smithay
README.md
mirada-compositor — el Cuerpo de carmen
Un compositor Wayland teselante real, sobre smithay. Es el Cuerpo
de la arquitectura Cerebro↔Cuerpo de mirada (ver
crates/modules/mirada/SDD.md): habla el protocolo Wayland con los
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.
Requisitos
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.
Para verlo en una caja headless: levanta un servidor X virtual y
conéctate por VNC.
Xvfb :99 -screen 0 1280x800x24 &
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
sesión anfitriona— está pendiente (ver el SDD), y de todos modos
necesitaría un /dev/dri.
Dos modos
-
Autónomo (por defecto) — lleva un Desktop (de mirada-brain)
embebido. Es un compositor teselante completo en un solo proceso.
cargo run -p mirada-compositor
-
Enlazado — el Cuerpo escucha en un socket y la app mirada (el
Cerebro GPUI) se conecta y decide la geometría.
# terminal 1 — el Cuerpo
MIRADA_SOCKET=/tmp/mirada.sock cargo run -p mirada-compositor
# terminal 2 — el Cerebro
MIRADA_SOCKET=/tmp/mirada.sock cargo run -p mirada
Probarlo
Al arrancar imprime el WAYLAND_DISPLAY que abrió. Lanza cualquier
cliente Wayland contra él:
WAYLAND_DISPLAY=wayland-1 foot # o weston-terminal, alacritty, …
Las ventanas se teselan solas. El teclado, con la ventana del compositor
enfocada, maneja el escritorio con atajos Super+…: foco Super+j/k,
ciclar layout Super+space, escritorios Super+1..9, cerrar Super+q.
Cierra la ventana del compositor para salir.
Atajos de teclado
Los atajos son configurables en RON: ~/.config/mirada/keymap.ron. En
modo autónomo, el Cuerpo lo carga al arrancar (si no existe, escribe uno
por defecto documentado) y lo recarga en caliente — edita el archivo,
guarda, y los atajos cambian sin reiniciar. En modo enlazado el keymap es
asunto del Cerebro (la app mirada).
cargo run -p mirada-brain --example keymap-default # ver el formato
El compositor en sí no interpreta atajos: sólo intercepta las
combinaciones que el Cerebro le pide (GrabKeys) y le devuelve la
pulsada. Qué significa cada una lo decide mirada-brain. Ver el SDD.
Control externo
En modo autónomo, el compositor abre un socket de control y mirada-ctl
lo maneja desde la terminal — al estilo de swaymsg/hyprctl:
mirada-ctl focus-next # cambia el foco
mirada-ctl focus-window 5 # enfoca una ventana concreta
mirada-ctl workspace 3 # va al escritorio 3
mirada-ctl windows # lista las ventanas
En modo enlazado el socket de control lo abre el Cerebro (la app
mirada), no el compositor.
Qué implementa
wl_compositor, xdg_shell (toplevels y popups), wl_shm, wl_seat
(teclado) y wl_data_device (selección). Composición con GlesRenderer.
Reusa mirada-body para la contabilidad de salidas y superficies, y
mirada-link para el cable hacia un Cerebro externo. Toda la lógica
espacial es agnóstica de Wayland y vive en los crates de
crates/modules/mirada/.
Pendiente
Backend nativo DRM/libinput (de ventana anidada a sesión real),
puntero/ratón completo y aislamiento de clientes. Ver el SDD.