Terug | ๐Ÿ“บ setup-signage.sh โ€” Raspberry Pi infoscherm setup
cat <<'SH' > ~/setup-signage.sh
#!/usr/bin/env bash
set -euo pipefail

# === Basisinstellingen ===
TARGET_USER="${SUDO_USER:-$USER}"
TARGET_HOME="$(eval echo "~$TARGET_USER")"
KIOSK_DIR="$TARGET_HOME/kiosk"
AUTOSTART_DIR="$TARGET_HOME/.config/autostart"
ENV_FILE="$KIOSK_DIR/kiosk.env"

# Jouw default /edit-link (realtime weergave)
SHEET_URL_DEFAULT='https://docs.google.com/spreadsheets/d/1zVMa6gGbGdJjblgK7Uw6Dh4YEKDfx1djdFRlgzmylSY/edit?gid=0'

# --- Helpers ---
have() { command -v "$1" >/dev/null 2>&1; }
ask_tty() { # usage: ask_tty "Vraag" "default"
  local q="$1" d="${2:-}"
  read -rp "$q ${d:+[$d]}: " ans || true
  echo "${ans:-$d}"
}
whip_ask() { # usage: whip_ask "Titel" "Vraag" "default"
  local title="$1" text="$2" def="${3:-}"
  if have whiptail; then
    whiptail --title "$title" --inputbox "$text" 0 70 "$def" 3>&1 1>&2 2>&3 || true
  else
    ask_tty "$text" "$def"
  fi
}
whip_yesno() { # returns 0=Yes 1=No
  local title="$1" text="$2"
  if have whiptail; then
    whiptail --title "$title" --yesno "$text" 10 70
    return $?
  else
    read -rp "$text [y/N]: " yn || true
    [[ "${yn,,}" =~ ^y ]] && return 0 || return 1
  fi
}

echo "== Raspberry Pi infoscherm: installatie =="

# --- Updates & pakketten ---
sudo apt-get update
sudo apt-get install -y --no-install-recommends chromium-browser || true
if ! have chromium-browser; then
  sudo apt-get install -y --no-install-recommends chromium
fi
sudo apt-get install -y --no-install-recommends \
  unclutter xdotool realvnc-vnc-server fonts-noto fonts-noto-cjk fonts-noto-color-emoji \
  whiptail

# Tijdzone
sudo timedatectl set-timezone Europe/Brussels || true

# --- Mappen & basisconfig ---
mkdir -p "$KIOSK_DIR" "$AUTOSTART_DIR"

if [ ! -f "$ENV_FILE" ]; then
  cat > "$ENV_FILE" <<EOF
# ==== KIOSK INSTELLINGEN ====
# Google Sheet URL:
SHEET_URL="$SHEET_URL_DEFAULT"

# Rotatie: normal | left | right | inverted
ROTATE="normal"

# Resolutie (leeg = automatisch), bv: "1920x1080"
RESOLUTION=""

# Automatische refresh (seconden). 0 = uit
REFRESH_SECS=0

# Spoof user-agent om "browser niet ondersteund" te vermijden
USER_AGENT_SPOOF=1
USER_AGENT_STRING='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
EOF
  chown "$TARGET_USER":"$TARGET_USER" "$ENV_FILE"
fi

# --- URL bevestigen/aanpassen ---
CUR_URL="$(. "$ENV_FILE"; echo "${SHEET_URL:-}")"
NEW_URL="$(whip_ask "Google Sheet" "Plak je Google Sheet-link (enter om huidig te behouden)" "$CUR_URL")"
if [ -n "$NEW_URL" ]; then
  sed -i "s|^SHEET_URL=.*$|SHEET_URL=\"$NEW_URL\"|" "$ENV_FILE"
  CUR_URL="$NEW_URL"
fi

# --- Auto-refresh keuze ---
# Richtlijn: /edit => realtime (geen refresh nodig), /preview of publish => wรฉl refresh
DEFAULT_REFRESH=0
case "$CUR_URL" in
  *"/preview"*|*"pubhtml"* ) DEFAULT_REFRESH=300 ;;
  *"/edit"* ) DEFAULT_REFRESH=0 ;;
