#!/bin/bash TAG="bootc-notifier" # 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. 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" "Update erfolgreich heruntergeladen." # 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 RESPONSE=$(systemd-run --machine="$TARGET_USER@.host" \ --user \ --pipe \ --wait \ notify-send -a "System-Update" \ "Ein neues System-Update ist bereit." \ "Der Neustart aktiviert die Änderungen." \ --icon=system-reboot-symbolic \ --urgency=critical \ --action="reboot=Jetzt neu starten" \ --wait) # 5. Auswertung if [[ "$RESPONSE" == "reboot" ]]; then logger -t "$TAG" "User wählte Neustart über Benachrichtigungs-Button." systemctl reboot else logger -t "$TAG" "Benachrichtigung wurde geschlossen oder 'reboot' nicht geklickt." fi