Files
takana/scripts/kde/plasma-start-metal.sh
T
SergioandClaude Opus 5 807683dbc6 kde: XDG_MENU_PREFIX en los CINCO lanzadores — el menú de aplicaciones salía vacío
Arrancando la imagen KDE recién regenerada, el serial dijo:

    "applications.menu"  not found in  QList("/etc/xdg/menus")

y el escritorio pintó perfecto igual: fondo, panel, reloj, bandeja. Ése es justo el modo de fallo
que este repo persigue — nada falla, simplemente el menú de aplicaciones no tiene qué mostrar.

⚠ Y EL DIAGNÓSTICO OBVIO ERA EL EQUIVOCADO. Lo primero que anoté fue «falta el fichero, hay que
empaquetarlo». **No falta**: `plasma-workspace` instala `/etc/xdg/menus/plasma-applications.menu`
—verificado en el store Y en el rootfs de la imagen, 9904 bytes—. Lo que faltaba es el PREFIJO:
Plasma construye el nombre como `${XDG_MENU_PREFIX}applications.menu`, y sin la variable busca
`applications.menu` a secas, que no existe con ese nombre en NINGUNA distro con Plasma. El error
nombra un fichero que nunca tuvo ese nombre. La etiqueta contra el hecho, otra vez.

El arreglo es una línea. Lo que no era una línea es DÓNDE: los cinco lanzadores de Plasma exportan
`XDG_DATA_DIRS` y ninguno exportaba éste —comprobado uno por uno—, así que arreglar sólo el de QEMU
habría dejado la misma trampa en metal, metal-sw, el anidado y el headless. Es el cable que este
repo ya vio caer cinco veces en `cosecha-cron.sh` y en la frontera del sembrador: arreglar el caso
y dejar la trampa. Van los cinco.

  plasma-start-qemu.sh · plasma-start-metal.sh · plasma-start-metal-sw.sh   export
  nested-plasma.sh · run-plasma-headless.sh                                 --setenv (arman con bwrap)

VERIFICADO, y digo exactamente qué: que el nombre que Plasma construirá con el prefijo EXISTE en la
ruta donde lo busca (`/etc/xdg/menus/plasma-applications.menu` está en el rootfs de la imagen). Lo
que NO está verificado es el menú renderizado — eso pide reconstruir la imagen y arrancarla otra
vez. El `plasma-start` horneado en el rootfs fundido ya se refrescó con el script corregido, así que
la imagen queda a un rebuild de distancia.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LCt3ettR4Z7b6wPCBmbvEV
2026-09-09 21:45:46 +00:00

81 lines
3.7 KiB
Bash
Executable File

