first commit

This commit is contained in:
stephan
2025-06-29 07:39:33 +02:00
commit 4ed4d69b21
20 changed files with 2754 additions and 0 deletions

120
safe_kiddo_user_control.sh Executable file
View File

@ -0,0 +1,120 @@
#!/bin/bash
# safe_kiddo_user_control.sh
# Deaktiviert/Aktiviert Userkonten mit optionalem Countdown, Sound und Shutdown nur bei aktivem Login
# Ausführen mit root-Rechten!
USER_TO_MANAGE="$1"
ACTION="$2"
COUNTDOWN_MODE="$3" # optional: "countdown"
SOUND_MODE="$4" # optional: "sound"
COUNTDOWN_TIME="$5" # optional: Sekundenanzahl (default 60)
if [[ -z "$COUNTDOWN_TIME" ]]; then
COUNTDOWN_TIME=60
fi
if [[ -z "$USER_TO_MANAGE" || -z "$ACTION" ]]; then
echo "Nutzung: $0 <username> <disable|enable> [countdown] [sound] [countdown_time_in_seconds]"
exit 1
fi
# Prüfe, ob notify-send verfügbar ist
if ! command -v notify-send &> /dev/null; then
echo "[WARNUNG] notify-send nicht gefunden. Bitte installiere libnotify-bin."
NOTIFY_AVAILABLE=false
else
NOTIFY_AVAILABLE=true
fi
# Prüfe, ob ein Sound-Tool verfügbar ist
if command -v paplay &> /dev/null; then
SOUND_PLAYER="paplay"
SOUND_FILE="/usr/share/sounds/freedesktop/stereo/dialog-warning.oga"
elif command -v aplay &> /dev/null;
SOUND_PLAYER="aplay"
SOUND_FILE="/usr/share/sounds/alsa/Front_Center.wav"
elif command -v canberra-gtk-play &> /dev/null; then
SOUND_PLAYER="canberra-gtk-play"
SOUND_FILE="dialog-warning"
else
SOUND_PLAYER=""
fi
function send_notify() {
local message="$1"
if [[ "$NOTIFY_AVAILABLE" == true ]]; then
sudo -u "$USER_TO_MANAGE" DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u $USER_TO_MANAGE)/bus notify-send "Safe Kiddo" "$message"
else
echo "[INFO] Benachrichtigung übersprungen: $message"
fi
}
function is_user_logged_in() {
who | grep -q "^$USER_TO_MANAGE "
}
function play_beep() {
if [[ "$SOUND_MODE" == "sound" ]]; then
if [[ "$SOUND_PLAYER" == "paplay" ]]; then
paplay "$SOUND_FILE" &
elif [[ "$SOUND_PLAYER" == "aplay" ]]; then
aplay "$SOUND_FILE" &
elif [[ "$SOUND_PLAYER" == "canberra-gtk-play" ]]; then
canberra-gtk-play -i "$SOUND_FILE" -d "SafeKiddo" &
else
echo -ne '\007'
fi
fi
}
case "$ACTION" in
disable)
echo "[*] Deaktiviere Benutzer $USER_TO_MANAGE..."
sudo usermod -L "$USER_TO_MANAGE"
USER_WAS_LOGGED_IN=false
if is_user_logged_in; then
USER_WAS_LOGGED_IN=true
echo "[*] Benutzer ist eingeloggt."
if [[ "$COUNTDOWN_MODE" == "countdown" ]]; then
echo "[*] Starte dramatischen Countdown über $COUNTDOWN_TIME Sekunden..."
for ((i=COUNTDOWN_TIME; i>0; i--)); do
send_notify "ACHTUNG! Shutdown in $i Sekunden!"
play_beep
sleep 1
done
else
echo "[*] Schicke Warnung (ohne Countdown)..."
send_notify "Shutdown in $COUNTDOWN_TIME Sekunden! Speicher dein Spiel!"
echo "[*] Warten für $COUNTDOWN_TIME Sekunden..."
sleep "$COUNTDOWN_TIME"
fi
else
echo "[*] Benutzer ist NICHT eingeloggt. Countdown und Shutdown werden übersprungen."
fi
echo "[*] Benutzer abmelden (falls noch eingeloggt)..."
sudo pkill -KILL -u "$USER_TO_MANAGE" || true # || true, damit es keinen Fehler gibt, wenn der User nicht gefunden wird
if [[ "$USER_WAS_LOGGED_IN" == true ]]; then
echo "[*] Rechner wird jetzt heruntergefahren..."
sudo shutdown now
else
echo "[*] Kein aktiver Login – kein Shutdown."
fi
;;
enable)
echo "[*] Aktiviere Benutzer $USER_TO_MANAGE..."
sudo usermod -U "$USER_TO_MANAGE"
echo "[*] Benutzer $USER_TO_MANAGE kann sich wieder einloggen."
;;
*)
echo "Ungültige Aktion: $ACTION"
echo "Erlaubt sind: disable oder enable"
exit 1
;;
esac