kde/qemu: system D-Bus — mata el spam udisks2 y completa el escritorio
plasmashell/solid spameaba "kf.solid.backends.udisks2: Not connected to D-Bus server" en cada poll: sólo había bus de sesión, no de sistema. Ahora plasma-start levanta dbus-daemon --system (socket estándar /run/dbus/system_bus_socket). - qemu-desktop-image.sh: siembra el usuario messagebus:81 en passwd/group (system.conf hace setuid a él; el passwd base no lo traía). Rompe el hardlink read-only con `mv` de un temp, como el patch del seed. - plasma-start-qemu.sh: arranca el system bus antes del de sesión + copia machine-id a /var/lib/dbus. No hay udisksd/upowerd reales en el rootfs ⇒ sin discos/batería, pero el bus existe y solid deja de errorear. Verificado: "Not connected" pasó de spam continuo a 0; system bus ON; kwin+plasmashell+KSplash+kioworker vivos; 139=0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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 <user>messagebus</user> ⇒ 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"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user