commit 12210c7c5cede4e25fa75186aab3d9dc7c1a936e Author: rokleine Date: Fri Jun 26 14:51:25 2026 +0200 Erster Upload diff --git a/ReadMe..txt b/ReadMe..txt new file mode 100644 index 0000000..cc49405 --- /dev/null +++ b/ReadMe..txt @@ -0,0 +1,9 @@ + +Autostart rotation beenden: +pkill -f rotate.sh && pkill -f chromium + +Rotation manuell starten: +~/kiosk/rotate.sh + +Desktop mit script neu starten: +sudo systemctl restart lightdm \ No newline at end of file diff --git a/open_brav.sh b/open_brav.sh new file mode 100644 index 0000000..ab61d1d --- /dev/null +++ b/open_brav.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +# Prüfen, ob eine URL übergeben wurde +if [ -z "$1" ]; then + echo "Fehler: Keine URL angegeben!" + echo "Nutzung: $0 [Zoom-Prozent]" + echo "Beispiel: $0 http://homeassistant:8123 125" + exit 1 +fi + +URL="$1" +ZOOM_PROZENT="${2:-100}" # Standardmäßig 100%, falls nichts angegeben wurde + +# Umrechnung von Prozent (z.B. 125) in Faktor (1.25) +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 + +# Display setzen +export DISPLAY=:0 + +# Monitor aufwachen lassen & Cursor verstecken erzwingen +xset s off +xset s noblank +xset -dpms +xset dpms force on +xsetroot -cursor_name blank + +# Laufenden Kiosk/Chromium killen + +pkill -9 -f rotate.sh +pkill -9 -f chromium +pkill -9 -f brave + +echo "Debug-Modus: Starte $URL mit $ZOOM_PROZENT% Zoom..." + +# Chromium direkt starten +brave-browser --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 \ + --enable-features=CookieDeprecationFacilitatedTesting,AutofillEnableCookieConsentDecline \ + --lang=de-DE \ + --accept-lang=de-DE,de,en-US,en \ + --disable-translate \ + "$URL" & + +echo "Gestartet: $URL" \ No newline at end of file diff --git a/open_chrome.sh b/open_chrome.sh new file mode 100644 index 0000000..a261d76 --- /dev/null +++ b/open_chrome.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# Prüfen, ob eine URL übergeben wurde +if [ -z "$1" ]; then + echo "Fehler: Keine URL angegeben!" + echo "Nutzung: $0 [Zoom-Prozent]" + echo "Beispiel: $0 http://homeassistant:8123 125" + exit 1 +fi + +URL="$1" +ZOOM_PROZENT="${2:-100}" # Standardmäßig 100%, falls nichts angegeben wurde + +# Umrechnung von Prozent (z.B. 125) in Faktor (1.25) +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 + +# Display setzen +export DISPLAY=:0 + +# Monitor aufwachen lassen & Cursor verstecken erzwingen +xset s off +xset s noblank +xset -dpms +xset dpms force on +xsetroot -cursor_name blank + +# Laufenden Kiosk/Chromium killen +pkill -9 -f rotate.sh +pkill -9 -f chromium + +echo "Debug-Modus: Starte $URL mit $ZOOM_PROZENT% Zoom..." + +# Chromium direkt starten +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 \ + --enable-features=CookieDeprecationFacilitatedTesting,AutofillEnableCookieConsentDecline \ + --lang=de-DE \ + --accept-lang=de-DE,de,en-US,en \ + --disable-translate \ + "$URL" & \ No newline at end of file diff --git a/playlist.csv b/playlist.csv new file mode 100644 index 0000000..0e1b0fd --- /dev/null +++ b/playlist.csv @@ -0,0 +1,15 @@ +Dauer;Von;Bis;zoom;URL +30;06:00;22:00;200;https://heise.de +120;00:00;23:59;150;https://monitoring.it.sus/SuS1/check_mk/login.py?_username=monitor&_password=monitormonitor&_login=1 +500;00:00;23:59;100;https://www.youtube.com/watch?v=wXPA2B3pZuU&list=PL4A2F331EE86DCC22 +500;00:00;23:59;100;https://www.youtube.com/watch?v=bN-mcmdrg4c +60;09:00;18:00;200;https://grafana.intern.sus/d/adwxbb4/telefon-pools-public? +180;06:00;22:00;150;http://homeassistant:8123/dashboard-kameras/1?hide_sidebar +180;06:00;22:00;150;http://homeassistant:8123/dashboard-kameras/0?hide_sidebar +120;00:00;23:59;150;https://monitoring.it.sus/SuS1/check_mk/login.py?_username=monitor&_password=monitormonitor&_login=1 +60;07:00;18:00;200;https://grafana.intern.sus/d/eecq3g0i0ln28d/benutzer-auf-standorte?orgId=1&kiosk +60;07:00;18:00;200;https://grafana.intern.sus/d/adtfkd9/notierungen-nach-region-med?orgId=1&from=now-1y&to=now&timezone=utc&var-artikel=101&var-type=OMR%20TAG&kiosk +60;13:00;17:00;200;https://grafana.intern.sus/d/fe9dblr3sui9sa/auftrage?orgid=1&kiosk +60;09:00;12:00;200;https://grafana.intern.sus/d/ce9v0kqqo4ni8d/umsatz-karte?orgid=1&kiosk +60;09:00;18:00;200;https://grafana.intern.sus/d/adzpp4h/telefonie-gesamt-public?kiosk +120;00:00;23:59;150;https://monitoring.it.sus/SuS1/check_mk/login.py?_username=monitor&_password=monitormonitor&_login=1 diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..e69de29 diff --git a/rotate.sh b/rotate.sh new file mode 100644 index 0000000..2268753 --- /dev/null +++ b/rotate.sh @@ -0,0 +1,102 @@ +#!/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 diff --git a/setup_kiosk.sh b/setup_kiosk.sh new file mode 100644 index 0000000..9de0404 --- /dev/null +++ b/setup_kiosk.sh @@ -0,0 +1,236 @@ +#!/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 <> /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 < "$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 < /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 < "$AUTOSTART_FILE" +# -------------------------------------------------- +# Openbox Autostart für Kiosk-Betrieb +# -------------------------------------------------- + +# 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 "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 \ No newline at end of file