#!/bin/bash # ============================================================= # Full Screen Player — Instalador Raspberry Pi / Linux # # Uso: # sudo bash install-raspberry.sh [SERVER_URL] # # Ejemplos: # sudo bash install-raspberry.sh https://fullscreen.com.ar/api # sudo bash install-raspberry.sh # interactivo # # Al abrir, el player muestra un CÓDIGO DE ACTIVACIÓN en pantalla. # Emparejalo desde el panel en: Pantallas → + Adoptar pantalla. # (No necesitás cargar ningún token manualmente.) # ============================================================= set -euo pipefail # ─── Colores ───────────────────────────────────────────────── RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m' CYAN='\033[0;36m'; BOLD='\033[1m'; NC='\033[0m' info() { echo -e "${CYAN}[INFO]${NC} $*"; } ok() { echo -e "${GREEN}[OK]${NC} $*"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } err() { echo -e "${RED}[ERROR]${NC} $*"; exit 1; } header() { echo -e "\n${BOLD}${CYAN}$*${NC}"; echo "──────────────────────────────────────────"; } # ─── Root check ────────────────────────────────────────────── [[ $EUID -ne 0 ]] && err "Ejecutá el script con sudo: sudo bash $0" # ─── Usuario objetivo ──────────────────────────────────────── PLAYER_USER="${SUDO_USER:-pi}" HOME_DIR=$(eval echo "~${PLAYER_USER}") INSTALL_DIR="${HOME_DIR}/.fullscreen" header "Full Screen Player — Instalador Raspberry Pi / Linux" # ─── Parámetros ────────────────────────────────────────────── SERVER_URL="${1:-https://fullscreen.com.ar/api}" if [[ -z "$SERVER_URL" ]]; then read -rp "URL del servidor (ej: https://fullscreen.com.ar/api): " SERVER_URL fi [[ -z "$SERVER_URL" ]] && err "SERVER_URL es requerido." SERVER_URL="${SERVER_URL%/}" # El player muestra un código de activación y se adopta desde el panel — no necesita token. PLAYER_URL="${SERVER_URL%/api*}/player/" info "Usuario : $PLAYER_USER" info "Directorio : $INSTALL_DIR" info "Player URL : $PLAYER_URL" # ─── Detectar entorno ───────────────────────────────────────── HAS_DESKTOP=false HAS_LIGHTDM=false IS_RPI=false [[ -f /etc/rpi-issue || -f /boot/config.txt || "$(uname -m)" =~ ^arm ]] && IS_RPI=true command -v lightdm &>/dev/null && HAS_LIGHTDM=true command -v startx &>/dev/null && HAS_DESKTOP=true [[ -n "${XDG_CURRENT_DESKTOP:-}" || -n "${DISPLAY:-}" ]] && HAS_DESKTOP=true # ─── Dependencias ───────────────────────────────────────────── header "Instalando dependencias" apt-get update -qq # Intentar instalar Chromium CHROMIUM_PKG="" for pkg in chromium-browser chromium; do if apt-cache show "$pkg" &>/dev/null 2>&1; then CHROMIUM_PKG="$pkg"; break; fi done [[ -z "$CHROMIUM_PKG" ]] && err "No se encontró chromium-browser ni chromium en los repositorios." PKGS=("$CHROMIUM_PKG" "unclutter" "xdotool") # Si no hay escritorio, instalar X11 mínimo if ! $HAS_DESKTOP; then warn "No se detectó entorno gráfico. Se instalará X11 mínimo." PKGS+=("xserver-xorg-core" "xserver-xorg-input-all" "x11-xserver-utils" "xinit" "openbox") fi apt-get install -y --no-install-recommends "${PKGS[@]}" 2>/dev/null || \ warn "Algunos paquetes no se pudieron instalar. Verificá manualmente." # Detectar ejecutable de Chromium CHROMIUM_BIN="" for bin in chromium-browser chromium; do command -v "$bin" &>/dev/null && { CHROMIUM_BIN="$bin"; break; } done [[ -z "$CHROMIUM_BIN" ]] && err "Chromium no encontrado tras la instalación." ok "Chromium: $CHROMIUM_BIN" # ─── Directorio e instalación ───────────────────────────────── header "Configurando player" mkdir -p "$INSTALL_DIR" # Config JSON cat > "$INSTALL_DIR/config.json" < "$INSTALL_DIR/xinitrc" </dev/null || true sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/g' "\$PREFS" 2>/dev/null || true fi # Lanzar Chromium en modo kiosk exec ${CHROMIUM_BIN} \\ --kiosk \\ --noerrdialogs \\ --disable-infobars \\ --no-first-run \\ --disable-translate \\ --disable-features=TranslateUI,OverscrollHistoryNavigation \\ --disable-pinch \\ --autoplay-policy=no-user-gesture-required \\ --disable-session-crashed-bubble \\ --check-for-update-interval=604800 \\ --disable-component-update \\ "${PLAYER_URL}" 2>/dev/null XEOF chmod +x "$INSTALL_DIR/xinitrc" # Script de inicio principal cat > "$INSTALL_DIR/start.sh" </dev/null else exec xinit "${INSTALL_DIR}/xinitrc" -- :0 vt\$(fgconsole 2>/dev/null || echo 1) fi STARTEOF chmod +x "$INSTALL_DIR/start.sh" chown -R "${PLAYER_USER}:${PLAYER_USER}" "$INSTALL_DIR" ok "Scripts creados en $INSTALL_DIR" # ─── Autostart según entorno ────────────────────────────────── header "Configurando inicio automático" if $HAS_LIGHTDM || $HAS_DESKTOP; then # ── Con escritorio: XDG autostart ────────────────────────── mkdir -p /etc/xdg/autostart cat > /etc/xdg/autostart/fullscreen-player.desktop <