#!/bin/sh
# plasma-start — arranca la sesión Plasma en METAL (se instala como /usr/bin/plasma-start en el rootfs).
#
# Derivado de scripts/kde/run-plasma-headless.sh (la sesión VALIDADA headless en el worker), con dos
# cambios para hardware real:
# - kwin_wayland SIN `--virtual`: usa el backend DRM real (/dev/dri/card0, i915 built-in del kernel metal).
# - SIN los overrides de software (swrast/LIBGL_ALWAYS_SOFTWARE/QT_QUICK_BACKEND=software): en la
# TigerLake el driver es **iris** (mesa hidratado trae /usr/lib/dri/iris_dri.so).
#
# NO se autoarranca desde el seed card de arje-zero a propósito: en un bringup, si Plasma falla querés el
# shell de la console-getty para leer los logs, no una pantalla negra. Se lanza a mano desde ese shell.
#
# Logs: /tmp/{kwin,kamd,plasmashell}.log Salir: Ctrl-C (mata la sesión)
set -u
export LD_LIBRARY_PATH=/usr/lib64:/usr/lib/qt6:/usr/lib:/lib
export QT_PLUGIN_PATH=/usr/lib64/qt6/plugins:/usr/lib/qt6/plugins
export QML2_IMPORT_PATH=/usr/lib64/qt6/qml:/usr/lib/qt6/qml
export QML_IMPORT_PATH=$QML2_IMPORT_PATH
export XDG_DATA_DIRS=/usr/share
# ⚠ XDG_MENU_PREFIX: sin esto el MENÚ DE APLICACIONES sale VACÍO, y el fallo no se ve al arrancar.
# Medido el 2026-09-09 arrancando la imagen KDE: el serial dice
# "applications.menu" not found in QList("/etc/xdg/menus")
# y el escritorio pinta perfecto igual. **No falta el fichero**: `plasma-workspace` instala
# `/etc/xdg/menus/plasma-applications.menu`. Lo que falta es el PREFIJO que le dice a Plasma que
# busque ese nombre y no `applications.menu` a secas. Es la etiqueta contra el hecho: el error
# nombra un fichero que nunca existió con ese nombre en ninguna distro con Plasma.
export XDG_MENU_PREFIX=plasma-
export XDG_RUNTIME_DIR=/run/user/0
export XDG_CONFIG_HOME=/root/.config
export XDG_CACHE_HOME=/root/.cache
export HOME=/root
export LIBGL_DRIVERS_PATH=/usr/lib/dri
export QT_QPA_PLATFORM=wayland
mkdir -p "$XDG_RUNTIME_DIR" "$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" /root
chmod 700 "$XDG_RUNTIME_DIR"
echo "== hammer :: sesión Plasma (metal) =="
echo "-- GPU: $(ls /dev/dri/ 2>/dev/null | tr '\n' ' ')"
[ -e /dev/dri/card0 ] || echo " !! no hay /dev/dri/card0 — ¿i915 no cargó? (dmesg | grep i915)"
echo "-- input: $(ls /dev/input/ 2>/dev/null | tr '\n' ' ')"
# D-Bus de sesión: kwin/plasmashell lo exigen.
if [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then
DBUS_SESSION_BUS_ADDRESS=$(dbus-daemon --session --fork --print-address 2>/dev/null)
export DBUS_SESSION_BUS_ADDRESS
fi
echo "-- dbus: ${DBUS_SESSION_BUS_ADDRESS:-NO ARRANCÓ}"
# Compositor sobre DRM real.
echo "-- lanzando kwin_wayland (DRM)…"
/usr/bin/kwin_wayland >/tmp/kwin.log 2>&1 &
KWIN=$!
i=0
while [ $i -lt 40 ]; do
[ -S "$XDG_RUNTIME_DIR/wayland-0" ] && break
kill -0 $KWIN 2>/dev/null || { echo " !! kwin murió:"; tail -25 /tmp/kwin.log; exit 1; }
i=$((i+1)); sleep 0.5
done
if [ -S "$XDG_RUNTIME_DIR/wayland-0" ]; then
echo " compositor OK (wayland-0)"
else
echo " !! kwin no expuso wayland-0:"; tail -25 /tmp/kwin.log; exit 1
fi
export WAYLAND_DISPLAY=wayland-0
# kactivitymanagerd: plasmashell ABORTA si no corre (registra su servicio D-Bus).
KAMD=$(ls /usr/lib*/libexec/kactivitymanagerd 2>/dev/null | head -1)
if [ -n "$KAMD" ]; then "$KAMD" >/tmp/kamd.log 2>&1 & sleep 2; echo "-- kactivitymanagerd lanzado"; fi
echo "-- lanzando plasmashell…"
/usr/bin/plasmashell >/tmp/plasmashell.log 2>&1 &
sleep 8
echo "-- procesos: $(ps axo comm 2>/dev/null | grep -E 'kwin|plasma' | sort -u | tr '\n' ' ')"
echo
echo "Escritorio arriba. Logs en /tmp/{kwin,kamd,plasmashell}.log"
echo "Apps: konsole, dolphin, systemsettings, spectacle, okular… (lanzalas desde otra tty o krunner)"
echo "Ctrl-C para terminar la sesión."
wait $KWIN