#!/bin/bash set -euo pipefail # Pfade BOOTC="/usr/bin/bootc" LOGGER="/usr/bin/logger" LOGINCTL="/usr/bin/loginctl" NOTIFY="/usr/bin/notify-send" SUDO="/usr/bin/sudo" SYSTEMCTL="/usr/bin/systemctl" TAG="bootc-timer" # 1. Upgrade ausführen $BOOTC upgrade # 2. Status-Check # PRÜFUNG ANGEPASST: Wir prüfen, ob der Status EXPLIZIT 'staged: null' enthält. # Wenn dies der Fall ist, bedeutet es "System aktuell". if $BOOTC status --json | grep -q '"staged": null"'; then # KEIN Update gefunden (Status ist null) $LOGGER -t "$TAG" "System aktuell (keine Updates vorhanden)." else # Ein Update ist gestaged oder der Status ist nicht null. Wir senden die Benachrichtigung. # 3. Den ersten User finden, der nicht Root ist USER_ID=$($LOGINCTL list-users --no-legend | awk '$2 != "root" {print $1; exit}') if [[ -z "$USER_ID" ]]; then # Update bereit, aber kein aktiver Desktop-User gefunden. Protokollieren und beenden. $LOGGER -t "$TAG" "Update bereit, aber kein aktiver Desktop-User gefunden." exit 0 fi # 4. Benachrichtigung senden (Im Kontext des Benutzers) 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 fi