Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,17 @@ YARG_RESOLUTION=ask
YARG_FORCE_SOFTWARE_RENDER=false
# always muestra menu al salir de YARG; restart relanza YARG directo.
YARG_EXIT_MENU=always
# Salida de audio preferida: hdmi (HDMI/DP), analog o auto. Si el dispositivo preferido
# no existe se usa el otro. Volumen de 0 a 1 al arrancar (1.0 = 100 %); vacio no lo toca.
YARG_AUDIO_OUTPUT=hdmi
YARG_AUDIO_VOLUME=1.0
# Tamano de ciclo de PipeWire en muestras (48 kHz): 128 = 2.7 ms, 1024 = 21 ms (el
# valor por defecto de PipeWire). Menos = menos latencia, pero mas carga de CPU. Vacio no lo toca.
YARG_PIPEWIRE_QUANTUM=128
# true instala el atajo para cerrar YARG con Ctrl+Alt+Q (teclado).
YARG_EXIT_HOTKEY=true
# Disco minimo en GB: las canciones y el /home no caben en un disco de 16 GB.
YARG_MIN_DISK_GB=32

# Clone Hero / Cage
# latest consulta GitHub; url usa CLONEHERO_URL manualmente; ask pregunta al instalar.
Expand All @@ -74,6 +85,17 @@ CLONEHERO_RESOLUTION=ask
CLONEHERO_FORCE_SOFTWARE_RENDER=false
# always muestra menu al salir de Clone Hero; restart relanza Clone Hero directo.
CLONEHERO_EXIT_MENU=always
# Salida de audio preferida: hdmi (HDMI/DP), analog o auto. Si el dispositivo preferido
# no existe se usa el otro. Volumen de 0 a 1 al arrancar (1.0 = 100 %); vacio no lo toca.
CLONEHERO_AUDIO_OUTPUT=hdmi
CLONEHERO_AUDIO_VOLUME=1.0
# Tamano de ciclo de PipeWire en muestras (48 kHz): 128 = 2.7 ms, 1024 = 21 ms (el
# valor por defecto de PipeWire). Menos = menos latencia, pero mas carga de CPU. Vacio no lo toca.
CLONEHERO_PIPEWIRE_QUANTUM=128
# true instala el atajo para cerrar Clone Hero con Ctrl+Alt+Q (teclado).
CLONEHERO_EXIT_HOTKEY=true
# Disco minimo en GB: las canciones y el /home no caben en un disco de 16 GB.
CLONEHERO_MIN_DISK_GB=32

# RPCS3 / Cage (Rock Band 3)
# RPCS3_URL vacio consulta el ultimo release de RPCS3/rpcs3-binaries-linux.
Expand Down
2 changes: 1 addition & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Normaliza finales de linea: los scripts y pruebas deben ser LF aunque se
# clonen en Windows (un CRLF rompe el shebang y bats).
* text=auto
* text=auto eol=lf
*.sh text eol=lf
*.bats text eol=lf
*.md text eol=lf
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,15 @@ Infraestructura:
`test_docs` (coherencia de la documentacion con el repo), `test_assets` y
`test_song_paths_and_menu`.
- `.gitattributes` para mantener LF en scripts, pruebas y documentos.
- Mejoras de RPCS3 compartidas con YARG y Clone Hero en `lib/kiosk_runtime.sh`:
salida de audio por HDMI con regla de WirePlumber y volumen al arrancar
(`*_AUDIO_OUTPUT`, `*_AUDIO_VOLUME`), cuantum de PipeWire para bajar la latencia
(`*_PIPEWIRE_QUANTUM`, 128 por defecto), atajo Ctrl+Alt+Q para cerrar la app
(`*_EXIT_HOTKEY`, script comun `kiosk-exit-hotkey.py`), disco minimo por ruta
(`YARG_MIN_DISK_GB` y `CLONEHERO_MIN_DISK_GB`, 32 GB) y updaters que no descargan
si ya esta la ultima version (`update-yarg --force`, `update-clonehero --force`).
- `configure_kiosk_performance`: una sola implementacion de limites de tiempo real,
swappiness y cpupower para las tres rutas (antes copiada en cada una).

