From b2d80e6f6988e05760e5cdd7b6d2aa5c8d080615 Mon Sep 17 00:00:00 2001 From: sergio Date: Sat, 18 Jul 2026 17:04:16 -0400 Subject: [PATCH] =?UTF-8?q?kde:=20lanzador=20anidado=20(nested-app.sh)=20?= =?UTF-8?q?=E2=80=94=20apps=20KDE=20hidratadas=20como=20ventana=20en=20mir?= =?UTF-8?q?ada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corre una app KDE del rootfs hidratado como cliente wayland ANIDADO en el compositor mirada vivo (WAYLAND_DISPLAY=/run/mirada-wayland), vía bwrap overlay (alpine+kde-rootfs como /). Cliente, no master: renderiza por renderD128/iris, cero riesgo al display. Resuelve dbus de sesión (root-en-userns + machine-id + /run/dbus). konsole y dolphin verificados corriendo en vivo. Fix portabilidad: run-plasma-headless.sh += --setenv PATH. Co-Authored-By: Claude Opus 4.8 (1M context) --- scripts/kde/nested-app.sh | 36 ++++++++++++++++++++++++++++++ scripts/kde/run-plasma-headless.sh | 1 + 2 files changed, 37 insertions(+) create mode 100755 scripts/kde/nested-app.sh diff --git a/scripts/kde/nested-app.sh b/scripts/kde/nested-app.sh new file mode 100755 index 00000000..1f95c464 --- /dev/null +++ b/scripts/kde/nested-app.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# nested-app.sh — corre una app KDE hidratada como VENTANA ANIDADA en el compositor mirada actual +# (WAYLAND_DISPLAY=/run/mirada-wayland), vía bwrap overlay (alpine+kde-rootfs como /). NO toca la GPU +# como master (es cliente wayland; renderiza por renderD128/iris). Seguro sobre una sesión viva. +# APP=konsole SECS=20 scripts/kde/nested-app.sh +set -u +ROOT="$(cd "$(dirname "$0")/../.." && pwd)"; cd "$ROOT" +R="${RFS:-$ROOT/work/kde-rootfs}"; A="$ROOT/.dev-fs/alpine" +APP="${APP:-konsole}"; SECS="${SECS:-20}" +HOST_WL="${HOST_WL:-/run/mirada-wayland}" +exec bwrap --overlay-src "$A" --overlay-src "$R" --tmp-overlay / \ + --dev-bind /dev /dev --proc /proc --bind /sys /sys --tmpfs /tmp --tmpfs /run \ + --bind "$HOST_WL" "$HOST_WL" \ + --uid 0 --gid 0 \ + --setenv PATH /usr/bin:/bin:/usr/sbin:/sbin \ + --setenv LD_LIBRARY_PATH /usr/lib64:/usr/lib/qt6:/usr/lib:/lib \ + --setenv QT_PLUGIN_PATH /usr/lib64/qt6/plugins:/usr/lib/qt6/plugins \ + --setenv QML2_IMPORT_PATH /usr/lib64/qt6/qml:/usr/lib/qt6/qml \ + --setenv QML_IMPORT_PATH /usr/lib64/qt6/qml:/usr/lib/qt6/qml \ + --setenv XDG_DATA_DIRS /usr/share --setenv XDG_RUNTIME_DIR /run/user/0 \ + --setenv XDG_CONFIG_HOME /run/cfg --setenv XDG_CACHE_HOME /run/cache --setenv HOME /root \ + --setenv LIBGL_DRIVERS_PATH /usr/lib/dri --setenv LIBGL_DRIVERS_PATH /usr/lib/dri \ + --setenv QT_QPA_PLATFORM wayland --setenv WAYLAND_DISPLAY "$HOST_WL" \ + --setenv QT_LOGGING_RULES 'qt.qpa.wayland=false' \ + sh -c ' + mkdir -p /run/user/0 /run/dbus /run/cfg /run/cache /root/.config /etc; chmod 700 /run/user/0 + [ -s /etc/machine-id ] || cat /proc/sys/kernel/random/uuid | tr -d - > /etc/machine-id + export DBUS_SESSION_BUS_ADDRESS=$(dbus-daemon --session --fork --print-address 2>/dev/null) + echo "dbus=${DBUS_SESSION_BUS_ADDRESS:-VACIO} wl='"$HOST_WL"' app='"$APP"'" + timeout '"$SECS"' /usr/bin/'"$APP"' >/tmp/nested-'"$APP"'.log 2>&1 & + PID=$! + sleep 6 + echo "=== proceso vivo? ==="; kill -0 $PID 2>/dev/null && echo " ✓ '"$APP"' corriendo (PID $PID) — mirá tu pantalla" || echo " ✗ murió" + echo "=== log (tail) ==="; tail -15 /tmp/nested-'"$APP"'.log + wait $PID 2>/dev/null + ' diff --git a/scripts/kde/run-plasma-headless.sh b/scripts/kde/run-plasma-headless.sh index fe7f3333..2a5f11a8 100644 --- a/scripts/kde/run-plasma-headless.sh +++ b/scripts/kde/run-plasma-headless.sh @@ -15,6 +15,7 @@ SECS="${SECS:-30}"; CLIENT="${CLIENT:-plasmashell}" # CLIENT=/usr/bin/foo para exec bwrap --overlay-src "$A" --overlay-src "$R" --tmp-overlay / \ --dev-bind /dev /dev --proc /proc --bind /sys /sys --tmpfs /tmp --tmpfs /run \ + --setenv PATH /usr/bin:/bin:/usr/sbin:/sbin \ --setenv LD_LIBRARY_PATH /usr/lib64:/usr/lib/qt6:/usr/lib:/lib \ --setenv QT_PLUGIN_PATH /usr/lib64/qt6/plugins:/usr/lib/qt6/plugins \ --setenv QML2_IMPORT_PATH /usr/lib64/qt6/qml:/usr/lib/qt6/qml \