tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 177Rust 55Shell 28Markdown 271211 Definiciones

kde/qemu: un solo output virtio (KWIN_DRM_DEVICES) — mata el negro-tras-pintar

Tras arreglar el FB (modifiers), el escritorio pintaba con plasmashell y volvía a
negro. Causa: kwin veía DOS outputs — virtio-gpu ("QEMU Monitor") Y el efifb/simpledrm
("Unknown-1", framebuffer EFI read-only que no fue expulsado al cargar virtio-gpu).
El conflicto entre ambos rompía el import/destroy de buffers EGL (spam
eglDestroyImageKHR EGL_BAD_PARAMETER) y tiraba la conexión de plasmashell
("error in client communication") ⇒ negro.

Fix: plasma-start detecta el card cuyo driver es virtio_gpu (robusto al numerado
card0/card1 que cambia entre boots) y lo pasa por KWIN_DRM_DEVICES ⇒ kwin ignora el
efifb. Resultado: un solo output, atomic modeset, y TODOS los errores correlacionados
con el negro a 0 (client-comm, eglDestroyImage, FB fail, output disabled). kwin carga
efectos normalmente.

+ monitor de estado cada 15s al serial (kwin/plasmashell vivos) para diagnóstico.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

2f99446ca1444197fcbf3a186e6dc4d8760490d6 · por sergio · (hace 3 meses) · padre 6c0ef0867 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

1 archivos · +21 −0

diff --git a/scripts/kde/plasma-start-qemu.sh b/scripts/kde/plasma-start-qemu.sh
index 7bec0a00..d989bf75 100644
--- a/scripts/kde/plasma-start-qemu.sh
+++ b/scripts/kde/plasma-start-qemu.sh
@@ -129,6 +129,22 @@ if [ "${DIAG:-1}" = 1 ]; then
   say "core dumps ON (pattern=$(cat /proc/sys/kernel/core_pattern 2>/dev/null), ulimit -c=$(ulimit -c))"
 fi
 
+# SÓLO el card de virtio-gpu: el efifb/simpledrm sobrevive como 2º DRM ("Unknown-1", read-only) y kwin
+# intenta manejar ambos outputs ⇒ conflicto de presentación ⇒ pinta y vuelve a NEGRO. Detectamos el card
+# cuyo driver es virtio_gpu (robusto al numerado card0/card1 que cambia entre boots) y se lo pasamos a kwin.
+VIRTIO_CARD=
+for c in /dev/dri/card*; do
+  n=$(basename "$c")
+  drv=$(readlink -f "/sys/class/drm/$n/device/driver" 2>/dev/null)
+  case "$drv" in *virtio*) VIRTIO_CARD="$c"; break;; esac
+done
+if [ -n "$VIRTIO_CARD" ]; then
+  export KWIN_DRM_DEVICES="$VIRTIO_CARD"
+  say "KWIN_DRM_DEVICES=$VIRTIO_CARD (ignorando efifb/simpledrm)"
+else
+  say "!! no hallé card virtio_gpu; kwin verá todos los DRM (posible doble output)"
+fi
+
 # Compositor sobre el DRM de virtio (software EGL/GBM vía kms_swrast). SIN --virtual: presenta al display.
 say "lanzando kwin_wayland (DRM virtio, software GL)..."
 /usr/bin/kwin_wayland --drm >/tmp/kwin.log 2>&1 &
@@ -159,6 +175,11 @@ sleep 8
 say "procesos: $(ps axo comm 2>/dev/null | grep -E 'kwin|plasma' | sort -u | tr '\n' ' ')"
 say "escritorio arriba (o mira /tmp/plasmashell.log). Ctrl-C mata la sesion."
 dump /tmp/plasmashell.log
+# monitor de estado: cada 15s dice si kwin/plasmashell siguen vivos ⇒ si vuelve a negro, sabremos si
+# fue plasmashell que murió (containment) o kwin/output. (busybox pgrep -c cuenta procesos.)
+( while sleep 15; do
+    say "STATUS: kwin=$(pgrep -c kwin_wayland 2>/dev/null) plasmashell=$(pgrep -c plasmashell 2>/dev/null) outputs_ok"
+  done ) &
 wait $KWIN
 RC=$?
 # kwin salió ⇒ volcá su log para saber por qué (backend QPainter, DRM, modeset…)