esac

if whip_yesno "Auto-refresh" "Auto-refresh inschakelen? (Aanrader bij /preview of 'Publiceren op het web')"; then
  REFRESH_SET="$(whip_ask "Auto-refresh" "Geef interval in seconden (bv. 300 = 5 min)" "$DEFAULT_REFRESH")"
  REFRESH_SET="${REFRESH_SET:-0}"
else
  REFRESH_SET=0
fi
sed -i "s|^REFRESH_SECS=.*$|REFRESH_SECS=$REFRESH_SET|" "$ENV_FILE"

# --- Launcher script ---
LAUNCHER="$KIOSK_DIR/kiosk-launcher.sh"
cat > "$LAUNCHER" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

# Laad instellingen
source "$(dirname "$0")/kiosk.env"

# Wacht tot X/desktop klaar is
export DISPLAY=:0
for i in {1..60}; do
  if xset q >/dev/null 2>&1; then break; fi
  sleep 1
done

# Verberg cursor en voorkom blanks (X11/XWayland; harmless op Wayland)
unclutter -idle 0 -root >/dev/null 2>&1 &
xset s off || true
xset -dpms || true
xset s noblank || true

# Resolutie/rotatie proberen
OUT="$(xrandr --query 2>/dev/null | awk '/ connected/{print $1; exit}')"
if [ -n "${RESOLUTION:-}" ] && [ -n "$OUT" ]; then
  xrandr --output "$OUT" --mode "$RESOLUTION" || true
fi
if [ -n "${ROTATE:-}" ] && [ "$ROTATE" != "normal" ] && [ -n "$OUT" ]; then
  xrandr --output "$OUT" --rotate "$ROTATE" || true
fi

# Bepaal Chromium-binary
CHROME_BIN="$(command -v chromium-browser || true)"
[ -z "$CHROME_BIN" ] && CHROME_BIN="$(command -v chromium || true)"
[ -z "$CHROME_BIN" ] && { echo "Chromium niet gevonden"; exit 1; }

# Flags
FLAGS=(--kiosk --incognito
  --noerrdialogs --disable-session-crashed-bubble
  --check-for-update-interval=31536000
  --disable-translate --disable-features=Translate,AutofillServerCommunication)

# User-agent spoof om 'browser niet ondersteund' te vermijden
if [ "${USER_AGENT_SPOOF:-0}" -eq 1 ] && [ -n "${USER_AGENT_STRING:-}" ]; then
  FLAGS+=(--user-agent="$USER_AGENT_STRING")
fi

URL="${SHEET_URL:-}"
if [ -z "$URL" ]; then
  echo "โš ๏ธ  Geen URL ingesteld in $(dirname "$0")/kiosk.env"
  exit 1
fi

# Optionele auto-refresh (Ctrl+R via xdotool)
if [ "${REFRESH_SECS:-0}" -gt 0 ]; then
  (
    while true; do
      sleep "$REFRESH_SECS"
      CHWIN="$(xdotool search --onlyvisible --class chromium 2>/dev/null | head -n1 || true)"
      [ -n "$CHWIN" ] && xdotool key --window "$CHWIN" ctrl+r || true
    done
  ) &
fi

# Herstart Chromium indien afgesloten
while true; do
  "$CHROME_BIN" "${FLAGS[@]}" "$URL" || true
  sleep 2
done
EOF
chmod +x "$LAUNCHER"
chown "$TARGET_USER":"$TARGET_USER" "$LAUNCHER"

# --- Autostart na login ---
DESKTOP_FILE="$AUTOSTART_DIR/kiosk.desktop"
cat > "$DESKTOP_FILE" <<EOF
[Desktop Entry]
Type=Application
Name=Kiosk
Exec=bash -lc '$LAUNCHER'
X-GNOME-Autostart-enabled=true
EOF
chown "$TARGET_USER":"$TARGET_USER" "$DESKTOP_FILE"

