121 lines
3.8 KiB
Bash
Executable File
121 lines
3.8 KiB
Bash
Executable File
#!/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; then
|
||
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
|
||
|
||
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
|