Files
nocode 2c5f08330a refactor(fws-keys): make keyboard shortcuts tool universal for hyprland and i3
Rename fws-hypr-keys to fws-keys and extend it to support both Hyprland and i3 desktop environments. The tool now detects the session type and uses appropriate methods:

- Hyprland: queries hyprctl binds for real loaded bindings (wofi dmenu)
- i3: parses ~/.config/i3/config with variable resolution (rofi dmenu)

Update all references in configs and templates. Add VM detection warning in fws-vr-setup to prevent VR attempts in virtual machines where GPU/USB access is unavailable.

Add ttf-liberation font dependency for Steam UI stability on minimal installations and improve error guidance for Steam crashes.
2026-07-04 03:59:09 +02:00

116 lines
5.7 KiB
Bash
Executable File

#!/bin/bash
# ============================================================================
# FWS — installation des drivers/runtimes VR selon le casque.
#
# À lancer depuis un terminal (Super+Shift+V sous i3, ou l'entrée
# « Installation VR (FWS) » du menu d'applications). Réservé aux sessions
# X11 (i3) : SteamVR ne fonctionne PAS sous Wayland/Hyprland.
#
# Réalité du support Linux (résumé honnête) :
# • HTC Vive / Vive Pro / Valve Index (stations lighthouse) → NATIF via
# SteamVR. C'est le chemin le plus fiable.
# • Meta/Oculus Quest 1-3, Pico → PAS de support officiel ; streaming
# Wi-Fi via ALVR (+ SteamVR). ALVR n'est pas dans les dépôts Arch :
# le script installe la base et donne la marche à suivre.
# • Oculus Rift CV1/S (filaire) → pas de support utilisable.
# • Monado : runtime OpenXR libre (déjà proposé par fws-setup-hardware),
# utile pour les applis OpenXR natives sans SteamVR.
# ============================================================================
set -u
say() { printf '\n\033[1;34m==> %s\033[0m\n' "$*"; }
warn() { printf '\033[1;33m ⚠ %s\033[0m\n' "$*"; }
if [ "$(id -u)" -ne 0 ]; then
exec sudo "$0" "$@"
fi
# VM = cul-de-sac VR : pas d'accès direct au GPU ni à l'USB/DisplayPort du
# casque, et Steam (steamwebhelper) est INSTABLE en rendu logiciel (llvmpipe).
# On prévient au lieu de laisser l'utilisateur croire à une panne de FWS.
if systemd-detect-virt --quiet 2>/dev/null; then
warn "Machine VIRTUELLE détectée ($(systemd-detect-virt 2>/dev/null))."
warn "La VR ne fonctionnera PAS ici : casque et GPU inaccessibles depuis une VM."
warn "Steam lui-même peut planter en rendu logiciel (steamwebhelper)."
echo " → Fais cette installation sur la machine RÉELLE avec le casque branché."
read -rp " Continuer quand même (tests uniquement) ? [o/N] " _ok
case "$_ok" in o|O|oui) ;; *) exit 0 ;; esac
fi
# lib32 Vulkan selon le GPU (indispensable à SteamVR, qui est 32/64 bits).
GPU="$(lspci 2>/dev/null | grep -iE 'VGA compatible controller|3D controller|Display controller')"
LIB32="lib32-mesa"
case "$GPU" in
*NVIDIA*|*GeForce*) LIB32="$LIB32 lib32-nvidia-utils" ;;
*AMD*|*ATI*|*Radeon*) LIB32="$LIB32 lib32-vulkan-radeon" ;;
*Intel*) LIB32="$LIB32 lib32-vulkan-intel" ;;
esac
install_pkgs() {
# multilib requis pour Steam/lib32.
grep -qE '^\[multilib\]' /etc/pacman.conf \
|| printf '\n[multilib]\nInclude = /etc/pacman.d/mirrorlist\n' >> /etc/pacman.conf
pacman -Sy --noconfirm || { warn "synchro pacman échouée (réseau ?)"; return 1; }
local valid="" p
for p in "$@"; do
pacman -Si "$p" >/dev/null 2>&1 && valid="$valid $p" || warn "paquet inconnu ignoré : $p"
done
# shellcheck disable=SC2086
pacman -S --noconfirm --needed $valid
}
steamvr_base() {
say "Installation de la base SteamVR (Steam + Vulkan 32 bits : $LIB32)…"
# ttf-liberation : polices attendues par l'interface Steam (évite des
# rendus cassés/plantages cosmétiques sur install minimale).
# shellcheck disable=SC2086
install_pkgs steam $LIB32 ttf-liberation || return 1
say "Base installée. Étapes suivantes :"
echo " 1. Lance Steam, connecte-toi, puis installe « SteamVR » (Bibliothèque → Outils)."
echo " 2. Branche le casque et les stations, puis lance SteamVR."
echo " 3. Premier lancement : SteamVR peut demander à ajuster les règles udev — accepte."
say "Si Steam PLANTE (fenêtre qui se ferme, souvent steamwebhelper) :"
echo " • Vérifie l'espace disque (SteamVR ≈ 5 Go) : df -h ~"
echo " • GPU faible / VM / rendu logiciel — lance :"
echo " steam -cef-disable-gpu -cef-disable-gpu-compositing"
echo " • Pour voir l'erreur exacte : lance « steam » depuis un terminal,"
echo " ou regarde ~/.steam/steam/logs/ (console_log.txt, bootstrap_log.txt)."
}
case "${1:-menu}" in
menu)
cat <<'MENU'
╔══════════════════════════════════════════════════════════╗
║ FWS — Installation VR (session X11 requise) ║
╠══════════════════════════════════════════════════════════╣
║ 1) HTC Vive / Vive Pro / Valve Index (natif, SteamVR) ║
║ 2) Meta Quest / Pico (streaming ALVR) ║
║ 3) Monado (runtime OpenXR libre, sans SteamVR) ║
║ q) Quitter ║
╚══════════════════════════════════════════════════════════╝
MENU
read -rp " Choix : " choice
exec "$0" "$choice"
;;
1|vive|index)
steamvr_base || exit 1
;;
2|quest|pico)
steamvr_base || exit 1
say "Streaming Quest/Pico : il faut AUSSI ALVR (pas dans les dépôts Arch) :"
echo " 1. Télécharge le .tar.gz « ALVR Launcher » : https://github.com/alvr-org/ALVR/releases"
echo " 2. Sur le casque, installe le client ALVR (App Lab / SideQuest)."
echo " 3. Lance ALVR sur le PC (même Wi-Fi 5 GHz que le casque) — il pilote SteamVR."
;;
3|monado)
say "Installation de Monado (OpenXR) + outils…"
install_pkgs monado || exit 1
say "Monado installé. Les applis OpenXR le trouvent via /usr/share/openxr/."
;;
q|Q) exit 0 ;;
*) warn "choix inconnu : ${1}"; exec "$0" menu ;;
esac
echo
read -rp "Terminé — appuie sur Entrée pour fermer. " _