first commit
This commit is contained in:
120
sk.sh
Executable file
120
sk.sh
Executable 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; 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
|
||||
Reference in New Issue
Block a user