# --- VNC inschakelen ---
sudo systemctl enable --now vncserver-x11-serviced.service || true

# --- Screen blanking via raspi-config uitzetten (indien ondersteund) ---
if have raspi-config; then
  sudo raspi-config nonint do_blanking 1 || sudo raspi-config nonint do_blanking 0 || true
fi

# --- Statisch IP (optioneel) ---
if whip_yesno "Vast IP instellen" "Wil je nu een vast IP-adres configureren?"; then
  IFACE="$(whip_ask "Netwerkinterface" "Op welke interface (bv. eth0 of wlan0)?" "eth0")"
  IPADDR="$(whip_ask "IP-adres" "IP-adres (bv. 172.16.0.60)" "")"
  PREFIX="$(whip_ask "Subnet prefix" "Subnet-prefix (bv. 16 voor /16, 24 voor /24)" "16")"
  GATEWAY="$(whip_ask "Gateway" "Standaardgateway (bv. 172.16.0.1)" "")"
  DNSVAL="$(whip_ask "DNS" "DNS-server(s) gescheiden door komma (bv. 172.16.0.4,8.8.8.8)" "8.8.8.8,8.8.4.4")"

  if [ -z "$IFACE" ] || [ -z "$IPADDR" ] || [ -z "$PREFIX" ]; then
    echo "โš ๏ธ  Onvolledige IP-config. Overgeslagen."
  else
    if systemctl is-active --quiet NetworkManager && have nmcli; then
      CONN="$(nmcli -t -f NAME,DEVICE con show --active | awk -F: -v d="$IFACE" '$2==d{print $1;exit}')"
      if [ -z "$CONN" ]; then
        CONN="$(nmcli -t -f NAME,DEVICE con show | awk -F: -v d="$IFACE" '$2==d{print $1;exit}')"
        [ -z "$CONN" ] && CONN="signage-$IFACE-static"
        nmcli con add type ethernet ifname "$IFACE" con-name "$CONN" autoconnect yes || true
      fi
      nmcli con mod "$CONN" ipv4.method manual ipv4.addresses "$IPADDR/$PREFIX" ipv4.gateway "$GATEWAY" ipv4.dns "${DNSVAL// /,}" ipv6.method ignore || true
      nmcli con down "$CONN" >/dev/null 2>&1 || true
      nmcli con up "$CONN" || true
      echo "โœ… Vast IP via NetworkManager ingesteld op $IFACE: $IPADDR/$PREFIX"
    else
      sudo cp /etc/dhcpcd.conf /etc/dhcpcd.conf.bak.$(date +%s) || true
      sudo sed -i "/^interface $IFACE$/,/^$/d" /etc/dhcpcd.conf
      sudo bash -lc "cat >> /etc/dhcpcd.conf" <<EOC
interface $IFACE
static ip_address=$IPADDR/$PREFIX
static routers=$GATEWAY
static domain_name_servers=${DNSVAL//,/ }
EOC
      sudo systemctl restart dhcpcd || true
      echo "โœ… Vast IP via dhcpcd ingesteld op $IFACE: $IPADDR/$PREFIX"
    fi
  fi
fi

echo
echo "โœ… Setup rond. Kiosk start automatisch na inloggen."
echo "   VNC is geactiveerd (RealVNC), en scherm-blanking is uit."
echo
echo "โ„น๏ธ  Tip voor beste VNC-ervaring: zet desnoods Wayland uit:"
echo "    Menu โ†’ Preferences โ†’ Raspberry Pi Configuration โ†’ Advanced โ†’ Wayland: Disable"
echo "    en zet Auto Login aan (System-tab). Dit is 1x handmatig instellen."
echo
echo "Je kunt instellingen later wijzigen in:  $ENV_FILE"
echo "Reboot nu? (y/N)"
read -r rb
if [[ "${rb,,}" =~ ^y ]]; then sudo reboot; fi
SH
chmod +x ~/setup-signage.sh