#!/usr/bin/env bash set -euo pipefail die() { echo "ERROR: $*" >&2; exit 1; } warn() { echo "WARNING: $*" >&2; } [[ "${EUID}" -ne 0 ]] || die "Run as your regular user, not sudo." command -v firefox >/dev/null 2>&1 || die "Firefox is not installed or not in PATH." command -v systemctl >/dev/null 2>&1 || die "systemctl is not available." read -r -p "Enter the display location (e.g. Lobby): " LOCATION LOCATION="$( printf '%s' "$LOCATION" | tr '[:lower:]' '[:upper:]' | sed -E 's/[ _]+/-/g; s/[^A-Z0-9-]//g; s/-+/-/g; s/^-|-$//g' )" [[ -n "$LOCATION" ]] || die "Location can't be empty." HOSTNAME="DISPLAY-NVR-$LOCATION" [[ ${#HOSTNAME} -le 63 ]] || die "Hostname too long: $HOSTNAME" read -r -p "Enter the server URL (default: http://192.168.25.248): " URL_INPUT URL="${URL_INPUT:-http://192.168.25.248}" [[ "$URL" =~ ^https?:// ]] || die "URL must start with http:// or https://" read -r -p "Enter daily reboot time in HH:MM format (default: 06:00): " REBOOT_TIME REBOOT_TIME="${REBOOT_TIME:-06:00}" [[ "$REBOOT_TIME" =~ ^([01][0-9]|2[0-3]):[0-5][0-9]$ ]] || die "Invalid time format." APP_DIR="$HOME/.local/bin" AUTOSTART_DIR="$HOME/.config/autostart" XORG_CONF_DIR="/etc/X11/xorg.conf.d" LAUNCHER="$APP_DIR/launch-kiosk.sh" DESKTOP_FILE="$AUTOSTART_DIR/launch-kiosk.desktop" CONFIG_FILE="$HOME/.config/kiosk-display.conf" mkdir -p "$APP_DIR" "$AUTOSTART_DIR" "$HOME/.config" cat > "$CONFIG_FILE" < "$LAUNCHER" <&2 fi } trap cleanup EXIT if command -v xset >/dev/null 2>&1 && [[ -n "\${DISPLAY:-}" ]]; then xset s off || true xset -dpms || true xset s noblank || true fi exec firefox --kiosk "\$URL" EOF chmod 700 "$LAUNCHER" cat > "$DESKTOP_FILE" </dev/null <<'EOF' [Unit] Description=Reboot kiosk display computer [Service] Type=oneshot ExecStart=/usr/bin/systemctl reboot EOF sudo tee /etc/systemd/system/kiosk-daily-reboot.timer >/dev/null <