#!/usr/bin/env bash # =========================================================================== # FOSFENO :: lanzador de escritorio (para el icono/app en Linux) # # A diferencia de ./fosfeno (que corre en primer plano y se cierra con Ctrl+C), # este arranca el servidor DESACOPLADO y abre las visuales + el panel, pensado # para lanzarse con doble clic desde el icono. No necesita terminal. # # ./fosfeno-launcher.sh arranca y abre FOSFENO # ./fosfeno-launcher.sh --stop cierra el servidor y la ventana de visuales # =========================================================================== set -u DIR="$(cd "$(dirname "$0")" && pwd)" PORT="${FOSFENO_PORT:-8080}" URL="http://localhost:${PORT}/" notify() { command -v notify-send >/dev/null 2>&1 && notify-send "FOSFENO" "$1" 2>/dev/null echo "FOSFENO: $1" } # --- cerrar --- if [ "${1:-}" = "--stop" ]; then pkill -f "fosfeno-stage" 2>/dev/null # ventana de visuales (Chromium --app) pkill -f "backend/server.py" 2>/dev/null # servidor notify "cerrado." exit 0 fi # --- comprobaciones --- if [ ! -x "$DIR/.venv/bin/python3" ]; then notify "no está instalado. Ejecuta primero: bash install.sh --laptop" exit 1 fi # --- servidor (desacoplado, solo si no responde ya) --- if ! curl -fsS -o /dev/null "$URL" 2>/dev/null; then FOSFENO_PORT="$PORT" FOSFENO_NO_KIOSK=1 \ setsid "$DIR/.venv/bin/python3" "$DIR/backend/server.py" \ > "$DIR/fosfeno-server.log" 2>&1 & # espera (hasta ~20 s) a que responda for _ in $(seq 1 40); do curl -fsS -o /dev/null "$URL" 2>/dev/null && break sleep 0.5 done fi # --- ventana de visuales (Chromium --app), solo si no está ya abierta --- BROWSER="$(command -v chromium-browser || command -v chromium \ || command -v google-chrome || true)" if [ -n "$BROWSER" ] && ! pgrep -f "fosfeno-stage" >/dev/null 2>&1; then setsid "$BROWSER" --app="${URL}stage" \ --user-data-dir="/tmp/fosfeno-stage" \ --use-fake-ui-for-media-stream \ --autoplay-policy=no-user-gesture-required \ >/dev/null 2>&1 & fi # --- panel de control en el navegador por defecto --- xdg-open "$URL" >/dev/null 2>&1 || true notify "en marcha — panel en ${URL}"