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=` 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 '