diff --git a/scripts/kde/plasma-start-qemu.sh b/scripts/kde/plasma-start-qemu.sh index f1567a9f..29293725 100644 --- a/scripts/kde/plasma-start-qemu.sh +++ b/scripts/kde/plasma-start-qemu.sh @@ -88,6 +88,21 @@ EOF say "GPU DRM: $(ls /dev/dri/ 2>/dev/null | tr '\n' ' ')" [ -e /dev/dri/card0 ] || say "!! no hay /dev/dri/card0 — ¿virtio-gpu no cargó? (dmesg | grep -i drm)" +# D-Bus de SISTEMA: sin él, kf.solid/udisks2 spamea "Not connected to D-Bus server" y powerdevil + los +# applets de dispositivos/energía no inician. Escucha en el path estándar /run/dbus/system_bus_socket +# (los clientes lo hallan por DBUS_SYSTEM_BUS_ADDRESS por defecto ⇒ no exportamos nada). Corre como root +# y hace setuid a messagebus (uid 81, sembrado en el passwd de la imagen). No hay udisksd/upowerd reales +# en el rootfs ⇒ no habrá discos/batería, pero el bus existe y solid deja de errorear en cada poll. +mkdir -p /run/dbus /var/lib/dbus +cp -f /etc/machine-id /var/lib/dbus/machine-id 2>/dev/null || true +if [ ! -S /run/dbus/system_bus_socket ]; then + if dbus-daemon --system --fork 2>/tmp/dbus-system.log; then + say "system bus ON (/run/dbus/system_bus_socket)" + else + say "!! system bus NO arrancó:"; dump /tmp/dbus-system.log + fi +fi + # D-Bus de sesión if [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then DBUS_SESSION_BUS_ADDRESS=$(dbus-daemon --session --fork --print-address 2>/dev/null) diff --git a/scripts/kde/qemu-desktop-image.sh b/scripts/kde/qemu-desktop-image.sh index 5ec67228..7687227f 100755 --- a/scripts/kde/qemu-desktop-image.sh +++ b/scripts/kde/qemu-desktop-image.sh @@ -71,6 +71,22 @@ ln -sf /usr/lib/musl/lib/libc.so "$MERGED/lib/ld-musl-x86_64.so.1" # intérpre ln -sf /usr/lib/musl/lib/libc.so "$MERGED/usr/lib/libc.so" # NEEDED soname en el search path echo " ✓ musl inyectado ($(du -h "$MERGED/usr/lib/musl/lib/libc.so" | cut -f1))" +echo "==> usuario messagebus (el system bus de dbus hace setuid a él; falta en el passwd base)" +# dbus-daemon --system lee system.conf que hace messagebus ⇒ sin ese uid, arrancado como +# root, falla el setuid. Lo agregamos rompiendo el hardlink read-only del passwd/group base con `mv` +# (rename reemplaza la entrada de directorio sin tocar el inode fuente). uid/gid 81 = convención Alpine. +if ! grep -q '^messagebus:' "$MERGED/etc/passwd"; then + tmp="$MERGED/etc/passwd.new" + { cat "$MERGED/etc/passwd"; echo 'messagebus:x:81:81:messagebus:/dev/null:/sbin/nologin'; } > "$tmp" + chmod 644 "$tmp"; mv "$tmp" "$MERGED/etc/passwd" +fi +if ! grep -q '^messagebus:' "$MERGED/etc/group"; then + tmp="$MERGED/etc/group.new" + { cat "$MERGED/etc/group"; echo 'messagebus:x:81:'; } > "$tmp" + chmod 644 "$tmp"; mv "$tmp" "$MERGED/etc/group" +fi +echo " ✓ messagebus:81 en passwd/group" + echo "==> instalando /usr/bin/plasma-start (variante QEMU software-GL)" install -Dm755 scripts/kde/plasma-start-qemu.sh "$MERGED/usr/bin/plasma-start"