diff --git a/README.md b/README.md index fd6b39c..57b5ff9 100644 --- a/README.md +++ b/README.md @@ -42,8 +42,9 @@ IP publique nécessaire, et obs-websocket reste sur `127.0.0.1`. - Node.js **22+** sur le serveur et sur chaque VM (le serveur utilise `node:sqlite`). - OBS **28+** sur chaque VM, avec *Outils → Paramètres du serveur WebSocket* activé. Note le port (4455 par défaut) et le mot de passe. -- Pour le rappel du plein écran sous Ubuntu : `xdotool` et une session X11 - (voir [Prérequis pour le rappel du plein écran](#prérequis-pour-le-rappel-du-plein-écran)). +- Pour le rappel du plein écran sous Ubuntu : Firefox, en mode de pilotage « WebDriver BiDi » + (voir [Deux façons de piloter le navigateur](#deux-façons-de-piloter-le-navigateur)). + Le mode historique exige en plus `xdotool` et une session X11. ## Démarrage rapide (développement) @@ -157,9 +158,75 @@ moment coûte plus cher que quelques secondes d'écran d'attente enregistrées : Un passage `hors-ligne` (`idle`) ne provoque ni pause ni reprise : seul le retour effectif du flux public relance l'enregistrement. -### Prérequis pour le rappel du plein écran +### Deux façons de piloter le navigateur -L'envoi de touche se fait au niveau du système, pas via OBS. +Le rappel du plein écran dépend entièrement de ce choix, qui se règle par agent dans +« Pilotage du navigateur ». + +| | **WebDriver BiDi** (recommandé) | **Lancement simple** (historique) | +| --- | --- | --- | +| Ouverture d'une page | commande dans l'instance pilotée | un processus lancé par page | +| Plein écran | commande WebDriver adressée à Firefox | touche envoyée au serveur d'affichage | +| Effet vérifié ? | oui — `document.fullscreenElement` est relu | non | +| Session Wayland | **fonctionne** | impossible (voir plus bas) | +| Dépendances | Firefox | xdotool + session X11 | + +#### WebDriver BiDi + +Firefox expose ce protocole dès qu'on le lance avec `--remote-debugging-port` : ni +geckodriver, ni Selenium, une simple WebSocket JSON sur la boucle locale. L'agent +implémente le strict nécessaire (`bidi.ts`, `firefox.ts`). + +Le renversement est là : **l'agent possède le navigateur** au lieu de lui envoyer des URL +en espérant. Il parle à Firefox, pas au serveur d'affichage — d'où le fonctionnement +identique sous Wayland, où xdotool ne voit rien. + +Séquence du rappel de plein écran, dans cet ordre volontaire : + +1. `browsingContext.activate` — sans quoi la touche partirait vers un onglet d'arrière-plan ; +2. `input.performActions` — la touche configurée (`f` par défaut), délivrée à la page comme + un vrai évènement (`isTrusted: true`), donc traitée par le lecteur du site ; +3. relecture de `document.fullscreenElement` ; +4. si la page n'a pas bougé : `requestFullscreen()` sur l'élément `