From e125b7a7c3545da9729ce7f1f4996cd3dad27cb0 Mon Sep 17 00:00:00 2001 From: sergio Date: Wed, 5 Aug 2026 16:42:02 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=AC=20cosmic/metal:=20`cosmic-diag`=20?= =?UTF-8?q?=E2=80=94=20una=20corrida,=20toda=20la=20evidencia,=20incluido?= =?UTF-8?q?=20el=20dmesg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit En metal cada iteración cuesta un viaje físico, así que la captura no puede depender de que alguien recuerde los pasos. `cosmic-diag` corre la sesión y deja en /var/log/cosmic: dmesg ANTES, run.txt de la sesión, y dmesg DESPUÉS. El dmesg de después es lo que faltaba. Medido en el OptiPlex 3060: cosmic-comp toma seat0 (seatd lo confirma: "Opened client 1"), vive 4,9s y se DESCONECTA, pero su log se corta a los 0,4s sin panic y con RUST_BACKTRACE=1 activo. Eso no es un error manejado, es una señal — y si es SIGSEGV el kernel imprime `cosmic-comp[PID]: segfault at ... in `, que ES el diagnóstico. Descartado antes de pedir otro viaje: la clausura está completa (iris_dri.so, libEGL y cosmic-comp resuelven todos sus NEEDED en el rootfs), y los errores de tema no son la causa — cosmic-panel sobrevive al mismo GetKey(list_button) y muere después, de NoCompositor. Los tres clientes que "no encuentran compositor" son consecuencia. Co-Authored-By: Claude Opus 5 (1M context) --- scripts/cosmic/metal-desktop-image.sh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/scripts/cosmic/metal-desktop-image.sh b/scripts/cosmic/metal-desktop-image.sh index 18212bdc..bdc635c3 100755 --- a/scripts/cosmic/metal-desktop-image.sh +++ b/scripts/cosmic/metal-desktop-image.sh @@ -163,6 +163,30 @@ else echo " ⚠ sin $AKEY ⇒ sshd escuchará pero será inalcanzable (depuración sólo a ciegas)" fi +# ── cosmic-diag: UN comando que deja toda la evidencia en disco ───────────────────────────────── +# Depurar en metal cuesta un viaje físico por iteración, así que el objetivo es que una corrida +# capture TODO de una vez y sin que nadie tenga que acordarse de los pasos. Lo que importa acá y no +# se estaba capturando: el `dmesg` DESPUÉS de la sesión. Si cosmic-comp muere por SIGSEGV —que es lo +# que indica su log cortado a los 0,4 s, sin panic y con RUST_BACKTRACE=1— el kernel imprime +# `cosmic-comp[PID]: segfault at ... in `, y esa biblioteca ES el diagnóstico. +cat > "$MERGED/usr/bin/cosmic-diag" <<'DIAG' +#!/bin/sh +export PATH=/usr/bin:/bin:/usr/sbin:/sbin +L=/var/log/cosmic +mkdir -p "$L" +echo "== cosmic-diag: corriendo la sesión y capturando todo en $L (unos 60s) ==" +/bin/busybox dmesg > "$L/dmesg-antes.txt" 2>&1 +cosmic-start > "$L/run.txt" 2>&1 & +sleep 50 +/bin/busybox dmesg > "$L/dmesg-despues.txt" 2>&1 +/bin/busybox sync +echo "== listo. Lo que importa: ==" +grep -aiE "segfault|general protection|trap |Code: " "$L/dmesg-despues.txt" | tail -5 || true +echo "== (si no salió nada arriba, no fue SIGSEGV: cosmic-comp salió por su cuenta) ==" +echo "== evidencia completa en $L — apagá y traé el USB ==" +DIAG +chmod 0755 "$MERGED/usr/bin/cosmic-diag" + # ── getty en tty1: el prompt TIENE que salir por la PANTALLA ──────────────────────────────────── # Lección del 1er viaje físico de KDE, que costó un USB quemado: el CMDLINE horneado es # `console=tty0 console=ttyS0,115200 …` y el kernel hace /dev/console = la ÚLTIMA `console=` ⇒ ttyS0. @@ -244,6 +268,9 @@ cat > "$MERGED/etc/motd" <<'MOTD' Arrancar el escritorio: cosmic-start ⇒ tiene que decir "GL por HARDWARE". Si dice SOFTWARE, el viaje no sirve: ScreenCast fallaría igual que en QEMU. + Si NO levanta: cosmic-diag <-- UN comando, deja todo en + /var/log/cosmic/ (incluido el dmesg de después, + que es donde el kernel nombra el segfault) Probar el portal: portal-probe version portal-probe screencast <-- LO QUE VINIMOS A VER GPU detectada: ls /dev/dri ; dmesg | grep -iE 'i915|drm'