diff --git a/scripts/notify-bootc-user.sh b/scripts/notify-bootc-user.sh index 314f3f1..375dfea 100755 --- a/scripts/notify-bootc-user.sh +++ b/scripts/notify-bootc-user.sh @@ -2,20 +2,33 @@ TAG="bootc-notifier" -# 1. Das eigentliche Upgrade ausführen und Output speichern -# Wir entfernen --quiet, damit wir den Output parsen können +# 1. Upgrade ausführen +# --apply=false stellt sicher, dass bootc nicht selbstständig rebootet (falls konfiguriert) OUTPUT=$(/usr/bin/bootc upgrade 2>&1) EXIT_STATUS=$? -# 2. Prüfen: War der Befehl erfolgreich UND wurde ein neues Image bereitgestellt? -if [[ $EXIT_STATUS -eq 0 ]] && echo "$OUTPUT" | grep -iq "Queued for next boot"; then +# 2. Check: Erfolg + "Queued" oder "Staged" +# Wir suchen nach Mustern, die ein bereitliegendes Image bestätigen +if [[ $EXIT_STATUS -eq 0 ]] && echo "$OUTPUT" | grep -Ei -q "Queued|staged|Preparing"; then - logger -t "$TAG" "Neues Image geladen. Starte User-Benachrichtigung." + logger -t "$TAG" "Update erfolgreich heruntergeladen." -# 3. User finden -TARGET_USER=$(loginctl list-sessions --no-legend | awk '$3 != "root" {print $3; exit}') -USER_ID=$(id -u "$TARGET_USER") -RUNTIME_DIR="/run/user/$USER_ID" + # 3. User finden (Präziser für Fedora 44) + # Wir suchen den User der Session, die 'active' ist und einen grafischen Typ hat + TARGET_USER=$(loginctl list-sessions --no-legend | while read -r id user seat; do + if [[ "$(loginctl show-session "$id" -p Type --value)" =~ ^(x11|wayland)$ ]] && \ + [[ "$(loginctl show-session "$id" -p State --value)" == "active" ]]; then + echo "$user" + break + fi + done) + + if [ -z "$TARGET_USER" ]; then + logger -t "$TAG" "Kein aktiver Desktop-User gefunden. Benachrichtigung abgebrochen." + exit 0 + fi + + USER_ID=$(id -u "$TARGET_USER") # 4. Benachrichtigung senden via systemd-run # Wir nutzen --machine=$TARGET_USER@.host, um in die User-Session zu springen