🎥 cosmic: ScreenCast — dos bloqueos, y el que importa es que NADIE ARRANCA PIPEWIRE

BLOQUEO 1: dbus-send no puede manejarlo, al revés que FileChooser. El
selector se abre con UNA llamada; ScreenCast necesita un handshake de tres
pasos con estado (CreateSession → SelectSources → Start) y la sesión queda
atada a la CONEXIÓN que la creó — cada dbus-send es una conexión distinta
que muere al terminar, así que el paso 2 nunca encuentra la sesión del paso
1. Es límite de la herramienta, no del portal.

Lo que sí se midió: CreateSession FUNCIONA. El frontend devuelve
/org/freedesktop/portal/desktop/request/1_106/sc1 con nuestro handle_token.

BLOQUEO 2, y éste no lo arregla ningún cliente: NO HAY DEMONIO DE PIPEWIRE.

  ls /usr/bin/ | grep -i pipewire  →  pipewire, pipewire-aes67,
                                      pipewire-avb, pipewire-pulse
  ps ax | grep -c pipewire         →  1   (el propio grep)

Los binarios están —el backend del portal enlaza libpipewire-0.3.so— pero el
demonio no corre: cosmic-start no lo lanza y no hay systemd de usuario. O
sea que aunque se escribiera el cliente ashpd, Start no tendría con quién
negociar el stream. Arreglo: lanzarlo desde cosmic-start. Para AUDIO además
falta wireplumber, que ni está construido.

Y se corrigió un comentario DESACTUALIZADO de cosmic-start que decía que
cosmic-settings-daemon «todavía no se puede construir acá (arrastra
pipewire)»: es falso hace tiempo, ese daemon está sellado y corre. Un
comentario viejo manda a buscar un bloqueo que ya no existe, y eso cuesta
igual que un bug.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-05 07:51:36 -04:00
co-authored by Claude Opus 5
parent 5f606111d1
commit 2e26a45060
3 changed files with 49 additions and 6 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

+34 -2
View File
@@ -940,10 +940,42 @@ así que ya no está para recibirla; `dbus-monitor` con un match rule normal tam
pide un cliente que implemente el ciclo Request/Response — que es justo lo que hace `ashpd` dentro de
las aplicaciones. **El diálogo está probado; la entrega del fichero a la aplicación, no.**
### 🎥 ScreenCast: dos bloqueos distintos, y el segundo es el que importa
**Bloqueo 1 — `dbus-send` no puede manejarlo, al revés que FileChooser.** El selector se abre con
UNA llamada; ScreenCast necesita un apretón de manos de tres pasos con estado (`CreateSession` →
`SelectSources` → `Start`), y la sesión queda atada a la **conexión** que la creó. Cada `dbus-send`
es una conexión distinta que muere al terminar, así que el paso 2 nunca encuentra la sesión del paso
1. No es un límite del portal sino de la herramienta: hace falta un cliente `ashpd` de verdad.
Lo que sí se midió con `dbus-send`: `CreateSession` **funciona** — el frontend acepta y devuelve
`/org/freedesktop/portal/desktop/request/1_106/sc1`, con el `handle_token` que le pasamos.
**Bloqueo 2 — NADIE ARRANCA EL DEMONIO DE PIPEWIRE**, y éste no lo arregla ningún cliente.
`docs/evidencia/cosmic-screencast-sin-pipewire-2026-08-05.png`:
```
$ ls /usr/bin/ | grep -i pipewire → pipewire, pipewire-aes67, pipewire-avb, pipewire-pulse
$ ps ax | grep -c pipewire → 1 (el propio grep: NO hay demonio)
```
Los binarios están en la imagen —el backend del portal enlaza `libpipewire-0.3.so`— pero el
**demonio** no corre: `cosmic-start` no lo lanza y no hay systemd de usuario que lo active. O sea que
aunque se escribiera el cliente `ashpd`, `Start` no tendría con quién negociar el stream.
Arreglo: lanzarlo desde `cosmic-start`. (Para AUDIO además falta `wireplumber`, que ni siquiera está
construido — ver la decisión de audio del proyecto.)
**Y de paso se corrigió un comentario desactualizado de `cosmic-start`** que decía que
`cosmic-settings-daemon` «todavía no se puede construir acá (arrastra pipewire)». Es falso hace
tiempo: ese daemon está sellado y corre. Un comentario viejo manda a buscar un bloqueo que ya no
existe, y eso cuesta igual que un bug.
## Lo que falta, en orden
1. **`ScreenCast`**, que es la que ejercita pipewire de verdad, y la entrega de URI del `FileChooser`
con un cliente `ashpd` real en vez de `dbus-send`.
1. **Arrancar el demonio de pipewire desde `cosmic-start`**, que es lo que destraba ScreenCast de
verdad; después, un cliente `ashpd` para ejercer el handshake y, de paso, capturar la URI del
`FileChooser` que `dbus-send` no puede ver.
2. **Decidir `gvfs`** (ver la corrección de arriba: las piezas ya están selladas, lo que falta es la
decisión sobre la segunda glib). Destrabaría los montajes remotos de cosmic-files y su applet.
3. **Enchufar la tienda a `.swm`**: servir `org.freedesktop.PackageKit` y encender la feature
+15 -4
View File
@@ -171,10 +171,21 @@ if [ ! -f "$HOME/.config/qalculate/qalc.cfg" ]; then
fi
# ── MODO: bare (default) o session ──────────────────────────────────────────────────────────────
# `cosmic-session` es el camino de producción, pero HOY no se puede usar: llama a
# `cosmic-settings-daemon` con `.expect("failed to start settings daemon")` (src/main.rs:255) y
# PANICKEA si no está — no es opcional ni está detrás de una feature. Y ese daemon todavía no se
# puede construir acá (arrastra pipewire; ver el runbook).
# `cosmic-session` llama a `cosmic-settings-daemon` con
# `.expect("failed to start settings daemon")` (src/main.rs:255) y PANICKEA si no está — no es
# opcional ni está detrás de una feature.
#
# ⚠ **DESACTUALIZADO Y CORREGIDO (2026-08-05)**: acá decía que ese daemon «todavía no se puede
# construir acá (arrastra pipewire)». Es falso desde hace tiempo — `cosmic-settings-daemon` está
# sellado y corre, y `pipewire` está en la imagen. Se deja el rastro porque el comentario viejo
# mandaba a buscar un bloqueo que ya no existe.
#
# Lo que SÍ falta, y es otra cosa: **nadie ARRANCA el demonio de pipewire**. `/usr/bin/pipewire` y
# `pipewire-pulse` están instalados, pero `ps ax | grep pipewire` en la sesión no devuelve nada, y
# este script no lo lanza. Consecuencia medida: el portal acepta
# `org.freedesktop.portal.ScreenCast.CreateSession` y devuelve su objeto Request, pero **no puede
# haber stream** porque no hay demonio con quien negociarlo. Sin systemd de usuario, lanzarlo es
# tarea de este script. (Para audio además falta `wireplumber`, que ni siquiera está construido.)
#
# El modo `bare` es la otra mitad que upstream ya soporta (`make install-bare-session`): el
# compositor se lanza SOLO y los clientes se levantan a mano contra su WAYLAND_DISPLAY. Sirve para lo