Simplify user detection and notification logic
Refactor notification script to simplify user detection and logging.
This commit is contained in:
@@ -1,68 +1,45 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Pfade zu den Binaries
|
||||
# Pfade
|
||||
BOOTC="/usr/bin/bootc"
|
||||
LOGGER="/usr/bin/logger"
|
||||
LOGINCTL="/usr/bin/loginctl"
|
||||
NOTIFY="/usr/bin/notify-send"
|
||||
ID_BIN="/usr/bin/id"
|
||||
SUDO="/usr/bin/sudo"
|
||||
SYSTEMCTL="/usr/bin/systemctl"
|
||||
|
||||
TAG="bootc-timer"
|
||||
|
||||
# 1. Upgrade ausführen
|
||||
# Das System lädt das Image im Hintergrund herunter
|
||||
OUTPUT=$($BOOTC upgrade 2>&1)
|
||||
EXIT_STATUS=$?
|
||||
$BOOTC upgrade
|
||||
|
||||
if [[ $EXIT_STATUS -ne 0 ]]; then
|
||||
$LOGGER -t "$TAG" "Fehler beim Upgrade. Code: $EXIT_STATUS. Output: $OUTPUT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. Status-Check via JSON
|
||||
# Prüfen, ob ein Image bereitsteht ("staged")
|
||||
# 2. Status-Check
|
||||
if $BOOTC status --json | grep -q '"staged"'; then
|
||||
|
||||
$LOGGER -t "$TAG" "Neues Image erfolgreich gestaged."
|
||||
|
||||
# 3. Den aktiven Desktop-User finden
|
||||
TARGET_USER=$($LOGINCTL list-sessions --no-legend | while read -r id user rest; do
|
||||
S_TYPE=$($LOGINCTL show-session "$id" -p Type --value)
|
||||
S_STATE=$($LOGINCTL show-session "$id" -p State --value)
|
||||
|
||||
if [[ "$S_TYPE" =~ ^(x11|wayland)$ ]] && [[ "$S_STATE" == "active" ]]; then
|
||||
echo "$user"
|
||||
break
|
||||
fi
|
||||
done)
|
||||
# 3. Den ersten User finden, der nicht Root ist
|
||||
USER_ID=$($LOGINCTL list-users --no-legend | awk '$2 != "root" {print $1; exit}')
|
||||
|
||||
if [[ -n "$TARGET_USER" ]]; then
|
||||
USER_ID=$($ID_BIN -u "$TARGET_USER")
|
||||
|
||||
# 4. Benachrichtigung senden
|
||||
# env stellt sicher, dass die Variablen beim User ankommen
|
||||
ACTION=$($SUDO -u "$TARGET_USER" \
|
||||
env DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USER_ID/bus \
|
||||
XDG_RUNTIME_DIR=/run/user/$USER_ID \
|
||||
$NOTIFY "System-Update bereit" \
|
||||
"Ein neues Image wurde heruntergeladen. Jetzt neu starten?" \
|
||||
--icon=software-update-available \
|
||||
--urgency=critical \
|
||||
--action="reboot=Jetzt neu starten" \
|
||||
--wait)
|
||||
|
||||
$LOGGER -t "$TAG" "Benachrichtigung gesendet. Antwort: $ACTION"
|
||||
|
||||
# 5. Auswertung der Schaltfläche
|
||||
if [[ "$ACTION" == "reboot" ]]; then
|
||||
$LOGGER -t "$TAG" "User hat Neustart gewählt. Führe Reboot aus."
|
||||
$SYSTEMCTL reboot
|
||||
fi
|
||||
else
|
||||
if [[ -z "$USER_ID" ]]; then
|
||||
$LOGGER -t "$TAG" "Update bereit, aber kein aktiver Desktop-User gefunden."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 4. Benachrichtigung senden
|
||||
ACTION=$($SUDO -u "#$USER_ID" env \
|
||||
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USER_ID/bus \
|
||||
XDG_RUNTIME_DIR=/run/user/$USER_ID \
|
||||
$NOTIFY "System-Update bereit" \
|
||||
"Ein neues Image wurde heruntergeladen. Jetzt neu starten?" \
|
||||
--icon=software-update-available \
|
||||
--urgency=critical \
|
||||
--action="reboot=Jetzt neu starten" \
|
||||
--wait)
|
||||
|
||||
# 5. Auswertung
|
||||
if [[ "$ACTION" == "reboot" ]]; then
|
||||
$LOGGER -t "$TAG" "User hat Reboot gewählt."
|
||||
$SYSTEMCTL reboot
|
||||
fi
|
||||
else
|
||||
$LOGGER -t "$TAG" "System ist bereits aktuell."
|
||||
$LOGGER -t "$TAG" "System aktuell."
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user