Files
fluffy-pancake/scripts/notify-bootc-user.sh
T

69 lines
2.1 KiB
Bash
Raw Normal View History

#!/bin/bash
2026-05-13 20:24:30 +02:00
# Pfade zu den Binaries
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"
2026-05-11 17:47:32 +02:00
# 1. Upgrade ausführen
2026-05-14 20:23:21 +02:00
# Das System lädt das Image im Hintergrund herunter
2026-05-13 20:24:30 +02:00
OUTPUT=$($BOOTC upgrade 2>&1)
EXIT_STATUS=$?
2026-05-13 20:24:30 +02:00
if [[ $EXIT_STATUS -ne 0 ]]; then
$LOGGER -t "$TAG" "Fehler beim Upgrade. Code: $EXIT_STATUS. Output: $OUTPUT"
exit 1
fi
2026-05-13 20:24:30 +02:00
# 2. Status-Check via JSON
2026-05-14 20:23:21 +02:00
# Prüfen, ob ein Image bereitsteht ("staged")
if $BOOTC status --json | grep -q '"staged"'; then
2026-05-13 20:24:30 +02:00
$LOGGER -t "$TAG" "Neues Image erfolgreich gestaged."
2026-05-14 20:23:21 +02:00
# 3. Den aktiven Desktop-User finden
2026-05-13 20:24:30 +02:00
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
2026-05-11 17:47:32 +02:00
echo "$user"
break
fi
done)
2026-05-13 20:24:30 +02:00
if [[ -n "$TARGET_USER" ]]; then
2026-05-14 20:23:21 +02:00
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)
2026-05-13 20:24:30 +02:00
$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
$LOGGER -t "$TAG" "Update bereit, aber kein aktiver Desktop-User gefunden."
2026-05-11 17:47:32 +02:00
fi
else
2026-05-13 20:24:30 +02:00
$LOGGER -t "$TAG" "System ist bereits aktuell."
fi