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…
kde: XDG_MENU_PREFIX en los CINCO lanzadores — el menú de aplicaciones salía vacío
1#!/bin/sh
2# plasma-start — arranca la sesión Plasma en METAL (se instala como /usr/bin/plasma-start en el rootfs).
3#
4# Derivado de scripts/kde/run-plasma-headless.sh (la sesión VALIDADA headless en el worker), con dos
5# cambios para hardware real:
6# - kwin_wayland SIN `--virtual`: usa el backend DRM real (/dev/dri/card0, i915 built-in del kernel metal).
7# - SIN los overrides de software (swrast/LIBGL_ALWAYS_SOFTWARE/QT_QUICK_BACKEND=software): en la
8# TigerLake el driver es **iris** (mesa hidratado trae /usr/lib/dri/iris_dri.so).
9#
10# NO se autoarranca desde el seed card de arje-zero a propósito: en un bringup, si Plasma falla querés el
11# shell de la console-getty para leer los logs, no una pantalla negra. Se lanza a mano desde ese shell.
12#
13# Logs: /tmp/{kwin,kamd,plasmashell}.log Salir: Ctrl-C (mata la sesión)
14set -u
15
16export LD_LIBRARY_PATH=/usr/lib64:/usr/lib/qt6:/usr/lib:/lib
17export QT_PLUGIN_PATH=/usr/lib64/qt6/plugins:/usr/lib/qt6/plugins
18export QML2_IMPORT_PATH=/usr/lib64/qt6/qml:/usr/lib/qt6/qml
19export QML_IMPORT_PATH=$QML2_IMPORT_PATH
20export XDG_DATA_DIRS=/usr/share
21# ⚠ XDG_MENU_PREFIX: sin esto el MENÚ DE APLICACIONES sale VACÍO, y el fallo no se ve al arrancar.
22# Medido el 2026-09-09 arrancando la imagen KDE: el serial dice
23# "applications.menu" not found in QList("/etc/xdg/menus")
24# y el escritorio pinta perfecto igual. **No falta el fichero**: `plasma-workspace` instala
25# `/etc/xdg/menus/plasma-applications.menu`. Lo que falta es el PREFIJO que le dice a Plasma que
26# busque ese nombre y no `applications.menu` a secas. Es la etiqueta contra el hecho: el error
27# nombra un fichero que nunca existió con ese nombre en ninguna distro con Plasma.
28export XDG_MENU_PREFIX=plasma-
29export XDG_RUNTIME_DIR=/run/user/0
30export XDG_CONFIG_HOME=/root/.config
31export XDG_CACHE_HOME=/root/.cache
32export HOME=/root
33export LIBGL_DRIVERS_PATH=/usr/lib/dri
34export QT_QPA_PLATFORM=wayland
35
36mkdir -p "$XDG_RUNTIME_DIR" "$XDG_CONFIG_HOME" "$XDG_CACHE_HOME" /root
37chmod 700 "$XDG_RUNTIME_DIR"
38
39echo "== hammer :: sesión Plasma (metal) =="
40echo "-- GPU: $(ls /dev/dri/ 2>/dev/null | tr '\n' ' ')"
41[ -e /dev/dri/card0 ] || echo " !! no hay /dev/dri/card0 — ¿i915 no cargó? (dmesg | grep i915)"
42echo "-- input: $(ls /dev/input/ 2>/dev/null | tr '\n' ' ')"
43
44# D-Bus de sesión: kwin/plasmashell lo exigen.
45if [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then
46 DBUS_SESSION_BUS_ADDRESS=$(dbus-daemon --session --fork --print-address 2>/dev/null)
47 export DBUS_SESSION_BUS_ADDRESS
48fi
49echo "-- dbus: ${DBUS_SESSION_BUS_ADDRESS:-NO ARRANCÓ}"
50
51# Compositor sobre DRM real.
52echo "-- lanzando kwin_wayland (DRM)…"
53/usr/bin/kwin_wayland >/tmp/kwin.log 2>&1 &
54KWIN=$!
55i=0
56while [ $i -lt 40 ]; do
57 [ -S "$XDG_RUNTIME_DIR/wayland-0" ] && break
58 kill -0 $KWIN 2>/dev/null || { echo " !! kwin murió:"; tail -25 /tmp/kwin.log; exit 1; }
59 i=$((i+1)); sleep 0.5
60done
61if [ -S "$XDG_RUNTIME_DIR/wayland-0" ]; then
62 echo " compositor OK (wayland-0)"
63else
64 echo " !! kwin no expuso wayland-0:"; tail -25 /tmp/kwin.log; exit 1
65fi
66export WAYLAND_DISPLAY=wayland-0
67
68# kactivitymanagerd: plasmashell ABORTA si no corre (registra su servicio D-Bus).
69KAMD=$(ls /usr/lib*/libexec/kactivitymanagerd 2>/dev/null | head -1)
70if [ -n "$KAMD" ]; then "$KAMD" >/tmp/kamd.log 2>&1 & sleep 2; echo "-- kactivitymanagerd lanzado"; fi
71
72echo "-- lanzando plasmashell…"
73/usr/bin/plasmashell >/tmp/plasmashell.log 2>&1 &
74sleep 8
75echo "-- procesos: $(ps axo comm 2>/dev/null | grep -E 'kwin|plasma' | sort -u | tr '\n' ' ')"
76echo
77echo "Escritorio arriba. Logs en /tmp/{kwin,kamd,plasmashell}.log"
78echo "Apps: konsole, dolphin, systemsettings, spectacle, okular… (lanzalas desde otra tty o krunner)"
79echo "Ctrl-C para terminar la sesión."
80wait $KWIN