#!/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 mit jq # Wenn .status.staged gleich null ist, liefert jq den Exit-Code 0 (wahr) if $BOOTC status --json | jq -e '.status.staged == null' >/dev/null; then # KEIN Update gefunden $LOGGER -t "$TAG" "System aktuell (keine Updates vorhanden)." else # 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?" \ --app-name="System-Update" \ --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