gioser

tawasuyu/brahman

Rust 334TOML 129Markdown 39JSON 174745 Sutichaykuna

⎇ 90bffec3f169c244946d37d6a2a6d02805e52973 crates/apps/mirada-compositor/README.md Markdown · 137 siq'ikuna · 4.8 KB Ñawpa willay ch'uya

feat(mirada): mover/redimensionar ventanas con el ratón 90bffec3f · sergio ·

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
9Tiene **dos backends gráficos**:
10
11- **`winit`** — corre **anidado**, como una ventana dentro de tu sesión
12  gráfica actual (X11 o Wayland). Para desarrollar y probar sin dejar el
13  escritorio.
14- **`drm`** — corre **nativo** sobre una TTY, sin sesión anfitriona:
15  toma la GPU (DRM/KMS/GBM/EGL), el teclado (`libinput`) y la pantalla
16  entera. Es carmen como tu escritorio de verdad.
17
18Sin argumentos elige solo: con `DISPLAY`/`WAYLAND_DISPLAY` → `winit`;
19sin ellos → `drm`. O fuérzalo: `mirada-compositor --winit` / `--drm`.
20
21## Backends
22
23### winit — anidado
24
25```sh
26cargo run -p mirada-compositor -- --winit
27```
28
29Necesita una sesión gráfica anfitriona (X11 o Wayland) donde dibujar su
30ventana; sin ella aborta con un mensaje que lo explica.
31
32### drm — nativo sobre TTY
33
34```sh
35cargo run -p mirada-compositor -- --drm
36```
37
38Corre directo sobre el hardware. Requiere una **TTY** (`Ctrl+Alt+F3`),
39una GPU con `/dev/dri`, y `seatd` o `logind` para la sesión. Toma la
40pantalla completa; sal con `Super+Shift+e` o `Ctrl+C`.
41
42Lleva teclado y ratón por `libinput`: el ratón mueve un cursor de
43software, el foco sigue al puntero y los clics y la rueda llegan a la
44ventana que tienes debajo. **`Super`+arrastre** con el botón izquierdo
45mueve una ventana, con el derecho la redimensiona — al arrastrarla, la
46ventana pasa a flotar.
47
48- `MIRADA_STARTUP=<cmd>` — lanza una app al arrancar (`MIRADA_STARTUP=foot`).
49- `MIRADA_DRM_TIMEOUT=<s>` — cierra el compositor solo tras N segundos
50  (0 o sin definir = sin tope).
51
52## Dos modos
53
54- **Autónomo** (por defecto) — lleva un `Desktop` (de `mirada-brain`)
55  embebido. Es un compositor teselante completo en un solo proceso.
56
57  ```sh
58  cargo run -p mirada-compositor
59  ```
60
61- **Enlazado** — el Cuerpo escucha en un socket y la app `mirada` (el
62  Cerebro GPUI) se conecta y decide la geometría.
63
64  ```sh
65  # terminal 1 — el Cuerpo
66  MIRADA_SOCKET=/tmp/mirada.sock cargo run -p mirada-compositor
67  # terminal 2 — el Cerebro
68  MIRADA_SOCKET=/tmp/mirada.sock cargo run -p mirada
69  ```
70
71## Probarlo
72
73Al arrancar imprime el `WAYLAND_DISPLAY` que abrió. Lanza cualquier
74cliente Wayland contra él:
75
76```sh
77WAYLAND_DISPLAY=wayland-1 foot      # o weston-terminal, alacritty, …
78```
79
80Las ventanas se teselan solas. El teclado, con la ventana del compositor
81enfocada, maneja el escritorio con atajos `Super+…`: foco `Super+j/k`,
82los 7 layouts en `Super+t/m/g/c/r/d/s` (o ciclar con `Super+space`), área
83maestra `Super+h/l`, `nmaster` `Super+,/.`, promover a maestra
84`Super+Return`, escritorios `Super+1..9`, cerrar `Super+q`. Cierra la
85ventana del compositor para salir.
86
87## Atajos de teclado
88
89Los atajos son configurables en RON: `~/.config/mirada/keymap.ron`. En
90modo autónomo, el Cuerpo lo carga al arrancar (si no existe, escribe uno
91por defecto documentado) y lo **recarga en caliente** — edita el archivo,
92guarda, y los atajos cambian sin reiniciar. En modo enlazado el keymap es
93asunto del Cerebro (la app `mirada`).
94
95```sh
96cargo run -p mirada-brain --example keymap-default   # ver el formato
97```
98
99El compositor en sí no interpreta atajos: sólo intercepta las
100combinaciones que el Cerebro le pide (`GrabKeys`) y le devuelve la
101pulsada. *Qué significa* cada una lo decide `mirada-brain`. Ver el SDD.
102
103## Control externo
104
105En modo autónomo, el compositor abre un socket de control y `mirada-ctl`
106lo maneja desde la terminal — al estilo de `swaymsg`/`hyprctl`:
107
108```sh
109mirada-ctl focus-next            # cambia el foco
110mirada-ctl focus-window 5        # enfoca una ventana concreta
111mirada-ctl workspace 3           # va al escritorio 3
112mirada-ctl windows               # lista las ventanas
113```
114
115En modo enlazado el socket de control lo abre el Cerebro (la app
116`mirada`), no el compositor.
117
118## Qué implementa
119
120`wl_compositor`, `xdg_shell` (toplevels y popups), `wl_shm`, `wl_seat`
121(teclado, y ratón en el backend DRM), `wl_output`, `wl_data_device`
122(selección) y `xdg-decoration` — fuerza decoración del servidor y no
123dibuja ninguna, así las ventanas van sin barra de título. Composición
124con `GlesRenderer` — en `winit` sobre la ventana, en `drm` con un
125`DrmCompositor` por salida.
126
127Reusa `mirada-body` para la contabilidad de salidas y superficies, y
128`mirada-link` para el cable hacia un Cerebro externo. Toda la lógica
129espacial es agnóstica de Wayland y vive en los crates de
130`crates/modules/mirada/`.
131
132## Pendiente
133
134Del backend DRM: conmutación de VT, hotplug de monitores, multi-GPU.
135Puntero en el backend `winit`. Aislamiento de clientes. Ver el SDD.
136
137[`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.

Tiene dos backends gráficos:

Sin argumentos elige solo: con DISPLAY/WAYLAND_DISPLAY → winit; sin ellos → drm. O fuérzalo: mirada-compositor --winit / --drm.

Backends

winit — anidado

cargo run -p mirada-compositor -- --winit

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

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.

Lleva teclado y ratón por libinput: el ratón mueve un cursor de software, el foco sigue al puntero y los clics y la rueda llegan a la ventana que tienes debajo. Super+arrastre con el botón izquierdo mueve una ventana, con el derecho la redimensiona — al arrastrarla, la ventana pasa a flotar.

Dos modos

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, los 7 layouts en Super+t/m/g/c/r/d/s (o ciclar con Super+space), área maestra Super+h/l, nmaster Super+,/., promover a maestra Super+Return, 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 ratón en el backend DRM), wl_output, wl_data_device (selección) y xdg-decoration — fuerza decoración del servidor y no dibuja ninguna, así las ventanas van sin barra de título. 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 espacial es agnóstica de Wayland y vive en los crates de crates/modules/mirada/.

Pendiente

Del backend DRM: conmutación de VT, hotplug de monitores, multi-GPU. Puntero en el backend winit. Aislamiento de clientes. Ver el SDD.