diff --git a/scripts/notify-bootc-user.sh b/scripts/notify-bootc-user.sh new file mode 100644 index 0000000..784b210 --- /dev/null +++ b/scripts/notify-bootc-user.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# 1. Finde die ID der aktuell aktivsten Sitzung (die erste, die kein root ist) +# Wir suchen nach einer Session, die einen User hat, der nicht root ist. +SESSION_ID=$(loginctl list-sessions --no-legend | while read -r sid user class service; do + if [ "$user" != "root" ]; then +s echo "$sid"; break + fi +done) + +# Wenn keine User-Session gefunden wurde, beende das Skript +if [ -z "$SESSION_ID" ]; then + exit 0 +fi + +# 2. Ermittle den Benutzernamen und die UID dieser Session +TARGET_USER=$(loginctl show-session "$SESSION_ID" -p User --value) +TARGET_UID=$(id -u "$TARGET_USER") + +# Die einzige Variable, die wir wirklich brauchen, ist der D-Bus Pfad. +# Alles andere (wie WAYLAND_DISPLAY) übernimmt der D-Bus-Server von selbst, +# sobald die Nachricht bei ihm ankommt. +export XDG_RUNTIME_DIR="/run/user/$TARGET_UID" +export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$TARGET_UID/bus" + +# Wir nutzen 'sudo -u' und schicken die Nachricht direkt über den D-Bus. +# Wir lassen 'DISPLAY' weg, da notify-send kein Grafik-Protokoll braucht. +sudo -u "$TARGET_USER" \ + DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" \ + notify-send "System-Update verfügbar" \ + "Ein neues Image wurde installiert. Bitte starten Sie das System neu."