Refactor bootc user notification script
This commit is contained in:
@@ -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 (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
|
||||
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user