From 6c0ef0867dd863d7f2c3c2fc1a6cc52544f05f11 Mon Sep 17 00:00:00 2001 From: sergio Date: Mon, 20 Jul 2026 11:52:59 -0400 Subject: [PATCH] =?UTF-8?q?kde/qemu:=20KWIN=5FDRM=5FUSE=5FMODIFIERS=3D0=20?= =?UTF-8?q?=E2=80=94=20mata=20la=20pantalla=20negra=20(FB=20rechazado=20po?= =?UTF-8?q?r=20virtio)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Con el segfault ya resuelto, el escritorio salía NEGRO: kwin encontraba el conector (1280x800) pero "Failed to create a framebuffer: Invalid argument" ⇒ "Failed to find a working output layer" ⇒ sin scanout. Se veía el wallpaper un instante (el modeset inicial usa un buffer dumb sin modifiers) y luego negro (los buffers del compositor van por drmModeAddFB2WithModifiers). virtio-gpu ADVIERTE el CAP de modifiers pero rechaza el modifier explícito (aún LINEAR=0) con EINVAL. Fix: KWIN_DRM_USE_MODIFIERS=0 ⇒ kwin usa drmModeAddFB2 plano (modifier implícito) que virtio sí acepta. "Failed to create a framebuffer" pasó de 2526 a 0; input Qt fluyendo; sin crash. También: quitado KWIN_DRM_NO_AMS (era corazonada del segfault; atomic es el path sólido en virtio) y arreglado el stream vivo del kwin.log al serial (busybox sed no soporta -u ⇒ tail -f directo, sin sed). Co-Authored-By: Claude Opus 4.8 (1M context) --- scripts/kde/plasma-start-qemu.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/scripts/kde/plasma-start-qemu.sh b/scripts/kde/plasma-start-qemu.sh index 29293725..7bec0a00 100644 --- a/scripts/kde/plasma-start-qemu.sh +++ b/scripts/kde/plasma-start-qemu.sh @@ -47,7 +47,16 @@ export QT_QUICK_BACKEND=software # llvmpipe segfaultea al componer la 1ra superficie en esta VM. KWIN_DRM_NO_AMS=1: desactiva atomic # modesetting (algunos virtio-gpu lo rompen). Ambos son fixes conocidos de kwin/llvmpipe en VMs. export LP_NUM_THREADS=1 -export KWIN_DRM_NO_AMS=1 +# KWIN_DRM_NO_AMS (legacy modeset) fue una corazonada del segfault (que resultó ser GBM_ALWAYS_SOFTWARE). +# Dejamos atomic (virtio soporta atomic nativo; legacy es el frágil). +# export KWIN_DRM_NO_AMS=1 +# +# EL FIX DEL NEGRO: virtio-gpu ADVIERTE soportar drmModeAddFB2WithModifiers pero RECHAZA el modifier +# explícito (aún LINEAR=0) con EINVAL ⇒ "Failed to create a framebuffer" ⇒ sin output layer ⇒ NEGRO. +# El modeset inicial usa un buffer dumb (sin modifiers) y SÍ pinta (por eso se ve el wallpaper un instante), +# pero los buffers del compositor van por AddFB2WithModifiers y fallan ⇒ vuelve a negro. KWIN_DRM_USE_MODIFIERS=0 +# fuerza a kwin a usar drmModeAddFB2 plano (modifier implícito) que virtio-gpu sí acepta. +export KWIN_DRM_USE_MODIFIERS=0 # KWIN_COMPOSE: con llvmpipe (GL de software COMPLETO) dejamos que kwin use su compositor OpenGL por # defecto — forzar QPainter (=Q) sobre una salida DRM/EGL con GL disponible segfaultea al componer la # 1ra superficie. Si el GL-llvmpipe resultara inestable, KWIN_COMPOSE=Q es el fallback. @@ -124,9 +133,8 @@ fi say "lanzando kwin_wayland (DRM virtio, software GL)..." /usr/bin/kwin_wayland --drm >/tmp/kwin.log 2>&1 & KWIN=$! -# stream EN VIVO del kwin.log al serial: el volcado post-mortem se trunca porque el getty respawnea y -# pisa el serial ⇒ con tail -f la última línea antes del segfault llega al host pase lo que pase. -( tail -f /tmp/kwin.log 2>/dev/null | sed -u 's/^/kwin> /' > /dev/ttyS0 2>/dev/null ) & +# stream EN VIVO del kwin.log al serial (busybox sed NO soporta -u ⇒ nada de sed/pipes: tail -f directo). +( echo "==== kwin.log (stream vivo) ===="; tail -f /tmp/kwin.log ) > /dev/ttyS0 2>/dev/null & TAILPID=$! i=0 while [ $i -lt 60 ]; do