Files
Kiosk-on-Debian/setup_kiosk.sh
T
2026-06-30 11:30:27 +02:00

269 lines
8.8 KiB
Bash

#!/bin/bash
# --- SYSTEMPRÜFUNG ---
if [ "$EUID" -ne 0 ]; then
echo "Bitte starte das Script als root (mit sudo)!"
exit 1
fi
REAL_USER=${SUDO_USER:-$USER}
if [ "$REAL_USER" = "root" ]; then
echo "Fehler: Bitte führe dieses Script mit 'sudo' aus einem normalen Benutzerkonto aus."
exit 1
fi
USER_HOME="/home/$REAL_USER"
KIOSK_DIR="$USER_HOME/kiosk"
SMB_PASSWORD="Eugen.23" # <--- HIER DEIN PASSWORT EINTRAGEN
echo "============================================="
echo "Starte Kiosk- und Samba-Setup für User: $REAL_USER"
echo "============================================="
# --- 1. ABHÄNGIGKEITEN INSTALLIEREN ---
echo "[1/5] Installiere X11-Basis, Openbox, LightDM, Samba, Chromium und Tools..."
apt update
apt install -y xserver-xorg openbox lightdm psmisc samba x11-xserver-utils unclutter git curl gpg chromium
# --- BRAVE BROWSER REPOSITORY & INSTALLATION ---
echo "Füge Brave-Repository hinzu und installiere Brave..."
curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg] https://brave-browser-apt-release.s3.brave.com/ stable main" | tee /etc/apt/sources.list.d/brave-browser-release.list
apt update
apt install -y brave-browser
# --- 2. VERZEICHNISSE & RECHTE EINRICHTEN ---
echo "[2/5] Erstelle Kiosk-Verzeichnis und setze Berechtigungen..."
mkdir -p "$KIOSK_DIR"
chmod 755 "$USER_HOME"
chmod 755 "$KIOSK_DIR"
# --- 3. SAMBA (MIT PASSWORT) KONFIGURIEREN ---
echo "[3/5] Konfiguriere Samba-Freigabe mit Passwortschutz..."
sed -i '/\[Kiosk\]/,+10d' /etc/samba/smb.conf
# Sichere, passwortgeschützte Freigabe anhängen
cat <<EOF >> /etc/samba/smb.conf
[Kiosk]
comment = Kiosk Playlist Freigabe
path = $KIOSK_DIR
browseable = yes
read only = no
valid users = $REAL_USER
force user = $REAL_USER
create mask = 0644
directory mask = 0755
EOF
echo "Setze Samba-Passwort automatisch für User: $REAL_USER..."
echo -e "$SMB_PASSWORD\n$SMB_PASSWORD" | smbpasswd -a "$REAL_USER"
systemctl restart smbd nmbd
# --- 4. BEISPIEL PLAYLIST.CSV ERSTELLEN ---
if [ ! -f "$KIOSK_DIR/playlist.csv" ]; then
echo "[4/5] Erstelle Beispiel-Playlist (playlist.csv)..."
cat <<EOF > "$KIOSK_DIR/playlist.csv"
Dauer;Von;Bis;Zoom;URL
20;06:00;22:00;100;https://heise.de
30;00:00;23:59;125;https://google.com
EOF
fi
# --- 5. ROTATIONS-SCRIPT ERSTELLEN ---
echo "[5/5] Erstelle Rotations-Script (rotate.sh)..."
cat <<'EOF' > "$KIOSK_DIR/rotate.sh"
#!/bin/bash
export DISPLAY=:0
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")
CSV_FILE="$SCRIPT_DIR/playlist.csv"
time_to_minutes() {
local hh=$(echo "$1" | cut -d: -f1)
local mm=$(echo "$1" | cut -d: -f2)
echo $(( 10#$hh * 60 + 10#$mm ))
}
while true; do
if [ ! -f "$CSV_FILE" ]; then
sleep 10
continue
fi
NOW_STR=$(date +"%H:%M")
NOW=$(time_to_minutes "$NOW_STR")
tail -n +2 "$CSV_FILE" | while IFS=';' read -r dauer von bis zoom_prozent url; do
dauer=$(echo "$dauer" | tr -d '\r' | xargs)
von=$(echo "$von" | tr -d '\r' | xargs)
bis=$(echo "$bis" | tr -d '\r' | xargs)
zoom_prozent=$(echo "$zoom_prozent" | tr -d '\r' | xargs)
url=$(echo "$url" | tr -d '\r' | xargs)
[ -z "$url" ] && continue
if [ -z "$zoom_prozent" ] || [ "$zoom_prozent" -eq 0 ]; then
zoom_prozent="100"
fi
if [ "$zoom_prozent" -eq 100 ]; then
zoom_factor="1.0"
elif [ ${#zoom_prozent} -eq 2 ]; then
zoom_factor="0.$zoom_prozent"
else
vorkomma=$(echo "$zoom_prozent" | sed 's/..$//')
nachkomma=$(echo "$zoom_prozent" | grep -o '..$')
zoom_factor="${vorkomma}.${nachkomma}"
fi
START=$(time_to_minutes "$von")
END=$(time_to_minutes "$bis")
IN_WINDOW=0
if [ $START -le $END ]; then
if [ $NOW -ge $START ] && [ $NOW -le $END ]; then
IN_WINDOW=1
fi
else
if [ $NOW -ge $START ] || [ $NOW -le $END ]; then
IN_WINDOW=1
fi
fi
if [ $IN_WINDOW -eq 1 ]; then
# Monitor aufwachen lassen & Cursor verstecken erzwingen
xset s off
xset s noblank
xset -dpms
xset dpms force on
xsetroot -cursor_name blank
# Stoppe laufende Instanzen (ohne dieses Skript selbst zu killen)
pkill -9 -v -f "$$" -f chromium
pkill -9 -v -f "$$" -f brave
# ==========================================
# BROWSER-AUSWAHL (Hier flexibel umschalten)
# ==========================================
# OPTION A: Brave Browser (Inkl. nativem Cookie-Blocker)
brave-browser --kiosk --no-first-run --new-window \
--ignore-certificate-errors \
--test-type \
--force-device-scale-factor="$zoom_factor" \
--user-data-dir=/tmp/brave-kiosk \
--disk-cache-dir=/tmp/brave-cache --disk-cache-size=1 \
--enable-features=BraveAdblockCookieListCp \
--autoplay-policy=no-user-gesture-required \
"$url" &
# OPTION B: Chromium (Falls gewünscht, Zeile oben auskommentieren und hier die Raute entfernen)
#chromium --kiosk --no-first-run --new-window \
# --ignore-certificate-errors \
# --test-type \
# --force-device-scale-factor="$zoom_factor" \
# --user-data-dir=/tmp/chromium-kiosk \
# --disk-cache-dir=/tmp/chromium-cache --disk-cache-size=1 \
# --autoplay-policy=no-user-gesture-required \
# --lang=de-DE \
# --accept-lang=de-DE,de,en-US,en \
# "$url" &
sleep "$dauer"
fi
done
done
EOF
# Eigentumsrechte und Ausführbarkeit für den Kiosk-Ordner korrigieren
chown -R "$REAL_USER":"$REAL_USER" "$KIOSK_DIR"
chmod +x "$KIOSK_DIR/rotate.sh"
# --- LIGHTDM AUTO-LOGIN KONFIGURIEREN ---
echo "Konfiguriere LightDM Auto-Login für $REAL_USER..."
mkdir -p /etc/lightdm/lightdm.conf.d
cat <<EOF > /etc/lightdm/lightdm.conf.d/80-kiosk-autologin.conf
[Seat:*]
autologin-user=$REAL_USER
autologin-user-timeout=0
session-wrapper=/etc/X11/Xsession
user-session=openbox
EOF
# --- OPENBOX AUTOSTART EINRICHTEN ---
OPENBOX_CONFIG_DIR="$USER_HOME/.config/openbox"
AUTOSTART_FILE="$OPENBOX_CONFIG_DIR/autostart"
ROTATE_SCRIPT="$USER_HOME/kiosk/rotate.sh"
echo "Konfiguriere Openbox Autostart für: $REAL_USER"
mkdir -p "$OPENBOX_CONFIG_DIR"
cat <<EOF > "$AUTOSTART_FILE"
echo "------------------------------------------------------------------"
echo " Openbox Autostart fuer Kiosk-Betrieb"
echo "------------------------------------------------------------------"
# Deaktiviere Bildschirmschoner und Standby auf X-Server-Ebene
xset s off
xset s noblank
xset -dpms
# Erzwinge systemweit einen leeren/unsichtbaren Mauszeiger von Beginn an
xsetroot -cursor_name blank &
# Verhindere, dass der Mauszeiger im Bild zu sehen ist (Fallback)
unclutter -idle 0.5 -root &
# Starte das Kiosk-Rotations-Script im Hintergrund
$ROTATE_SCRIPT &
EOF
chown -R "$REAL_USER":"$REAL_USER" "$USER_HOME/.config"
chmod 644 "$AUTOSTART_FILE"
# X11/Grafischen Modus als Standard setzen für den Bootvorgang
systemctl set-default graphical.target
echo "------------------------------------------------------------------"
echo " Konfiguriere LightDM, um den Bildschirm-Standby zu deaktivieren.."
echo "------------------------------------------------------------------"
# 1. Prüfen, ob die Datei existiert, wenn nicht, erstellen
if [ ! -f /etc/lightdm/lightdm.conf ]; then
touch /etc/lightdm/lightdm.conf
fi
# 2. Prüfen, ob die Sektion [Seat:*] existiert
if ! grep -q "^\[Seat:\*\]" /etc/lightdm/lightdm.conf; then
# Wenn [Seat:*] fehlt, fügen wir die Sektion samt Befehl am Ende ein
echo -e "\n[Seat:*]\nxserver-command=X -s 0 -dpms" >> /etc/lightdm/lightdm.conf
else
# Wenn [Seat:*] existiert, prüfen wir, ob xserver-command schon drin steht
if ! grep -q "xserver-command" /etc/lightdm/lightdm.conf; then
# Fügt den Befehl direkt unter der [Seat:*] Zeile ein
sed -i '/^\[Seat:\*\]/a xserver-command=X -s 0 -dpms' /etc/lightdm/lightdm.conf
else
# Falls xserver-command schon existiert, überschreiben wir es sicherheitshalber
sed -i 's|^xserver-command=.*|xserver-command=X -s 0 -dpms|' /etc/lightdm/lightdm.conf
fi
fi
echo "Bildschirm-Standby wurde erfolgreich angepasst."
echo "================================================"
echo "SETUP ERFOLGREICH BEENDET!"
echo "Starte das System jetzt neu mit: sudo reboot now"
echo "================================================"
echo "Im Falle von Updates starte ich den Desktop neu..."
systemctl restart lightdm