#!/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. " _