Soporte multi-distro en portatil, titulos mas grandes, panel mas ancho y refresco de microfono
install.sh --laptop ahora detecta el gestor de paquetes (apt, dnf, pacman o zypper) e instala las dependencias en Debian/Ubuntu/Mint, Fedora, Arch/Manjaro y openSUSE; en el resto avisa de los 5 paquetes a instalar a mano. En portatil no se compila projectM (opcional). Panel: titulo superior mas grande y cada titulo de tarjeta mas grande y en fuente Xirod; en pantalla ancha el panel ocupa el 94% (hasta 1600px) para aprovechar el portatil. Audio: nuevo boton 'Aplicar microfono' que reconecta la captura desde el panel (evento reacquire_audio); el microfono integrado del portatil se capta como entrada por defecto. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7ebb593288
commit
6df128a377
8 changed files with 172 additions and 62 deletions
163
install.sh
163
install.sh
|
|
@ -3,7 +3,7 @@
|
|||
# FOSFENO :: instalador para Raspberry Pi OS Bookworm (Raspberry Pi 4 y 5)
|
||||
#
|
||||
# Uso: bash install.sh # Raspberry Pi: instala todo
|
||||
# bash install.sh --laptop # portatil Linux (Debian/Ubuntu/Mint)
|
||||
# bash install.sh --laptop # portatil Linux (cualquier distro)
|
||||
# bash install.sh --no-projectm # omite la compilacion de projectM
|
||||
# bash install.sh --check # solo comprueba el sistema, no instala
|
||||
# ===========================================================================
|
||||
|
|
@ -46,11 +46,6 @@ fi
|
|||
|
||||
if [ "$LAPTOP" = "yes" ]; then
|
||||
log_ok "Modo portatil (Linux de escritorio)"
|
||||
if ! need_cmd apt-get; then
|
||||
log_fail "El modo --laptop usa apt (Debian, Ubuntu o Mint)."
|
||||
log_fail "Tu sistema no tiene apt; este instalador no sirve aqui."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
MODELO="$(pi_model)"
|
||||
log_info "Modelo detectado: $MODELO"
|
||||
|
|
@ -91,45 +86,117 @@ fi
|
|||
# ---------------------------------------------------------------------------
|
||||
# 2. Paquetes del sistema
|
||||
# ---------------------------------------------------------------------------
|
||||
log_step "[2/9] Instalando dependencias del sistema (apt)"
|
||||
sudo apt-get update
|
||||
if sudo apt-get install -y \
|
||||
python3 python3-venv python3-pip \
|
||||
git cmake build-essential pkg-config \
|
||||
libsdl2-dev libgles2-mesa-dev mesa-common-dev libglm-dev libpoco-dev \
|
||||
pulseaudio-utils \
|
||||
v4l-utils \
|
||||
avahi-daemon \
|
||||
xdotool unclutter; then
|
||||
log_ok "Paquetes apt instalados"
|
||||
else
|
||||
log_fail "Fallo al instalar paquetes apt"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Node.js y npm. Si ya estan (por ejemplo instalados desde NodeSource) no se
|
||||
# tocan: el paquete 'npm' de Debian entra en conflicto con el 'nodejs' de
|
||||
# NodeSource, y forzarlo rompe la instalacion entera.
|
||||
if need_cmd node && need_cmd npm; then
|
||||
log_ok "Node.js y npm ya estaban instalados ($(node --version 2>/dev/null))"
|
||||
elif need_cmd node; then
|
||||
warn "Node.js esta, pero falta npm; instalalo con el mismo metodo que node"
|
||||
elif sudo apt-get install -y nodejs npm 2>/dev/null; then
|
||||
log_ok "Node.js y npm instalados"
|
||||
else
|
||||
warn "no se pudo instalar Node.js; instalalo a mano (apt o NodeSource) y reintenta"
|
||||
fi
|
||||
# Instala las dependencias en un portatil. Soporta apt, dnf, pacman y zypper,
|
||||
# de modo que FOSFENO corre en Debian/Ubuntu/Mint, Fedora, Arch/Manjaro y
|
||||
# openSUSE. En portatil solo hace falta un nucleo pequeno (Python, Node, git
|
||||
# y Chromium): los motores de visuales son web y no necesitan nada mas.
|
||||
install_laptop_deps() {
|
||||
local mgr=""
|
||||
if need_cmd apt-get; then mgr="apt"
|
||||
elif need_cmd dnf; then mgr="dnf"
|
||||
elif need_cmd pacman; then mgr="pacman"
|
||||
elif need_cmd zypper; then mgr="zypper"
|
||||
else
|
||||
log_fail "No reconozco el gestor de paquetes de tu distribucion."
|
||||
log_fail "Instala a mano y reintenta: python3 (con venv), nodejs, npm,"
|
||||
log_fail "git y chromium."
|
||||
return 1
|
||||
fi
|
||||
log_info "Gestor de paquetes detectado: $mgr"
|
||||
|
||||
# El navegador se llama 'chromium' en Debian/Ubuntu/Mint actuales y
|
||||
# 'chromium-browser' en Raspberry Pi OS. Instalamos el que exista.
|
||||
if need_cmd chromium || need_cmd chromium-browser; then
|
||||
log_ok "Chromium ya estaba instalado"
|
||||
elif sudo apt-get install -y chromium 2>/dev/null; then
|
||||
log_ok "Chromium instalado (paquete 'chromium')"
|
||||
elif sudo apt-get install -y chromium-browser 2>/dev/null; then
|
||||
log_ok "Chromium instalado (paquete 'chromium-browser')"
|
||||
# --- Python y git ---
|
||||
case "$mgr" in
|
||||
apt) sudo apt-get update
|
||||
sudo apt-get install -y python3 python3-venv python3-pip git ;;
|
||||
dnf) sudo dnf install -y python3 python3-pip git ;;
|
||||
pacman) sudo pacman -Sy --needed --noconfirm python python-pip git ;;
|
||||
zypper) sudo zypper --non-interactive install python3 python3-pip git ;;
|
||||
esac || { log_fail "no se pudieron instalar Python y git"; return 1; }
|
||||
log_ok "Python y git instalados"
|
||||
|
||||
# --- Node.js y npm: solo si faltan (respeta NodeSource, nvm, etc.) ---
|
||||
if need_cmd node && need_cmd npm; then
|
||||
log_ok "Node.js y npm ya estaban ($(node --version 2>/dev/null))"
|
||||
else
|
||||
case "$mgr" in
|
||||
apt) sudo apt-get install -y nodejs npm ;;
|
||||
dnf) sudo dnf install -y nodejs npm ;;
|
||||
pacman) sudo pacman -S --needed --noconfirm nodejs npm ;;
|
||||
zypper) sudo zypper --non-interactive install nodejs npm ;;
|
||||
esac
|
||||
need_cmd node && need_cmd npm \
|
||||
&& log_ok "Node.js y npm instalados" \
|
||||
|| warn "no se pudo instalar Node.js; instalalo a mano y reintenta"
|
||||
fi
|
||||
|
||||
# --- Chromium ---
|
||||
if need_cmd chromium || need_cmd chromium-browser || need_cmd google-chrome; then
|
||||
log_ok "Chromium ya estaba instalado"
|
||||
else
|
||||
case "$mgr" in
|
||||
apt) sudo apt-get install -y chromium 2>/dev/null \
|
||||
|| sudo apt-get install -y chromium-browser ;;
|
||||
dnf) sudo dnf install -y chromium ;;
|
||||
pacman) sudo pacman -S --needed --noconfirm chromium ;;
|
||||
zypper) sudo zypper --non-interactive install chromium ;;
|
||||
esac
|
||||
need_cmd chromium || need_cmd chromium-browser \
|
||||
&& log_ok "Chromium instalado" \
|
||||
|| warn "no se pudo instalar Chromium; instalalo a mano (chromium o Chrome)"
|
||||
fi
|
||||
|
||||
# --- avahi: opcional, permite llegar al panel por nombre .local ---
|
||||
case "$mgr" in
|
||||
apt) sudo apt-get install -y avahi-daemon 2>/dev/null || true ;;
|
||||
dnf) sudo dnf install -y avahi 2>/dev/null || true ;;
|
||||
pacman) sudo pacman -S --needed --noconfirm avahi 2>/dev/null || true ;;
|
||||
zypper) sudo zypper --non-interactive install avahi 2>/dev/null || true ;;
|
||||
esac
|
||||
return 0
|
||||
}
|
||||
|
||||
log_step "[2/9] Instalando dependencias del sistema"
|
||||
if [ "$LAPTOP" = "yes" ]; then
|
||||
install_laptop_deps || { log_fail "Faltan dependencias; aborto."; exit 1; }
|
||||
else
|
||||
warn "no se pudo instalar Chromium automaticamente; instalalo a mano"
|
||||
sudo apt-get update
|
||||
if sudo apt-get install -y \
|
||||
python3 python3-venv python3-pip \
|
||||
git cmake build-essential pkg-config \
|
||||
libsdl2-dev libgles2-mesa-dev mesa-common-dev libglm-dev libpoco-dev \
|
||||
pulseaudio-utils \
|
||||
v4l-utils \
|
||||
avahi-daemon \
|
||||
xdotool unclutter; then
|
||||
log_ok "Paquetes apt instalados"
|
||||
else
|
||||
log_fail "Fallo al instalar paquetes apt"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Node.js y npm: si ya estan (p.ej. NodeSource) no se tocan, porque el
|
||||
# paquete 'npm' de Debian choca con el 'nodejs' de NodeSource.
|
||||
if need_cmd node && need_cmd npm; then
|
||||
log_ok "Node.js y npm ya estaban instalados ($(node --version 2>/dev/null))"
|
||||
elif need_cmd node; then
|
||||
warn "Node.js esta, pero falta npm; instalalo con el mismo metodo que node"
|
||||
elif sudo apt-get install -y nodejs npm 2>/dev/null; then
|
||||
log_ok "Node.js y npm instalados"
|
||||
else
|
||||
warn "no se pudo instalar Node.js; instalalo a mano y reintenta"
|
||||
fi
|
||||
|
||||
# Chromium: 'chromium' o 'chromium-browser' segun la version del sistema.
|
||||
if need_cmd chromium || need_cmd chromium-browser; then
|
||||
log_ok "Chromium ya estaba instalado"
|
||||
elif sudo apt-get install -y chromium 2>/dev/null; then
|
||||
log_ok "Chromium instalado (paquete 'chromium')"
|
||||
elif sudo apt-get install -y chromium-browser 2>/dev/null; then
|
||||
log_ok "Chromium instalado (paquete 'chromium-browser')"
|
||||
else
|
||||
warn "no se pudo instalar Chromium automaticamente; instalalo a mano"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
|
@ -141,7 +208,7 @@ require_version "Python" "python3 --version" "$MIN_PYTHON" \
|
|||
require_version "Node.js" "node --version" "$MIN_NODE" \
|
||||
|| warn "Node.js antiguo: 'npm install' podria fallar"
|
||||
require_version "npm" "npm --version" "$MIN_NPM" || true
|
||||
if [ "$SKIP_PM" = "no" ]; then
|
||||
if [ "$SKIP_PM" = "no" ] && [ "$LAPTOP" = "no" ]; then
|
||||
require_version "CMake" "cmake --version" "$MIN_CMAKE" \
|
||||
|| { warn "CMake antiguo: projectM no se compilara"; SKIP_PM="yes"; }
|
||||
fi
|
||||
|
|
@ -222,10 +289,14 @@ cd "$DIR"
|
|||
# 6. projectM nativo (compilado desde fuente)
|
||||
# ---------------------------------------------------------------------------
|
||||
log_step "[6/9] projectM (visualizador nativo)"
|
||||
if [ "$SKIP_PM" = "yes" ]; then
|
||||
log_info "projectM omitido"
|
||||
elif command -v projectMSDL >/dev/null 2>&1; then
|
||||
if command -v projectMSDL >/dev/null 2>&1; then
|
||||
log_ok "projectM ya estaba instalado ($(command -v projectMSDL))"
|
||||
elif [ "$LAPTOP" = "yes" ]; then
|
||||
log_info "projectM nativo no instalado (es opcional)."
|
||||
log_info "Los motores Butterchurn, Hydra, Shaders y Mezclador funcionan sin el."
|
||||
log_info "Si lo quieres, instala el paquete 'projectm' de tu distribucion."
|
||||
elif [ "$SKIP_PM" = "yes" ]; then
|
||||
log_info "projectM omitido"
|
||||
else
|
||||
log_info "Compilando projectM desde fuente (puede tardar 10-20 min en una Pi)..."
|
||||
if bash "$DIR/scripts/build-projectm.sh"; then
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue