atuq-nested: `CAPTURA=<png>` — la prueba en el píxel, en una variable
Durante horas dije «mirá tu pantalla» y reporté «el proceso vive» como si fuera lo mismo. No lo es: la ventana estaba ahí desde el principio y lo que fallaba era el branding DENTRO del zip, que ningún log iba a contar. `grim` ya estaba en el corpus (`incoming-wlr`), se hidrata en el mismo rootfs y captura la pantalla real contra el mismo socket wayland desde dentro de la jaula. Ahora es parte del runner: con `CAPTURA=/ruta/foto.png` se lanza atuq, se espera a que pinte y se deja el PNG afuera para mirarlo. De paso, la resolución de raíces prueba el corpus Y `incoming-wlr`, en ese orden — el mismo que usa la resolución de deps (sibling-first, luego el catálogo padre). Sin eso, `grim` no se encontraba y el script habría dicho «falta un artefacto» sobre una receta que existe.
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
1 archivos · +22 −2
- scripts/atuq-nested.sh +22 −2
diff --git a/scripts/atuq-nested.sh b/scripts/atuq-nested.sh
index 364fb0ea..af4deb8f 100755
--- a/scripts/atuq-nested.sh
+++ b/scripts/atuq-nested.sh
@@ -39,7 +39,12 @@ RAICES="atuq gtk3 atk gdk-pixbuf-shared pango-shared cairo-shared libepoxy glib-
libffi-shared zlib-shared harfbuzz-shared fribidi freetype-shared fontconfig-shared pixman libpng-shared
libjpeg-turbo-shared wayland libxkbcommon mesa libdrm dbus pipewire pulseaudio alsa-lib
libxml2-shared dejavu-fonts
- xkeyboard-config"
+ xkeyboard-config grim"
+# `grim` no lo necesita atuq: lo necesita QUIEN LO MIRA. Con `CAPTURA=<fichero.png>` este script
+# saca la pantalla real desde dentro de la jaula, contra el mismo socket wayland. Es lo que separó
+# «el proceso vive» de «la ventana muestra lo que queremos»: durante horas dije «mirá tu pantalla»
+# y la ventana estaba ahí desde el principio — lo que fallaba era el branding DENTRO del zip.
+# La receta vive en `recipes/incoming-wlr/grim.toml`; se resuelve más abajo con el resto.
# `xkeyboard-config` son DATOS, no una librería, y sin ellos el navegador ni pinta:
# xkbcommon: ERROR: failed to add default include path /usr/share/X11/xkb
# Es el mismo modo de fallo silencioso que las fuentes: nada en la clausura lo ve venir.
@@ -52,7 +57,10 @@ RAICES="atuq gtk3 atk gdk-pixbuf-shared pango-shared cairo-shared libepoxy glib-
VIGENTES=""
faltan=""
for r in $RAICES; do
- h="$("$H" --store "$STORE" hash "recipes/$r.toml" 2>/dev/null | tail -1 | sed 's/^b3://')"
+ # La receta puede vivir en el corpus o en una cola: `grim` es de `incoming-wlr`. Se prueban las
+ # dos, en ese orden, que es el mismo que usa la resolución de deps (sibling-first, luego padre).
+ rec="recipes/$r.toml"; [ -f "$rec" ] || rec="recipes/incoming-wlr/$r.toml"
+ h="$("$H" --store "$STORE" hash "$rec" 2>/dev/null | tail -1 | sed 's/^b3://')"
if [ -z "$h" ] || [ ! -d "$STORE/$h-$r" ]; then faltan="$faltan $r"; continue; fi
VIGENTES="$VIGENTES$h-$r
"
@@ -85,6 +93,7 @@ echo "==> pantalla: $SOCK"
exec bwrap --overlay-src "$ALPINE" --overlay-src "$RFS" --tmp-overlay / \
--dev-bind /dev /dev --proc /proc --bind /sys /sys --tmpfs /tmp --tmpfs /run \
--ro-bind "$SOCK" /run/wayland-0 \
+ --bind "$(dirname "${CAPTURA:-/tmp/atuq-captura.png}")" /salida \
--uid 0 --gid 0 \
--setenv PATH /usr/bin:/bin:/usr/sbin:/sbin \
--setenv LD_LIBRARY_PATH /usr/lib:/lib \
@@ -106,5 +115,16 @@ exec bwrap --overlay-src "$ALPINE" --overlay-src "$RFS" --tmp-overlay / \
echo "=== ¿vive? ==="
if kill -0 $PID 2>/dev/null; then echo " ✓ atuq corriendo (PID $PID) — mirá tu pantalla"; else echo " ✗ murió"; fi
echo "=== log ==="; tail -25 /tmp/atuq.log
+ # ── LA PRUEBA EN EL PÍXEL ─────────────────────────────────────────────────────────────────
+ # Un proceso vivo NO es una ventana correcta. Se captura la pantalla entera (grim sin `-o`
+ # compone todas las salidas) y se deja el PNG afuera, para mirarlo de verdad.
+ if [ -n "'"${CAPTURA:-}"'" ]; then
+ sleep 4
+ if grim "/salida/'"$(basename "${CAPTURA:-captura.png}")"'" 2>/dev/null; then
+ echo "captura: $(wc -c < "/salida/'"$(basename "${CAPTURA:-captura.png}")"'") bytes → '"${CAPTURA:-}"'"
+ else
+ echo "captura: grim NO pudo — ¿el compositor expone wlr-screencopy?"
+ fi
+ fi
wait $PID 2>/dev/null || true
'