#!/bin/bash # # SSH-Agent Neustart beim Bildschirmschoner (MATE Desktop) # Dieses Script startet den ssh-agent neu, wenn der Bildschirm gesperrt wird # LOG_FILE="$HOME/.ssh-agent-screenlock.log" SOCKET_PATH="$HOME/.ssh/agent.sock" # Check for existing instance pid_file="$HOME/.ssh-agent-watchdog.pid" if [ -f "$pid_file" ]; then old_pid=$(cat "$pid_file") if kill -0 "$old_pid" 2>/dev/null; then echo "Watchdog läuft bereits (PID: $old_pid). Beende alte Instanz..." kill "$old_pid" fi fi echo $$ > "$pid_file" STOP_LOCK="$HOME/.ssh-agent-watchdog.pause" log_message() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE" } restart_ssh_agent() { # Check if we are "paused" for large transfers if [ -f "$STOP_LOCK" ]; then log_message "SKIP: Bildschirm gesperrt, aber 'Deep Work' Modus aktiv (Pause-File gefunden)." return fi log_message "Bildschirm gesperrt - SSH-Agent wird neu gestartet" # Alte ssh-agent Prozesse beenden if [ -n "$SSH_AGENT_PID" ]; then kill "$SSH_AGENT_PID" 2>/dev/null log_message "SSH-Agent PID $SSH_AGENT_PID beendet" fi # Alle ssh-agent Prozesse des aktuellen Users beenden pkill -u "$USER" ssh-agent # SSH-Agent Umgebungsvariablen löschen unset SSH_AUTH_SOCK unset SSH_AGENT_PID # Alten Socket entfernen, falls vorhanden rm -f "$SOCKET_PATH" # Neuen ssh-agent starten und direkt an fixen Pfad binden # -a: bind address (socket path) eval "$(ssh-agent -a "$SOCKET_PATH" -s)" > /dev/null 2>&1 # Check if agent started successfully if [ -z "$SSH_AGENT_PID" ]; then log_message "FEHLER: SSH-Agent konnte nicht gestartet werden" return fi # Umgebungsvariablen in Datei speichern für andere Terminals # Dateiname angepasst an .bashrc des Users: ~/.ssh/agent-environment cat > "$HOME/.ssh/agent-environment" </dev/null # Grace-Period abschalten (Sofort sperren) gsettings set org.mate.screensaver lock-delay 0 2>/dev/null log_message "Bildschirm-Sperre erzwungen (lock-enabled true, lock-delay 0)" log_message "Watchdog gestartet (PID $$)." # Auf MATE Screensaver Events hören dbus-monitor --session "type='signal',interface='org.mate.ScreenSaver',member='ActiveChanged'" 2>/dev/null | while read -r line; do if echo "$line" | grep -q "boolean true"; then # Sofort sperren anfordern, falls noch nicht geschehen mate-screensaver-command --lock 2>/dev/null restart_ssh_agent # TODO: Idee - Terminal Hintergrund ändern via DBus (sehr spezifisch für Mate Terminal) # Experimentell: gsettings set org.mate.terminal.profile:/org/mate/terminal/profiles/default/ background-color '#000000' fi done