41 lines
1.3 KiB
Bash
Executable File
41 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
TAG="bootc-notifier"
|
|
|
|
# 1. Das eigentliche Upgrade ausführen und Output speichern
|
|
# Wir entfernen --quiet, damit wir den Output parsen können
|
|
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
|
|
|
|
logger -t "$TAG" "Neues Image geladen. Starte User-Benachrichtigung."
|
|
|
|
# 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"
|
|
|
|
# 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
|