Instaladores automatizados para crear kioskos de Arch Linux orientados a YARG (Yet Another Rhythm Game).
Repositorio oficial: Xalcker/MiniArch.
MiniArch mantiene cuatro caminos basados en Cage:
install-cage-yarg.sh: camino recomendado para YARG. Instala Arch Linux, Cage, Wayland/XWayland, YARG, audio, Samba y la carpeta de canciones en un solo flujo.install-cage-clonehero.sh: camino equivalente para Clone Hero. Instala Arch Linux, Cage, Wayland/XWayland, Clone Hero, audio, Samba y la carpeta de canciones en un solo flujo.install-cage-rpcs3.sh: camino para jugar Rock Band 3 (o cualquier juego de PS3) con el emulador RPCS3. Instala Arch Linux, Cage, RPCS3 (AppImage extraido a/opt/RPCS3), audio, Samba y la carpeta de juegos. Despues de configurar el emulador una vez, arranca solo el juego.install-cage-kiosk.sh: camino minimalista. Instala Arch Linux, Cage yfootsolamente, util como base de kiosko o terminal de mantenimiento.
En corto:
Recomendado: install-cage-yarg.sh
Clone Hero: install-cage-clonehero.sh
RPCS3: install-cage-rpcs3.sh (Rock Band 3 via emulador)
Minimal: install-cage-kiosk.sh
Cage es ideal para un equipo dedicado: ejecuta una sola aplicacion fullscreen y reduce la superficie de escritorio. El instalador tambien habilita XWayland para compatibilidad con builds de YARG que lo necesiten.
install-cage-yarg.sh es un orquestador modular. Reutiliza los modulos
compartidos de lib/ y mueve lo especifico a:
lib/kiosk_runtime.sh: prologo del wrapper, menu de mantenimiento y servicio systemdcage-kiosk.servicecompartidos por los tres kioscos.lib/cage.sh: sistema base Cage, usuario y wrapper/usr/local/bin/run-yarg.sh.lib/yarg.sh: descarga de YARG stable, stable-latest o nightly, settings iniciales, Samba, rendimiento y updater.lib/clonehero.sh: descarga de Clone Hero desde GitHub, carpeta compartida de canciones, Samba, updater y wrapper/usr/local/bin/run-clonehero.sh.lib/rpcs3.sh: descarga y extraccion del AppImage de RPCS3, firmware, carpeta de juegos, Samba, updater, menu de mantenimiento y wrapper/usr/local/bin/run-rpcs3.sh(arranque directo del juego).
install-cage-kiosk.sh conserva el particionado, GRUB, Plymouth opcional,
red y limpieza del instalador, pero arranca directamente foot dentro de Cage.
- Instalacion automatizada desde el live ISO de Arch Linux.
- Validacion de entorno, red, disco y passwords.
- Confirmacion antes de destruir particiones existentes.
- El disco del ISO live nunca es un destino valido; antes de particionar se limpian swap, montajes, LVM/RAID y firmas previas.
- Particionado GPT/UEFI (tamanos ajustables con
ESP_SIZE,ROOT_SIZEySWAP_SIZE):- ESP FAT32 en
/boot. - Root ext4 en
/. - Swap.
- Home ext4 en
/home.
- ESP FAT32 en
- GRUB UEFI con arranque silencioso.
- Plymouth opcional.
- PipeWire, WirePlumber, PipeWire Pulse, PipeWire ALSA, codecs y Bluetooth.
/etc/asound.confapuntando ALSA default a PipeWire.- Limpieza automatica de montajes y swap si la instalacion falla.
install-cage-yarg.sh instala y configura:
- Cage como compositor de kiosko.
- Wayland y XWayland.
- Mesa, Vulkan Intel/AMD y NVIDIA opcional.
- DBus de sesion para el wrapper de YARG.
- PipeWire iniciado en orden:
pipewire,wireplumber,pipewire-pulse. - YARG en
/opt/YARG. - Perfil persistente en
YARG_PERSISTENT_DATA_DIR. - Carpeta de canciones fija en
YARG_SONGS_DIR. - Enlace
/opt/YARG/Songsapuntando aYARG_SONGS_DIR. - Share Samba
YARG-Songs. - Usuario Samba para el usuario kiosko.
- Reglas HID para instrumentos
hidraw. - Dependencias multilib de YARG.
- Limites de tiempo real,
vm.swappiness=10ycpupoweren performance. - Updater
/usr/local/bin/update-yarg. - Servicio
cage-kiosk.service.
install-cage-clonehero.sh instala y configura:
- Cage como compositor de kiosko.
- Wayland y XWayland.
- Mesa, Vulkan Intel/AMD y NVIDIA opcional.
- DBus de sesion para el wrapper de Clone Hero.
- PipeWire iniciado en orden:
pipewire,wireplumber,pipewire-pulse. - Clone Hero en
/opt/CloneHero. - Perfil persistente en
CLONEHERO_DATA_DIR. - Carpeta de canciones fija en
CLONEHERO_SONGS_DIR. - Enlace
/home/kiosk/Songsapuntando a la carpeta de canciones. - Share Samba
CloneHero-Songs. - Usuario Samba para el usuario kiosko.
- Reglas HID para instrumentos
hidraw. - Updater
/usr/local/bin/update-clonehero. - Descargador
/home/kiosk/download-clonehero-songs.shusandolinks.csv. - Servicio
cage-kiosk.service.
install-cage-rpcs3.sh instala y configura:
- Cage como compositor de kiosko.
- Wayland y XWayland.
- Mesa, Vulkan Intel/AMD y NVIDIA opcional.
- RPCS3 en
/opt/RPCS3(AppImage extraido, no necesita FUSE). - Firmware oficial de PS3 descargado en
/home/kiosk/PS3UPDAT.PUP. - Carpeta de juegos
RPCS3_GAMES_DIR(por defecto/home/kiosk/Games). - Share Samba
RPCS3-Games. - Reglas HID para instrumentos
hidraw,libusbylibevdev. El camino RPCS3 agrega70-rpcs3-usb.rules(uaccesssobre dispositivos USB), porque RPCS3 abre los instrumentos por libusb y sin ese permiso falla conUnable to open ... device. vm.max_map_countalto, limites de tiempo real ycpupoweren performance.- Updater
/usr/local/bin/update-rpcs3. - Servicio
cage-kiosk.servicey wrapper/usr/local/bin/run-rpcs3.sh.
Requiere un disco de al menos 32 GB (RPCS3_MIN_DISK_GB): el juego y la cache
de shaders no caben en el /home de un disco de 16 GB.
install-cage-kiosk.sh instala:
- Cage como compositor de kiosko.
footcomo aplicacion unica.- Servicio
cage-kiosk.service. - SSH opcional.
- Arch Linux ISO actual.
- Maquina fisica o VM con UEFI habilitado.
- Disco de al menos 16 GB (32 GB para el camino RPCS3).
Esquema por defecto: ESP 512 MiB, root 8 GiB, swap 2 GiB y
/homecon el resto. En un disco de 16 GB/homequeda de ~5.5 GB, en 32 GB de ~21.5 GB y en 128 GB de ~117.5 GB. Ajustable conESP_SIZE,ROOT_SIZEySWAP_SIZE. - 2 GB de RAM o mas.
- Conexion a internet durante la instalacion (cable, o WiFi con
iwctl; ver "Conectarse a WiFi en el live"). - ImageMagick en el entorno live si vas a usar imagen personalizada de Plymouth.
En VM, habilita EFI/UEFI. En VirtualBox:
Sistema -> Placa base -> Habilitar EFI
En Proxmox, SPICE puede servir para probar audio virtual. En hardware real, PipeWire deberia usar la salida detectada por ALSA/WirePlumber.
Arranca desde el ISO de Arch Linux y verifica red:
ping -c 3 archlinux.orgSi no tienes cable de red, conectate por WiFi como se explica a continuacion.
El ISO de Arch Linux trae iwd y su cliente iwctl. Con cable de red no hace
falta nada de esto: DHCP funciona solo.
-
Abre la consola interactiva y localiza tu tarjeta WiFi (normalmente
wlan0):iwctl
[iwd]# device list [iwd]# station wlan0 scan [iwd]# station wlan0 get-networks [iwd]# station wlan0 connect "NombreDeTuRed"connectte pide la contrasena (no se muestra al escribirla). Sal conexit. Si el nombre de la red tiene espacios, ponlo entre comillas. -
Comprueba que hay conexion antes de seguir:
ping -c 3 archlinux.org
Si tarda unos segundos en responder, espera: la direccion IP se asigna despues de asociarte a la red.
Forma corta, sin entrar a la consola (la contrasena queda en el historial de la sesion live, que es temporal):
iwctl --passphrase "TuContrasena" station wlan0 connect "NombreDeTuRed"Casos que se salen de lo normal:
| Situacion | Que hacer |
|---|---|
device list no muestra nada |
rfkill list; si dice Soft blocked: yes, rfkill unblock wifi |
| El dispositivo aparece apagado | iwctl device wlan0 set-property Powered on y, si hace falta, iwctl adapter phy0 set-property Powered on |
| Red oculta (sin SSID visible) | iwctl station wlan0 connect-hidden "NombreDeTuRed" |
| Ver el estado de la conexion | iwctl station wlan0 show |
| Redes empresariales (WPA Enterprise) | No se configuran con connect; necesitan un archivo de perfil de iwd. Usa cable o un hotspot del telefono. |
El nombre de la interfaz no es wlan0 |
Usa el que muestre iwctl device list (por ejemplo wlp2s0) |
El live usa iwd y el sistema instalado NetworkManager, que no comparten perfiles.
Por eso el instalador copia las redes que iwd guardo en el live
(/var/lib/iwd) al sistema instalado como perfiles de NetworkManager
(/etc/NetworkManager/system-connections/, permisos 600), y el kiosko arranca ya
conectado. Con cable no hay nada que copiar. Se desactiva con COPY_LIVE_WIFI=false
(la contrasena queda guardada en el sistema instalado, como hace NetworkManager). Si
la red no se pudo copiar (por ejemplo, un nombre con ; o \, o redes
empresariales), el WiFi se configura en el kiosko desde el menu de mantenimiento
con la opcion 2) Configurar WiFi, o por consola con nmtui / nmcli.
Sin red en el primer arranque, los servicios que esperan network-online.target
(como nmb, el servicio de nombres de Samba) agotan su tiempo y quedan fallidos
hasta el siguiente arranque.
Clona el repositorio:
pacman -Sy git imagemagick
git clone https://github.com/Xalcker/MiniArch.git
cd MiniArchCopia el ejemplo de configuracion si quieres una instalacion repetible:
cp .env.example .env
nano .envPara Cage/YARG, .env es opcional. Si no existe, install-cage-yarg.sh
pregunta lo necesario en modo asistido: usuario, passwords, hostname, timezone,
red, disco, NVIDIA, canal/resolucion de YARG y menu de salida.
Si usas .env, define al menos:
DISK_DEVICE=ask
KIOSK_USER=kiosk
KIOSK_PASSWORD=una-contrasena-real
ROOT_PASSWORD=otra-contrasena-real
KIOSK_HOSTNAME=minikiosk
TIMEZONE=America/Phoenix
ENABLE_SSH=false
INSTALL_NVIDIA=false
ALLOW_INSECURE_DEFAULT_PASSWORD=false
ENABLE_PLYMOUTH=true
YARG_RELEASE_CHANNEL=ask
YARG_SONGS_DIR=/home/${KIOSK_USER}/Songs
YARG_PERSISTENT_DATA_DIR=/home/${KIOSK_USER}/.config/yarg-kiosk
YARG_RESOLUTION=ask
YARG_FORCE_SOFTWARE_RENDER=false
YARG_EXIT_MENU=alwaysEl .env no se ejecuta como script: el instalador lo lee linea por linea
como CLAVE=valor y nunca evalua el valor (no hay sustitucion de comandos).
# Comentario
KIOSK_USER=kiosk # sin comillas: literal; " #" inicia un comentario
KIOSK_PASSWORD='pa$$w0rd&x;(y)!' # comillas simples: totalmente literal (recomendado para passwords)
ROOT_PASSWORD="con \"comillas\" y \\" # comillas dobles: admiten \\ \" \$ \`
YARG_SONGS_DIR=/home/${KIOSK_USER}/Songs # solo se expande ${NOMBRE} (con llaves)- Un
$suelto no se expande:pa$$wordqueda tal cual. - Una linea que no sea
CLAVE=valor, unas comillas sin cerrar o una variable reservada (PATH,IFS,HOME,LD_PRELOAD, ...) detienen la instalacion con el numero de linea del problema. - Se aceptan finales de linea CRLF (por si editas el archivo en Windows).
Ejecuta el camino recomendado:
chmod +x install-cage-yarg.sh
./install-cage-yarg.shClone Hero:
chmod +x install-cage-clonehero.sh
./install-cage-clonehero.shRock Band 3 con RPCS3 (disco de al menos 32 GB):
chmod +x install-cage-rpcs3.sh
./install-cage-rpcs3.shCage/foot minimal:
chmod +x install-cage-kiosk.sh
./install-cage-kiosk.shAdvertencia: los instaladores destruyen el disco seleccionado. Con
DISK_DEVICE=ask, el instalador muestra un selector interactivo con los discos
detectados, marca USB/removibles y pide confirmar escribiendo INSTALAR.
Tambien acepta instalar.
Tambien puedes fijar DISK_DEVICE manualmente, por ejemplo /dev/sda,
/dev/nvme0n1 o /dev/vda; aun asi el instalador mostrara el selector para
evitar errores antes de particionar.
Proteccion del disco: el selector oculta el disco del que arrancaste el ISO
(el USB de instalacion, detectado desde /run/archiso/bootmnt) y rechaza
escribirlo a mano o fijarlo en .env, incluidas sus particiones. Antes de
particionar, el instalador desactiva el swap y desmonta lo que este usando el
disco destino, detiene volumenes LVM/RAID heredados y borra las firmas
previas (wipefs y sgdisk --zap-all) para que firmas viejas no se reactiven
ni bloqueen parted o mkfs.
install-cage-yarg.sh ejecuta, en orden:
- Carga
.envsi existe; si no existe, entra en modo asistido. - Pregunta valores faltantes o interactivos de la configuracion.
- Muestra el selector de disco (sin el USB del ISO live) y confirma el destino.
- Detecta la GPU NVIDIA y pregunta si
INSTALL_NVIDIAesta vacio; en GPU anteriores a Turing omite el driver. - Pregunta por canal de YARG si
YARG_RELEASE_CHANNEL=ask. - Pregunta por resolucion de YARG si
YARG_RESOLUTION=ask. - Valida entorno live, passwords, assets opcionales, red, disco y esquema de particiones.
- Resuelve el release mas reciente si se eligio
stable-latestonightly. - Libera y limpia el disco (swap, montajes, LVM/RAID, firmas), particiona, formatea y monta.
- Instala Arch base, Cage, Wayland/XWayland, Samba, dbus y stack grafico.
- Genera
fstab. - Configura hostname, locale, root, GRUB, Plymouth y NVIDIA si aplica.
- Instala audio, codecs y Bluetooth desde
lib/drivers.sh. - Crea usuario kiosko y sudoers.
- Habilita multilib y dependencias 32-bit de YARG.
- Configura HID.
- Descarga e instala YARG.
- Crea
settings.jsoncon la carpeta fija de canciones. - Configura Samba.
- Aplica optimizaciones de rendimiento.
- Crea
update-yarg,run-yarg.shycage-kiosk.service. - Configura red, target grafico y limpieza visual.
- Desmonta particiones y desactiva swap.
YARG_RELEASE_CHANNEL acepta:
stable: usa exactamenteYARG_URL.stable-latest: consulta el ultimo release estable deYARC-Official/YARG.nightly: consulta el ultimo release deYARC-Official/YARG-BleedingEdge.ask: pregunta durante la instalacion.
El prompt actual es:
Canal de YARG: stable fijo, stable-latest o nightly? [stable/stable-latest/nightly] (stable):
sudo update-yarg respeta el canal instalado. En stable usa YARG_URL; en
stable-latest consulta el latest estable; en nightly consulta el latest de
YARG-BleedingEdge antes de descargar.
Despues de reiniciar, systemd inicia:
cage-kiosk.service
El servicio ejecuta:
/usr/bin/dbus-run-session -- /usr/local/bin/run-yarg.sh
El wrapper:
- Aplica ajustes de render software si detecta VM.
- Valida DBus de sesion; normalmente ya viene creado por systemd mediante
dbus-run-session. - Exporta variables Wayland/Cage.
- Arranca PipeWire, WirePlumber y PipeWire Pulse en orden.
- Espera unos segundos a que exista un sink Pulse/PipeWire; si no aparece, lanza YARG de todos modos y deja el aviso en journal.
- Busca un binario ejecutable
YARG*en/opt/YARG. - Lanza YARG con
-persistent-data-path. - Al salir de YARG, abre un menu de mantenimiento en
foot. - Abre el menu de mantenimiento como fallback si no encuentra YARG.
El menu de mantenimiento permite:
- Configurar sonido con
pulsemixer. - Configurar WiFi con
nmtuionmcli. - Ver direccion IP.
- Salir a una shell temporal.
- Volver a YARG.
- Actualizar YARG Stable o YARG Nightly, segun el canal instalado.
- Reiniciar
cage-kiosk.service. - Apagar el kiosko.
YARG_EXIT_MENU controla que pasa al cerrar YARG:
always: muestra el menu de mantenimiento.restart: vuelve a lanzar YARG sin mostrar menu.never: sale del wrapper.
El perfil fijo se crea en:
/home/kiosk/.config/yarg-kiosk/settings.json
Con contenido equivalente a:
{
"SongFolders": [
"/home/kiosk/Songs"
],
"ShowAntiPiracyDialog": false,
"ShowEngineInconsistencyDialog": false,
"ShowExperimentalWarningDialog": false
}Esto evita depender del selector de archivos para la operacion normal del kiosko. El boton Browse puede funcionar en builds nightly recientes, pero el flujo recomendado sigue siendo subir canciones por Samba y escanear desde YARG.
Share Samba:
\\<hostname>\YARG-Songs
Con hostname por defecto:
\\minikiosk\YARG-Songs
Ruta local:
/home/kiosk/Songs
Ruta de compatibilidad dentro de YARG:
/opt/YARG/Songs -> /home/kiosk/Songs
Actualizar YARG:
sudo update-yargDescargar canciones desde CSV:
~/download-yarg-songs.shEl instalador crea o copia ~/links.csv (el links.csv de la raiz del repo si
existe). Cada linea puede ser nombre,url o solo una URL; antes de descargar,
el script pregunta por cada enlace, y los ZIP pueden extraerse directamente en
la carpeta Songs. Admite enlaces publicos de Google Drive.
Despues de reiniciar, systemd inicia:
cage-kiosk.service
El servicio ejecuta:
/usr/bin/dbus-run-session -- /usr/local/bin/run-clonehero.sh
El wrapper busca Clone Hero en /opt/CloneHero, lo lanza fullscreen dentro de
Cage y abre el menu de mantenimiento al salir, salvo que CLONEHERO_EXIT_MENU
este en restart o never.
Share Samba:
\\<hostname>\CloneHero-Songs
Con hostname por defecto del camino Clone Hero:
\\miniclonehero\CloneHero-Songs
Ruta local:
/home/kiosk/Songs
Actualizar Clone Hero:
sudo update-cloneheroTambien se puede actualizar desde el menu de mantenimiento con la opcion
Actualizar Clone Hero.
Descargar canciones desde CSV:
~/download-clonehero-songs.shEl instalador crea o copia ~/links.csv. Cada linea puede ser nombre,url o
solo una URL. Los ZIP pueden extraerse directamente en la carpeta Songs.
RPCS3 no se puede configurar de forma desatendida: hay que instalar el firmware, agregar el juego y mapear los controles una vez. El kiosko lo hace asi:
- En el primer arranque
run-rpcs3.shno encuentra el juego y abre la GUI de RPCS3. - En la GUI:
File > Install Firmwarey elige/home/kiosk/PS3UPDAT.PUP; agrega o instala el juego (disco volcado en/home/kiosk/Games, o PKG/DLC); configura guitarras, bateria, microfono y mandos enPads. Para mandos e instrumentos que no son originales de PS3, elHandlerdebe serevdev(ya estanlibevdevy el grupoinput). - Cierra RPCS3. A partir de ahi, el wrapper busca el juego y lo lanza con
rpcs3 --no-gui <EBOOT.BIN>.
Rock Band 3, los DLC y el firmware de PS3 no se distribuyen con MiniArch: tu
aportas tu propio volcado del juego. El firmware se descarga desde los
servidores oficiales de PlayStation (RPCS3_FIRMWARE_URL).
Como encuentra el juego el wrapper, en orden:
RPCS3_GAME_PATH, si esta definida y existe.- Un archivo
.isoenRPCS3_GAMES_DIRcuyo nombre contieneRPCS3_GAME_MATCH(por defectoRock Band 3, sin distinguir mayusculas). - El primer
PARAM.SFOcuyo titulo contieneRPCS3_GAME_MATCH, en un juego en carpeta (estructura<juego>/PS3_GAME/) dentro deRPCS3_GAMES_DIRo en~/.config/rpcs3/dev_hdd0/disc(volcados agregados desde la GUI). - Solo si no hay disco, un juego instalado en
~/.config/rpcs3/dev_hdd0/game. Un paquete de actualizacion como RB3DX tambien aparece ahi, pero sin los datos del juego base no arranca por si solo; RPCS3 lo aplica al lanzar el ISO o la carpeta del juego base.
Si no lo encuentra abre la GUI. Desde el menu de mantenimiento (aparece al
salir del juego, salvo RPCS3_EXIT_MENU=restart o never) la opcion
Abrir RPCS3 vuelve a abrir la GUI para cambiar controles o agregar juegos.
Share Samba para subir juegos:
\\<hostname>\RPCS3-Games
Con hostname por defecto: \\minirpcs3\RPCS3-Games.
Actualizar RPCS3 (tambien desde el menu de mantenimiento):
sudo update-rpcs3El updater extrae el AppImage nuevo aparte y solo reemplaza /opt/RPCS3 si
la extraccion salio bien.
Si ya tienes la ultima version (compara la URL del AppImage con la que guardo la
instalacion en /opt/RPCS3/.rpcs3-url), no descarga nada y avisa; sudo update-rpcs3 --force
la reinstala igual. Una instalacion anterior sin esa marca descarga una vez.
El enlace /usr/share/rpcs3 -> /opt/RPCS3/usr/share/rpcs3 (lo crean el instalador y el updater) deja
que RPCS3 encuentre sus iconos y recursos, que viven dentro del AppImage extraido.
El camino minimal install-cage-kiosk.sh inicia el mismo servicio
cage-kiosk.service, pero ejecuta:
/usr/bin/dbus-run-session -- /usr/local/bin/run-cage-foot.sh
El wrapper abre foot como aplicacion unica dentro de Cage. Es util para un
kiosko base, diagnostico o para instalar tu propia aplicacion despues.
Variables comunes:
DISK_DEVICE: disco destino. Por defectoask, muestra selector interactivo.ESP_SIZE,ROOT_SIZE,SWAP_SIZE: tamanos de las particiones (numero conMoG; por defecto512M,8Gy2G)./homeocupa el resto del disco. Minimos: ESP 256M, root 4G, swap 512M y 2 GiB libres para/home; el instalador valida el esquema antes de pedir confirmacion.KIOSK_USER: usuario kiosko.KIOSK_PASSWORD: password del usuario kiosko.TIMEZONE: zona horaria.ENABLE_SSH: habilita OpenSSH si esta entrue.COPY_LIVE_WIFI:true(por defecto) copia al sistema instalado las redes WiFi queiwdguardo en el live, como perfiles de NetworkManager, para que el kiosko arranque ya conectado (ver "Conectarse a WiFi en el live").falseno las copia.ALLOW_INSECURE_DEFAULT_PASSWORD: permite passwords de ejemplo solo para laboratorio.ENABLE_PLYMOUTH: habilita/deshabilita Plymouth.PLYMOUTH_THEME_NAME: nombre del tema Plymouth.PLYMOUTH_IMAGE_PATH: imagen PNG opcional para Plymouth. En Cage/YARG y Cage/Clone Hero, si se deja el valor por defecto, el instalador elige primero un asset por camino y resolucion.PLYMOUTH_TARGET_RESOLUTION: resolucion final usada para preparar la imagen de Plymouth. En Cage/YARG y Cage/Clone Hero se calcula desde la resolucion elegida.CURSOR_PATH: cursor personalizado (por defecto./assets/cursor/, que traeguitar-pick-left.png). Los caminos YARG, Clone Hero y RPCS3 lo instalan como temaMiniArchPick(conxcursorgen); el camino foot no lo usa.LOG_FILE: archivo donde se guarda la salida detallada de la instalacion.VERBOSE_INSTALL: si estrue, muestra en consola la salida completa depacman,pacstrap,unzip,grub-mkconfig, etc. Por defecto esfalse.
Variables de Cage/YARG:
ROOT_PASSWORD: password de root. Cage lo exige con valor real.KIOSK_HOSTNAME: hostname. Por defectominikiosk(YARG y foot),miniclonehero(Clone Hero) ominirpcs3(RPCS3).INSTALL_NVIDIA:true,falseo vacio para preguntar. Instalanvidia-openynvidia-utils, que solo soportan GPU Turing o mas nuevas (GTX 16xx, RTX 20xx en adelante). Ver "NVIDIA y tarjetas anteriores a Turing".NVIDIA_SKIP_GPU_CHECK:trueomite la deteccion de GPU (ver mas abajo).YARG_RELEASE_CHANNEL:stable,stable-latest,nightlyoask.YARG_URL: ZIP estable de YARG.YARG_STABLE_API_URL: endpoint del ultimo release estable.YARG_STABLE_ASSET_REGEX: patron usado para elegir el ZIP Linux estable.YARG_NIGHTLY_API_URL: endpoint del ultimo nightly.YARG_NIGHTLY_ASSET_REGEX: patron para elegir el ZIP Linux del nightly.YARG_SONGS_DIR: carpeta local de canciones. Por defecto/home/${KIOSK_USER}/Songs;/opt/YARG/Songsse crea como enlace hacia esta ruta para compatibilidad.YARG_PERSISTENT_DATA_DIR: perfil persistente de YARG.YARG_RESOLUTION:4k,2k,1080p,720poask.YARG_FORCE_SOFTWARE_RENDER:truefuerza llvmpipe/software render;falsepermite usar la GPU disponible, recomendado para GPU passthrough.YARG_EXIT_MENU:alwaysmuestra menu al salir de YARG;restartrelanza YARG directo;neversale del wrapper.
Variables de Cage/Clone Hero:
CLONEHERO_RELEASE_CHANNEL:latest,urloask.CLONEHERO_URL: descarga fija de Clone Hero cuando se usaurl.CLONEHERO_API_URL: endpoint del ultimo release.CLONEHERO_ASSET_REGEX: patron usado para elegir el asset Linux.CLONEHERO_SONGS_DIR: carpeta local de canciones. Por defecto/home/${KIOSK_USER}/Songs; el perfil de Clone Hero enlaza su carpetaSongshacia esta ruta.CLONEHERO_DATA_DIR: perfil persistente de Clone Hero.CLONEHERO_RESOLUTION:4k,2k,1080p,720poask.CLONEHERO_FORCE_SOFTWARE_RENDER:truefuerza llvmpipe/software render.CLONEHERO_EXIT_MENU:alwaysmuestra menu al salir de Clone Hero;restartrelanza Clone Hero directo;neversale del wrapper.
Variables de Cage/RPCS3:
RPCS3_URL: descarga fija del AppImage. Si esta vacia se usa el ultimo release deRPCS3/rpcs3-binaries-linux.RPCS3_API_URL/RPCS3_ASSET_REGEX: endpoint del ultimo release y patron del AppImage de Linux x86_64.RPCS3_DOWNLOAD_FIRMWARE:true(por defecto) descarga el firmware en el home del usuario;falselo omite.RPCS3_FIRMWARE_URL: URL delPS3UPDAT.PUP.RB3DX_DOWNLOAD:true(por defecto) descarga la ultima build de Rock Band 3 Deluxe para PS3 (~750 MB) a/home/<usuario>/RB3DX-PS3.zip;falsela omite.RB3DX_URL: URL del zip de RB3DX (por defecto la builddevelopen nightly.link).RB3DX_DOWNLOAD_CONFIGS:true(por defecto) descarga los tres perfiles de configuracion de la guia de MiloHax (recommended,minimum,potato) como/home/<usuario>/RB3DX-config-<perfil>.zip. El instalador reescribe cada zip para Linux: las rutas quedan relativas a~/.config/rpcs3(custom_configs/config_BLUS30463.ymlydev_hdd0/.../dx_high_memory.dta), se corrigeShader Mode(valor que RPCS3 ya no acepta), el renderer de audioXAudio2(solo Windows) pasa aCubeb, el buffer de audio baja aRPCS3_AUDIO_BUFFER_MSy el perfil usa las fuentes de microfono por jugador. Todos traenDebug Console Mode, que RB3DX necesita para arrancar.RB3DX_CONFIG_PROFILE: perfil que se aplica durante la instalacion:recommended(equipo que cumple los requisitos recomendados),minimum(menos resolucion, sin VSync y menos precision; es el que mejor va en un equipo justo como un Ryzen de 35 W con graficos integrados),potato(experimental, OpenGL) onone. Vacio = el instalador pregunta (por defectorecommended). Se descomprime en~/.config/rpcs3; los otros dos quedan como zips y se cambia de perfil conunzip -o ~/RB3DX-config-minimum.zip -d ~/.config/rpcs3.RB3DX_RESOLUTION_SCALE: escala de resolucion de RPCS3 en %, aplicada al perfil elegido (100= nativa, el valor que conviene con graficos integrados; el perfilrecommendedtrae150).perfildeja el valor que trae cada perfil. Vacio = el instalador pregunta (por defecto100). Rango valido: 25 a 400.RB3DX_CONFIG_BASE_URL: carpeta donde estan los zips de los perfiles.RPCS3_GAMES_DIR: carpeta de juegos y share Samba. Por defecto/home/${KIOSK_USER}/Games.RPCS3_GAME_PATH: ruta fija al.isoo alEBOOT.BINa lanzar; tiene prioridad sobre la deteccion automatica.RPCS3_GAME_MATCH: texto que debe contener el nombre del.isoo el titulo del juego en suPARAM.SFO. Por defectoRock Band 3.RPCS3_AUDIO_OUTPUT: salida de audio preferida:hdmi(HDMI/DP, por defecto),analogoauto. Crea una regla de WirePlumber en~/.config/wireplumber/wireplumber.conf.d/que sube la prioridad de esos sinks; si el dispositivo preferido no existe se usa el otro. Para cambiarlo despues, edita o borra51-rpcs3-audio-output.confy reiniciacage-kiosk.service.RPCS3_AUDIO_VOLUME: volumen de la salida de audio al arrancar, de0a1(1.0= 100 %, por defecto). Se fija conwpctlen cada arranque del wrapper y quita el silencio; vacio no lo toca. Util porque WirePlumber puede dejar un sink HDMI en 40 %.RPCS3_EXIT_HOTKEY:true(por defecto) instala/usr/local/bin/rpcs3-exit-hotkey.py, que el wrapper arranca para cerrar RPCS3 con Ctrl+Alt+Q en el teclado; el wrapper vuelve entonces al menu de mantenimiento. Cage no procesa Alt+F4 y RPCS3 sin GUI no tiene atajo de teclado para cerrarse. Con un control no hace falta: su boton Guide abre el menu de RPCS3, que trae la opcion de salir del juego. Ignora guitarras y baterias.falseno lo instala. Manda SIGTERM y, si el proceso sigue vivo a los 3 segundos, SIGKILL: la GUI de RPCS3 atrapa SIGTERM y no se cierra con ella. En la GUI (opcion 6 del menu) es mejor cerrar con su propio atajo, Ctrl+Q, que cierra con calma y guarda la configuracion;Ctrl+Alt+Qla mata de golpe y pierde lo que no hayas guardado, asi que usalo como salida de emergencia (por ejemplo, si la GUI se cuelga). El atajo esta pensado para el juego lanzado con--no-gui, que no tiene otra forma de cerrarse desde el teclado.RPCS3_PIPEWIRE_QUANTUM: tamano de ciclo de PipeWire en muestras a 48 kHz (por defecto128= 2.7 ms; el de PipeWire es1024= 21 ms). El wrapper lo aplica en cada arranque conpw-metadata -n settings 0 clock.force-quantum. Cada etapa de un microfono USB (dispositivo, fuente mono, lectura de RPCS3) puede sumar un ciclo, asi que bajarlo reduce la latencia de los microfonos y del audio. No es el USB lo que limita: un microfono USB anade solo unos pocos ms. Cuesta algo de CPU y puede provocar chasquidos cuando el juego da caidas de FPS; si pasa, sube a256. Medido en un Ryzen 5 3400GE de 35 W: 128 sin errores de audio. Vacio no lo toca.RPCS3_PERF_OVERLAY:trueactiva el overlay de rendimiento de RPCS3 (FPS y grafica de frametime) en los perfiles RB3DX descargados; los perfiles de MiloHax lo traen apagado. Util para validar el rendimiento de una instalacion nueva; en uso normal convienefalse. Vacio = el instalador pregunta (por defecto no). Para cambiarlo despues, en~/.config/rpcs3/custom_configs/config_BLUS30463.yml, seccionVideo > Performance Overlay:Enabled,Enable Framerate GraphyEnable Frametime Graph.RPCS3_AUDIO_BUFFER_MS: buffer de audio de RPCS3 (Desired Audio Buffer Duration, en ms) que llevan los perfiles RB3DX descargados. Por defecto32, el derecommended;minimumypotatotraen100, que suma latencia en un juego de ritmo. Un valor mas bajo puede provocar chasquidos cuando el juego da una caida de FPS; si pasa, sube a 48 o 64. Vacio deja el valor de cada perfil.RPCS3_MIC_SINGLE_MATCHyRPCS3_MIC_SPLIT_MATCH: expresiones regulares sobre el nombre de una fuente de audio USB (por defectoLogitechyUSBMIC|SingStar). Rock Band 3 admite hasta 3 cantantes y RPCS3 abre un dispositivo por jugador, asi que el wrapper expone tres fuentes mono,Mic_P1,Mic_P2yMic_P3, en este orden: primero cada microfono individual (SINGLE_MATCH, el Logitech oficial de Rock Band), luego cada adaptador estereo de dos microfonos (SPLIT_MATCH, el SingStar USBMIC: canal izquierdo = azul, derecho = rojo). Con un Logitech y un SingStar quedan Logitech = P1, azul = P2 y rojo = P3. Se ejecuta antes de cada arranque del juego, asi que toma dispositivos conectados despues, y solo recrea las fuentes si cambiaron. No hace falta que esten conectados al instalar. Con esta opcion los perfiles RB3DX descargados llevanMicrophone Type: Standardy esos tres nombres. Ambas vacias la desactivan. El tipoReal SingStarno funciona con Rock Band 3 (el juego pide "connect a mic").RPCS3_MIC_SINGLE_VOLUMEyRPCS3_MIC_VOLUME: volumen de captura de cada tipo (por defecto75%y35%). Salen al maximo de fabrica (+15 dB el Logitech, +24 dB el SingStar) y cada microfono mueve la flecha de otro jugador; 75 % son +7 dB en el Logitech y 35 % son -4 dB en el SingStar. Vacio no lo toca.RPCS3_MIDI_DRUMS:true(por defecto) detecta, antes de cada arranque del juego, el primer dispositivo MIDI de una tarjeta de sonido (un e-kit por USB) y lo escribe comoDrumsenEmulated Midi devicesde la configuracion de Rock Band 3. RPCS3 guarda el nombre del puerto ALSA con su numero de cliente (por ejemploAlesis Nitro:Alesis Nitro MIDI 1 32:0), que cambia segun el orden en que se enumera el USB; por eso se actualiza solo. Sin dispositivo MIDI no toca nada. El kit debe estar en el canal MIDI 10 con el mapeo GM estandar. Para navegar por los menus hace falta ademas un control (el e-kit no navega).RPCS3_MIDI_NOTE_OVERRIDE: notas que el kit manda distintas a lo esperado,"NOTA=Pieza,NOTA=Pieza"; se escribe enMidi id to note overridede~/.config/rpcs3/rb3drums.yml. Ejemplo:49=Ride,51=Crashsi crash y ride llegan invertidos (el Alesis Nitro). Piezas validas:Kick,HihatPedal,Snare,SnareRim,HiTom,LowTom,FloorTom,HihatWithPedalUp,Hihat,Ride,Crash. Vacio no toca el archivo. Si no esta definida, el instalador la pregunta en el modo asistido (con un.envcargado no pregunta) y valida el formatoNOTA=Piezaseparado por comas.RPCS3_PAD_CONFIGyRPCS3_PAD_DEVICE:true(por defecto) instala~/.config/rpcs3/input_configs/global/Default.ymlcon el jugador 1 en el handler SDL y el controlRPCS3_PAD_DEVICE(por defectoXbox Series X Controller 1, el nombre que SDL da a un control Xbox Series con su numero). Sin ese archivo RPCS3 asigna el teclado al jugador 1 y un control no navega por los menus, lo que con un e-kit (que no navega) deja el juego inutilizable. La plantilla esassets/rpcs3-input-Default.yml, tal como la guarda RPCS3 desde Pad Settings, y se presenta al juego como un control de PS3 (VID/PID de DualShock 3). Si usas otro control, pon su nombre enRPCS3_PAD_DEVICE(lo ves en la GUI, enPads > Device) o configúralo en la GUI. No se pisa una configuracion existente. Con el control mapeado ya no hay teclado como jugador 1.RPCS3_PAD_AUTO:true(por defecto) instala/usr/local/bin/rpcs3-pads.py, que el wrapper ejecuta antes de cada arranque del juego. Le pregunta a SDL (la biblioteca que trae RPCS3) que controles hay conectados y en que orden se detectaron, y reescribe solo el handler y el dispositivo de los jugadores 1 y 2 eninput_configs/global/Default.yml: con un control, ese es el jugador 1; con dos, el primero detectado es el 1 y el segundo el 2, con el mismo mapeo de botones. Sin controles no toca nada. Asi no hace falta saber el nombre SDL de cada modelo ni elegirlo en la GUI. Las guitarras y baterias, que SDL tambien lista como controles, se ignoran por nombre (Santroller, Guitar, Drum, Rock Band, Harmonix...); la variable de entornoRPCS3_PAD_EXCLUDE(expresion regular) sustituye esa lista. Limites: un control conectado despues de arrancar no se asigna hasta reiniciar el juego, y el orden "primero/segundo" sigue el de deteccion de SDL, que tras un arranque con los dos ya conectados depende de como los enumere el kernel. Si un control esta en modo X-input (p. ej. un 8BitDo,Start+Xsegun el modelo) SDL lo nombra "Xbox 360 Controller". Se puede probar sin escribir nada conpython3 /usr/local/bin/rpcs3-pads.py --dry-run.falsedeja la configuracion fija.RPCS3_QT_PLATFORM: vacio (automatico),waylandoxcb(XWayland). Util si la ventana no aparece o falla el teclado/mando.RPCS3_EXIT_MENU:alwaysmuestra el menu al salir del juego;restartrelanza directo;neversale del wrapper.RPCS3_MIN_DISK_GB: disco minimo en GB. Por defecto32.
Nota: REQUIRE_ROOT_PASSWORD existe como control interno. Los caminos Cage lo
activan por defecto.
MiniArch/
|-- install-cage-kiosk.sh # Orquestador Cage/foot minimal
|-- install-cage-clonehero.sh # Orquestador Cage/Clone Hero integrado
|-- install-cage-rpcs3.sh # Orquestador Cage/RPCS3 (Rock Band 3)
|-- install-cage-yarg.sh # Orquestador Cage/YARG integrado
|-- scripts/
| |-- clone-miniarch.sh # Clona disco, cambia UUIDs y puede expandir /home
| |-- expand-home.sh # Expande /home despues de clonar
| `-- check-encoding.sh # CI: sin BOM, mojibake ni CRLF
|-- lib/
| |-- common.sh # Logging, prompts y limpieza compartidos
| |-- validation.sh # Validacion de entorno, seguridad, red y disco
| |-- partitioning.sh # GPT/UEFI, formateo, montaje y swap
| |-- base_install.sh # Pacstrap base y fstab
| |-- bootloader.sh # GRUB UEFI y arranque silencioso
| |-- plymouth.sh # Plymouth compartido
| |-- drivers.sh # Drivers, PipeWire, codecs y Bluetooth
| |-- cage.sh # Cage, usuario y wrapper de YARG
| |-- kiosk_runtime.sh # Prologo, menu y servicio comunes de los kioscos
| |-- clonehero.sh # Clone Hero, Samba, updater y CSV
| |-- rpcs3.sh # RPCS3, firmware, Samba, wrapper y updater
| |-- yarg.sh # YARG, settings, Samba, rendimiento y updater
| |-- customization.sh # Mensajes, cursor, assets y scripts extra
| `-- finalization.sh # Red, SSH opcional, limpieza y desmontaje
|-- assets/
| |-- README.md
| |-- yarg_720p.png # Plymouth del camino YARG
| |-- yarg_1080p.png
| |-- clonehero_720p.png # Plymouth del camino Clone Hero
| |-- clonehero_1080p.png
| |-- plymouth-image_720p.png # imagen generica de respaldo
| |-- plymouth-image_1080p.png
| |-- rpcs3_720p.png # opcional (no incluida)
| |-- rpcs3_1080p.png # opcional (no incluida)
| |-- create-example-assets.sh # genera una imagen de ejemplo con ImageMagick
| |-- plymouth-image.png.example
| `-- cursor/ # guitar-pick-left.png (ver cursor/README.md)
|-- docs/
| `-- historico/instalador-openbox/ # Specs del instalador OpenBox (obsoletos, archivados)
|-- tests/
| |-- test_assets.bats
| |-- test_common.bats
| |-- test_env_loader.bats
| |-- test_nvidia.bats
| |-- test_partition_sizes.bats
| |-- test_song_paths_and_menu.bats
| |-- test_kiosk_runtime.bats
| |-- test_validation.bats
| |-- test_partitioning.bats
| |-- test_base_install.bats
| |-- test_bootloader.bats
| |-- test_plymouth.bats
| |-- test_rpcs3.bats
| |-- test_repo_hygiene.bats
| |-- test_drivers.bats
| |-- test_disk_safety.bats
| |-- test_docs.bats
| |-- test_customization.bats
| |-- test_finalization.bats
| `-- test_integration.bats
La suite BATS cubre los modulos compartidos (validation, partitioning,
bootloader, plymouth, drivers, finalization, customization, common),
el cargador del .env, la proteccion del disco, la deteccion de NVIDIA, los
tamanos de particion y el camino RPCS3 (con find_game y update-rpcs3
ejecutados de verdad). Los wrappers y menus de lib/cage.sh, lib/yarg.sh y
lib/clonehero.sh se verifican sobre todo con grep sobre el texto (salvo
update-clonehero, que si se ejecuta en una prueba)
(test_song_paths_and_menu.bats); las pruebas de integracion estan omitidas
(ver #12 y #24). scripts/clone-miniarch.sh y scripts/expand-home.sh no tienen
pruebas automaticas: pruebalos en una VM con un disco de prueba.
Instala BATS en Linux/WSL:
sudo apt-get update
sudo apt-get install batsEjecuta pruebas:
bats tests/*.batsValida sintaxis:
bash -n install-cage-kiosk.sh
bash -n install-cage-yarg.sh
bash -n install-cage-clonehero.sh
bash -n install-cage-rpcs3.sh
bash -n scripts/clone-miniarch.sh scripts/expand-home.sh
for file in lib/*.sh; do bash -n "$file"; doneEjecuta los instaladores desde el live ISO de Arch Linux. Deben existir
/etc/arch-release y pacstrap.
Si usas WiFi, conectate primero con iwctl (ver "Conectarse a WiFi en el live").
ip link
ping -c 3 archlinux.orgLevanta la interfaz si hace falta:
ip link set <interfaz> up
dhcpcdlsblkConfigura DISK_DEVICE en .env, por ejemplo:
DISK_DEVICE=/dev/vdanvidia-open solo soporta Turing (GTX 16xx / RTX 20xx) y posteriores. Con el
driver 590, Arch dejo fuera Pascal (GTX 10xx) y anteriores; para esas tarjetas
solo existe nvidia-580xx-dkms en el AUR, que hay que compilar a mano.
Los instaladores detectan la GPU con lspci (el nombre del chip indica la
generacion: GP/GM/GK/GV... son anteriores a Turing; TU/GA/AD/GB
son compatibles):
- Si pides el driver (
INSTALL_NVIDIA=trueo respondess) y la GPU es anterior a Turing, no se instalanvidia-openy se usa Mesa/nouveau, porquenvidia-utilspone nouveau en la lista negra y el equipo se quedaria sin video. El instalador lo avisa. - Al preguntar, muestra la GPU detectada y si es compatible.
NVIDIA_SKIP_GPU_CHECK=trueomite la proteccion (falsos positivos, GPU en passthrough...).- Si no se detecta GPU NVIDIA, solo avisa y respeta tu eleccion.
Para una GTX 10xx, instala nvidia-580xx-dkms desde el AUR despues de la
instalacion (con base-devel, git y los headers del kernel).
Plymouth es opcional en el camino Cage. Si el paquete, tema o asset falla, el instalador debe continuar sin pantalla personalizada.
Si ImageMagick no esta disponible, el instalador intenta copiar el PNG sin redimensionarlo en vez de fallar por el escalado.
systemctl status cage-kiosk.service
journalctl -u cage-kiosk.service -b
ls -la /opt/YARGSi el binario no existe, el wrapper abre foot. Puedes reinstalar con:
sudo update-yargsystemctl status cage-kiosk.service
journalctl -u cage-kiosk.service -b
ls -la /opt/CloneHeroSi el binario no existe, el wrapper abre el menu de mantenimiento. Reinstala con:
sudo update-cloneheroSi el menu de mantenimiento no puede actualizar, revisa que
CLONEHERO_URL (canal url) o el release de clonehero-game/releases (canal
latest) tengan un asset Linux.
systemctl status cage-kiosk.service
journalctl -u cage-kiosk.service -b | grep -i rpcs3
ls -la /opt/RPCS3 /home/kiosk/Games- Si ves
no se encontro el juego, el titulo no coincide: revisaRPCS3_GAME_MATCHo fijaRPCS3_GAME_PATHal.isoo alEBOOT.BIN. - Si la ventana no aparece o no responde el teclado/mando, prueba
RPCS3_QT_PLATFORM=xcb(XWayland) owaylandy reinstala el wrapper. - RPCS3 necesita Vulkan y una CPU con AVX2; en maquinas virtuales sin GPU no correra a una velocidad jugable.
- Si un juego dejo de funcionar de repente, borra la cache (es seguro; solo
guarda logs y shaders compilados, y el siguiente arranque tarda mas):
rm -rf ~/.cache/rpcs3. - Si los objetos aparecen de golpe mientras se compilan shaders, en
Config > GPUponShader ModeenAsync with Shader Interpreter. - Si RPCS3 reporta
Failed to set RLIMIT_MEMLOCK size to 2 GiB, revisa quecage-kiosk.servicetengaLimitMEMLOCK=infinity(el instalador lo agrega).
Por defecto, MiniArch oculta la salida ruidosa de pacman, pacstrap,
mkfs, grub-mkconfig, mkinitcpio, curl y unzip, pero la conserva en
LOG_FILE.
Para modo detallado:
VERBOSE_INSTALL=true ./install-cage-yarg.shO define en .env:
VERBOSE_INSTALL=trueRevisa hardware ALSA:
aplay -l
aplay -L | grep -i pipewireRevisa PipeWire/Pulse:
pactl info
pactl list short sinks
journalctl -u cage-kiosk.service -b | grep -Ei 'pipewire|wireplumber|dbus|alsa|bass'Si pactl info falla, revisa que el wrapper este arrancando con DBus de sesion
y que no haya procesos PipeWire stale del usuario.
sudo systemctl status smb nmb
testparm
grep -A10 "\[YARG-Songs\]" /etc/samba/smb.conf # o [CloneHero-Songs] / [RPCS3-Games]
ls -la /home/kiosk/Songs # RPCS3: /home/kiosk/Gamesls -l /etc/udev/rules.d/69-hid.rulesReconecta el dispositivo despues de instalar para que udev aplique la regla.
- No versiones
.env. - Cambia
KIOSK_PASSWORDyROOT_PASSWORD. - El usuario kiosko tiene sudo sin password para mantenimiento.
- Samba permite guest en
YARG-Songs,CloneHero-SongsyRPCS3-Games; no los expongas a redes no confiables. ENABLE_SSH=falsees el valor recomendado para Cage.
Consulta SECURITY.md para mas detalles.
Si clonas una instalacion a un disco mas grande, revisa CLONING.md
para expandir /home.
Lee CONTRIBUTING.md, ejecuta las pruebas disponibles y abre un pull request con cambios acotados.
Este proyecto esta bajo licencia MIT. Consulta LICENSE.
- Arch Linux.
- YARG.
- Cage.
- foot.
- Plymouth.
- PipeWire.
- Samba.
- BATS.