diff --git a/scripts/kde/metal-desktop-image-dual.sh b/scripts/kde/metal-desktop-image-dual.sh index 0db5c1c9..e8aff569 100755 --- a/scripts/kde/metal-desktop-image-dual.sh +++ b/scripts/kde/metal-desktop-image-dual.sh @@ -72,6 +72,45 @@ fi echo "==> instalando /usr/bin/plasma-start (metal software-GL, lanzamiento manual)" install -Dm755 scripts/kde/plasma-start-metal-sw.sh "$MERGED/usr/bin/plasma-start" +# --- getty en tty1: el prompt TIENE que salir por la PANTALLA ----------------------------------------- +# El CMDLINE horneado es "console=tty0 console=ttyS0,115200 …" y el kernel hace /dev/console = la ÚLTIMA +# console= ⇒ ttyS0. La seed card de la base metal supervisa un solo getty, sobre `console` ⇒ en un metal +# sin puerto serie el shell nace INVISIBLE: la pantalla se congela en el último printk del kernel (los +# printk sí van a las dos consolas) y parece que el arranque murió, cuando en realidad está vivo. Eso +# nunca se vio en QEMU porque siempre validamos con -nographic, donde el serial ES la pantalla. +# Fix acá y no en el cmdline: un getty sobre tty1 es independiente del cmdline (en metal siempre hay VT) +# y no obliga a recompilar/re-sellar el kernel. El getty de `console` se conserva (debug por serial). +echo "==> añadiendo getty en tty1 a la seed card (el prompt de console va al SERIAL, invisible en metal)" +cat > "$MERGED/usr/bin/console-login" <<'LOGIN' +#!/bin/sh +# arje-zero lanza el getty con envp VACÍO ⇒ sin PATH no se resuelve ni `cat` ni `plasma-start`. +export PATH=/usr/bin:/bin:/usr/sbin:/sbin +export HOME=/root TERM=linux +[ -r /etc/motd ] && /bin/busybox cat /etc/motd +exec /bin/sh +LOGIN +chmod 0755 "$MERGED/usr/bin/console-login" +python3 - "$MERGED/ente/seed.card.json" <<'PY' +# OJO: $MERGED es un árbol de HARDLINKS a la base metal ⇒ escribir in-place mutaría también +# work/metal-rootfs (y toda otra imagen que comparta el inodo). Se escribe a un temporal y se +# os.replace ⇒ se reemplaza la ENTRADA de directorio, el inodo compartido queda intacto. +import json, sys, copy, os +p = sys.argv[1] +card = json.load(open(p)) +gen = card["genesis"] +gen[:] = [g for g in gen if g["label"] != "tty1-getty"] # idempotente +base = next(g for g in gen if g["label"] == "console-getty") +tty1 = copy.deepcopy(base) +tty1["id"] = "01HQAR53D4M2NBV8KZTYXFQA03" +tty1["label"] = "tty1-getty" +tty1["payload"]["Native"]["argv"] = ["getty", "-n", "-l", "/usr/bin/console-login", "38400", "tty1"] +gen.append(tty1) +json.dump(card, open(p + ".new", "w"), indent=2, sort_keys=True) +os.replace(p + ".new", p) +print(" ✓ genesis: " + ", ".join(g["label"] for g in gen)) +PY + +rm -f "$MERGED/etc/motd" # romper el hardlink: `cat >` escribiría el inodo COMPARTIDO con work/metal-rootfs cat > "$MERGED/etc/motd" <<'MOTD' #-- hammer :: escritorio KDE Plasma 6 (metal, dual-GPU software) ------------