### Cambiado

Expand Down
26 changes: 23 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,8 @@ de shaders no caben en el `/home` de un disco de 16 GB.

- Arch Linux ISO actual.
- Maquina fisica o VM con UEFI habilitado.
- Disco de al menos 16 GB (32 GB para el camino RPCS3).
- Disco de al menos 32 GB en las tres rutas con juego (`YARG_MIN_DISK_GB`,
`CLONEHERO_MIN_DISK_GB` y `RPCS3_MIN_DISK_GB`); `install-cage-kiosk.sh` pide 16 GB.
Esquema por defecto: ESP 512 MiB, root 8 GiB, swap 2 GiB y `/home` con el
resto. En un disco de 16 GB `/home` queda de ~5.5 GB, en 32 GB de ~21.5 GB y
en 128 GB de ~117.5 GB. Ajustable con `ESP_SIZE`, `ROOT_SIZE` y `SWAP_SIZE`.
Expand Down Expand Up @@ -397,6 +398,8 @@ Canal de YARG: stable fijo, stable-latest o nightly? [stable/stable-latest/night
`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.
Si ya tienes la ultima version no descarga nada; `sudo update-yarg --force` la
reinstala igual. `update-clonehero` hace lo mismo (`--force` incluido).

## Uso Despues De Instalar Cage/YARG

Expand Down Expand Up @@ -689,6 +692,15 @@ Variables de Cage/YARG:
`false` permite usar la GPU disponible, recomendado para GPU passthrough.
- `YARG_EXIT_MENU`: `always` muestra menu al salir de YARG; `restart`
relanza YARG directo; `never` sale del wrapper.
- `YARG_AUDIO_OUTPUT` / `YARG_AUDIO_VOLUME`: salida de audio preferida (`hdmi` por
defecto, `analog` o `auto`) y volumen al arrancar (`0` a `1`, `1.0` por defecto).
Funcionan igual que `RPCS3_AUDIO_OUTPUT` / `RPCS3_AUDIO_VOLUME`.
- `YARG_PIPEWIRE_QUANTUM`: ciclo de PipeWire en muestras (`128` por defecto; vacio no
lo toca). Igual que `RPCS3_PIPEWIRE_QUANTUM`.
- `YARG_EXIT_HOTKEY`: `true` (por defecto) instala el atajo **Ctrl+Alt+Q** para cerrar
YARG desde el teclado; el wrapper vuelve entonces al menu de mantenimiento.
Comparte script con RPCS3 y Clone Hero (`/usr/local/bin/kiosk-exit-hotkey.py`).
- `YARG_MIN_DISK_GB`: disco minimo en GB. Por defecto `32`.

Variables de Cage/Clone Hero:

Expand All @@ -704,6 +716,14 @@ Variables de Cage/Clone Hero:
- `CLONEHERO_FORCE_SOFTWARE_RENDER`: `true` fuerza llvmpipe/software render.
- `CLONEHERO_EXIT_MENU`: `always` muestra menu al salir de Clone Hero;
`restart` relanza Clone Hero directo; `never` sale del wrapper.
- `CLONEHERO_AUDIO_OUTPUT` / `CLONEHERO_AUDIO_VOLUME`: salida de audio preferida
(`hdmi` por defecto, `analog` o `auto`) y volumen al arrancar (`0` a `1`, `1.0`
por defecto). Funcionan igual que `RPCS3_AUDIO_OUTPUT` / `RPCS3_AUDIO_VOLUME`.
- `CLONEHERO_PIPEWIRE_QUANTUM`: ciclo de PipeWire en muestras (`128` por defecto; vacio
no lo toca). Igual que `RPCS3_PIPEWIRE_QUANTUM`.
- `CLONEHERO_EXIT_HOTKEY`: `true` (por defecto) instala el atajo **Ctrl+Alt+Q** para
cerrar Clone Hero desde el teclado (mismo script que YARG y RPCS3).
- `CLONEHERO_MIN_DISK_GB`: disco minimo en GB. Por defecto `32`.

Variables de Cage/RPCS3:

Expand Down Expand Up @@ -748,12 +768,12 @@ Variables de Cage/RPCS3:
`analog` o `auto`. 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 borra `51-rpcs3-audio-output.conf` y reinicia `cage-kiosk.service`.
edita o borra `51-kiosk-audio-output.conf` y reinicia `cage-kiosk.service`.
- `RPCS3_AUDIO_VOLUME`: volumen de la salida de audio al arrancar, de `0` a `1`
(`1.0` = 100 %, por defecto). Se fija con `wpctl` en 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`,
- `RPCS3_EXIT_HOTKEY`: `true` (por defecto) instala `/usr/local/bin/kiosk-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
Expand Down
22 changes: 19 additions & 3 deletions install-cage-clonehero.sh
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,16 @@ CLONEHERO_DATA_DIR="${CLONEHERO_DATA_DIR:-}"
CLONEHERO_RESOLUTION="${CLONEHERO_RESOLUTION:-ask}"
CLONEHERO_FORCE_SOFTWARE_RENDER="${CLONEHERO_FORCE_SOFTWARE_RENDER:-false}"
CLONEHERO_EXIT_MENU="${CLONEHERO_EXIT_MENU:-always}"
# hdmi (por defecto), analog o auto: salida de audio preferida; volumen de 0 a 1 al arrancar.
CLONEHERO_AUDIO_OUTPUT="${CLONEHERO_AUDIO_OUTPUT:-hdmi}"
CLONEHERO_AUDIO_VOLUME="${CLONEHERO_AUDIO_VOLUME-1.0}"
# Tamano de ciclo de PipeWire en muestras (48 kHz): 128 = 2.7 ms, 1024 = 21 ms (el valor
# por defecto de PipeWire). Menos = menos latencia, pero mas carga de CPU. Vacio no lo toca.
CLONEHERO_PIPEWIRE_QUANTUM="${CLONEHERO_PIPEWIRE_QUANTUM-128}"
# true instala el atajo para cerrar Clone Hero con Ctrl+Alt+Q (teclado).
CLONEHERO_EXIT_HOTKEY="${CLONEHERO_EXIT_HOTKEY:-true}"
# Disco minimo en GB: las canciones y el /home no caben en un disco de 16 GB.
CLONEHERO_MIN_DISK_GB="${CLONEHERO_MIN_DISK_GB:-32}"

source "$SCRIPT_DIR/lib/validation.sh" || { log_error "No se pudo importar validation.sh"; exit 1; }
source "$SCRIPT_DIR/lib/partitioning.sh" || { log_error "No se pudo importar partitioning.sh"; exit 1; }
Expand Down Expand Up @@ -158,6 +168,9 @@ ask_initial_questions() {
echo -e "${YELLOW}Usuario kiosko:${NC} $KIOSK_USER"
echo ""

validate_kiosk_audio_volume CLONEHERO_AUDIO_VOLUME "$CLONEHERO_AUDIO_VOLUME" || return 1
validate_kiosk_pipewire_quantum CLONEHERO_PIPEWIRE_QUANTUM "$CLONEHERO_PIPEWIRE_QUANTUM" || return 1

resolve_nvidia_choice

CLONEHERO_RELEASE_CHANNEL="${CLONEHERO_RELEASE_CHANNEL,,}"
Expand Down Expand Up @@ -251,8 +264,8 @@ main() {
exit 1
fi

if ! check_disk "$DISK_DEVICE"; then
log_error "Disco invalido o insuficiente: se requiere al menos 16GB"
if ! check_disk "$DISK_DEVICE" "$CLONEHERO_MIN_DISK_GB"; then
log_error "Disco invalido o insuficiente: Clone Hero requiere al menos ${CLONEHERO_MIN_DISK_GB}GB"
exit 1
fi

Expand Down Expand Up @@ -346,6 +359,9 @@ main() {
exit 1
fi

configure_kiosk_audio_output "${CLONEHERO_AUDIO_OUTPUT:-hdmi}"
install_kiosk_exit_hotkey "${CLONEHERO_EXIT_HOTKEY:-true}" CLONEHERO

if [[ -e "$CURSOR_PATH" ]]; then
if ! install_custom_cursor "$CURSOR_PATH" "$KIOSK_USER"; then
warn "Fallo en instalacion del cursor personalizado; se continuara con el cursor predeterminado."
Expand Down Expand Up @@ -379,7 +395,7 @@ main() {
exit 1
fi

if ! configure_clonehero_performance; then
if ! configure_kiosk_performance "Clone Hero"; then
log_error "Fallo en optimizaciones de rendimiento para Clone Hero"
exit 1
fi
Expand Down
18 changes: 5 additions & 13 deletions install-cage-rpcs3.sh
Original file line number Diff line number Diff line change
Expand Up @@ -174,16 +174,8 @@ ask_guided_configuration() {
;;
esac

if [[ -n "$RPCS3_PIPEWIRE_QUANTUM" ]] && \
{ [[ ! "$RPCS3_PIPEWIRE_QUANTUM" =~ ^[0-9]+$ ]] || (( RPCS3_PIPEWIRE_QUANTUM < 32 || RPCS3_PIPEWIRE_QUANTUM > 2048 )); }; then
log_error "RPCS3_PIPEWIRE_QUANTUM invalido: $RPCS3_PIPEWIRE_QUANTUM. Use un numero entre 32 y 2048 (por ejemplo 128) o vacio."
return 1
fi

if [[ -n "$RPCS3_AUDIO_VOLUME" && ! "$RPCS3_AUDIO_VOLUME" =~ ^(0(\.[0-9]+)?|1(\.0+)?)$ ]]; then
log_error "RPCS3_AUDIO_VOLUME invalido: $RPCS3_AUDIO_VOLUME. Use un numero entre 0 y 1 (por ejemplo 1.0) o vacio."
return 1
fi
validate_kiosk_pipewire_quantum RPCS3_PIPEWIRE_QUANTUM "$RPCS3_PIPEWIRE_QUANTUM" || return 1
validate_kiosk_audio_volume RPCS3_AUDIO_VOLUME "$RPCS3_AUDIO_VOLUME" || return 1

if [[ -z "${RB3DX_CONFIG_PROFILE:-}" ]]; then
local profile_answer="recommended"
Expand Down Expand Up @@ -461,19 +453,19 @@ main() {
exit 1
fi

if ! configure_rpcs3_performance; then
if ! configure_kiosk_performance RPCS3 "vm.max_map_count=2147483642"; then
log_error "Fallo en optimizaciones de rendimiento para RPCS3"
exit 1
fi

configure_rpcs3_audio_output
configure_kiosk_audio_output "${RPCS3_AUDIO_OUTPUT:-hdmi}"

if ! install_rpcs3_update_script; then
log_error "Fallo en instalacion del updater de RPCS3"
exit 1
fi

install_rpcs3_exit_hotkey
install_kiosk_exit_hotkey "${RPCS3_EXIT_HOTKEY:-true}" RPCS3

install_rpcs3_midi_config
install_rpcs3_input_config
Expand Down
22 changes: 19 additions & 3 deletions install-cage-yarg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,16 @@ YARG_PERSISTENT_DATA_DIR="${YARG_PERSISTENT_DATA_DIR:-}"
YARG_RESOLUTION="${YARG_RESOLUTION:-ask}"
YARG_FORCE_SOFTWARE_RENDER="${YARG_FORCE_SOFTWARE_RENDER:-false}"
YARG_EXIT_MENU="${YARG_EXIT_MENU:-always}"
# hdmi (por defecto), analog o auto: salida de audio preferida; volumen de 0 a 1 al arrancar.
YARG_AUDIO_OUTPUT="${YARG_AUDIO_OUTPUT:-hdmi}"
YARG_AUDIO_VOLUME="${YARG_AUDIO_VOLUME-1.0}"
# Tamano de ciclo de PipeWire en muestras (48 kHz): 128 = 2.7 ms, 1024 = 21 ms (el valor
# por defecto de PipeWire). Menos = menos latencia, pero mas carga de CPU. Vacio no lo toca.
YARG_PIPEWIRE_QUANTUM="${YARG_PIPEWIRE_QUANTUM-128}"
# true instala el atajo para cerrar YARG con Ctrl+Alt+Q (teclado).
YARG_EXIT_HOTKEY="${YARG_EXIT_HOTKEY:-true}"
# Disco minimo en GB: las canciones y el /home no caben en un disco de 16 GB.
YARG_MIN_DISK_GB="${YARG_MIN_DISK_GB:-32}"
YARG_RELEASE_CHANNEL="${YARG_RELEASE_CHANNEL:-ask}"
YARG_STABLE_API_URL="${YARG_STABLE_API_URL:-https://api.github.com/repos/YARC-Official/YARG/releases/latest}"
YARG_STABLE_ASSET_REGEX="${YARG_STABLE_ASSET_REGEX:-linux.*(x86_64|x64|64).*\\.zip}"
Expand Down Expand Up @@ -162,6 +172,9 @@ ask_initial_questions() {
echo -e "${YELLOW}Usuario kiosko:${NC} $KIOSK_USER"
echo ""

validate_kiosk_audio_volume YARG_AUDIO_VOLUME "$YARG_AUDIO_VOLUME" || return 1
validate_kiosk_pipewire_quantum YARG_PIPEWIRE_QUANTUM "$YARG_PIPEWIRE_QUANTUM" || return 1

resolve_nvidia_choice

YARG_RELEASE_CHANNEL="${YARG_RELEASE_CHANNEL,,}"
Expand Down Expand Up @@ -257,8 +270,8 @@ main() {
exit 1
fi

if ! check_disk "$DISK_DEVICE"; then
log_error "Disco invalido o insuficiente: se requiere al menos 16GB"
if ! check_disk "$DISK_DEVICE" "$YARG_MIN_DISK_GB"; then
log_error "Disco invalido o insuficiente: YARG requiere al menos ${YARG_MIN_DISK_GB}GB"
exit 1
fi

Expand Down Expand Up @@ -352,6 +365,9 @@ main() {
exit 1
fi

configure_kiosk_audio_output "${YARG_AUDIO_OUTPUT:-hdmi}"
install_kiosk_exit_hotkey "${YARG_EXIT_HOTKEY:-true}" YARG

if [[ -e "$CURSOR_PATH" ]]; then
if ! install_custom_cursor "$CURSOR_PATH" "$KIOSK_USER"; then
warn "Fallo en instalacion del cursor personalizado; se continuara con el cursor predeterminado."
Expand Down Expand Up @@ -385,7 +401,7 @@ main() {
exit 1
fi

if ! configure_yarg_performance; then
if ! configure_kiosk_performance YARG; then
log_error "Fallo en optimizaciones de rendimiento para YARG"
exit 1
fi
Expand Down
3 changes: 2 additions & 1 deletion lib/cage.sh
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ install_cage_wrapper() {
install_kiosk_menu "YARG" "Volver a YARG" "$yarg_update_label" "/usr/local/bin/update-yarg"

{
kiosk_wrapper_prelude "run-yarg" "/home/$KIOSK_USER" "${YARG_FORCE_SOFTWARE_RENDER:-false}"
kiosk_wrapper_prelude "run-yarg" "/home/$KIOSK_USER" "${YARG_FORCE_SOFTWARE_RENDER:-false}" "${YARG_AUDIO_VOLUME-}" "${YARG_PIPEWIRE_QUANTUM-}"
cat <<'WRAPPER'

YARG_SCREEN_WIDTH="__YARG_SCREEN_WIDTH__"
Expand Down Expand Up @@ -369,6 +369,7 @@ wait_for_alsa_default() {
return 1
}

start_kiosk_exit_hotkey /opt/YARG/
start_kiosk_audio YARG

echo "run-yarg: esperando ALSA default via PipeWire" >&2
Expand Down
Loading
Loading