Fix : try FS 3
All checks were successful
release / build (push) Successful in 25s
release / verify-windows (push) Successful in 1m11s

This commit is contained in:
jeanotx32
2026-08-11 23:53:16 +02:00
parent 936c598013
commit dde98f25ac
4 changed files with 65 additions and 5 deletions

View File

@@ -188,9 +188,26 @@ correspond » ; elles sont maintenant séparées :
| Symptôme | Cause | | Symptôme | Cause |
| --- | --- | | --- | --- |
| `Authorization required` / `Invalid MIT-MAGIC-COOKIE-1 key` | cookie X introuvable ou périmé | | `Authorization required` / `Invalid MIT-MAGIC-COOKIE-1 key` | cookie X introuvable ou périmé |
| `Aucune fenêtre visible sur DISPLAY=:0` | session Wayland, ou navigateur hors session | | `Session Wayland : seule la fenêtre technique du compositeur est visible` | voir ci-dessous |
| `Aucune fenêtre visible sur DISPLAY=:0` | navigateur lancé hors de la session de l'agent |
| Liste des fenêtres ouvertes | titre mal renseigné — recopier un fragment de la liste | | Liste des fenêtres ouvertes | titre mal renseigné — recopier un fragment de la liste |
### Wayland
Ubuntu démarre en session Wayland par défaut, et Firefox y tourne en client Wayland natif.
Une telle fenêtre est **invisible à xdotool** : ni activation, ni envoi de touche. Le
symptôme est net — côté X11, seule `mutter guard window` apparaît, la fenêtre technique du
compositeur. L'agent reconnaît cette signature et le dit explicitement.
Deux issues :
- **Rester en Wayland, passer Firefox sous XWayland.** L'agent pose `MOZ_ENABLE_WAYLAND=0`
en lançant le navigateur, ce qui suffit — *à condition qu'aucune instance Firefox ne
tourne déjà*. Firefox délègue l'URL à l'instance existante, qui garde ses propres
variables d'environnement : ferme toutes ses fenêtres avant de lancer la capture.
- **Ouvrir une session Xorg.** Sur l'écran de connexion GDM, roue dentée en bas à droite →
« Ubuntu sur Xorg ». Tout redevient pilotable, y compris une fenêtre ouverte à la main.
Si le rappel du plein écran s'avère fragile sur ta VM, l'alternative sans clavier est de Si le rappel du plein écran s'avère fragile sur ta VM, l'alternative sans clavier est de
lancer le navigateur en mode kiosque (`chromium --kiosk`) : il n'y a alors plus de plein lancer le navigateur en mode kiosque (`chromium --kiosk`) : il n'y a alors plus de plein
écran à restaurer. écran à restaurer.

View File

@@ -48,7 +48,12 @@ export async function openUrl(
const child = spawn(settings.command, args, { const child = spawn(settings.command, args, {
detached: true, detached: true,
stdio: 'ignore', stdio: 'ignore',
env: x11Env(), // Sous une session Wayland, une fenêtre Firefox native est invisible à
// xdotool : ni activation, ni touche, donc pas de plein écran. XWayland la
// rend pilotable, sans rien changer à la lecture vidéo. Sans effet sur une
// session X11, et sans effet non plus si une instance Firefox tourne déjà —
// elle récupérerait l'URL avec ses propres variables d'environnement.
env: { ...x11Env(), MOZ_ENABLE_WAYLAND: '0' },
}); });
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {

View File

@@ -3,6 +3,7 @@ import net from 'node:net';
import { promisify } from 'node:util'; import { promisify } from 'node:util';
import { WebSocket } from 'ws'; import { WebSocket } from 'ws';
import { CONFIG_PATH, type AgentConfig } from './config.ts'; import { CONFIG_PATH, type AgentConfig } from './config.ts';
import { looksLikeWayland } from './hotkey.ts';
import { resolveDisplay, resolveXauthority, x11Env } from './x11.ts'; import { resolveDisplay, resolveXauthority, x11Env } from './x11.ts';
const run = promisify(execFile); const run = promisify(execFile);
@@ -140,6 +141,16 @@ async function reportVisibleWindows(display: string): Promise<void> {
} }
} }
if (looksLikeWayland(titles.map((title) => ({ id: '', title })))) {
line(
'warn',
'fenêtres',
`${ids.length} visible(s), toutes techniques (${titles.join(', ')}) — session Wayland : ` +
'les fenêtres applicatives sont invisibles à xdotool',
);
return;
}
line('ok', 'fenêtres', `${ids.length} visible(s)`); line('ok', 'fenêtres', `${ids.length} visible(s)`);
for (const title of titles) console.log(` · ${title}`); for (const title of titles) console.log(` · ${title}`);
} }

View File

@@ -66,6 +66,22 @@ interface VisibleWindow {
title: string; title: string;
} }
/**
* Fenêtres techniques des compositeurs. Sous Wayland, le serveur XWayland n'en
* expose qu'elles : les applications, elles, sont des clients Wayland natifs,
* invisibles à xdotool. N'avoir qu'elles à l'écran est donc une signature, pas
* un hasard — et le diagnostic doit le dire plutôt que de laisser croire à un
* titre de fenêtre mal renseigné.
*/
const COMPOSITOR_WINDOWS = [/^mutter guard window$/i, /^gnome-shell$/i, /^kwin/i, /^plasmashell$/i];
export function looksLikeWayland(windows: VisibleWindow[]): boolean {
return (
windows.length > 0 &&
windows.every((window) => COMPOSITOR_WINDOWS.some((pattern) => pattern.test(window.title)))
);
}
/** /**
* Traduit un échec de xdotool en cause identifiable. * Traduit un échec de xdotool en cause identifiable.
* *
@@ -171,9 +187,20 @@ function describeNoMatch(match: string, windows: VisibleWindow[]): string {
if (windows.length === 0) { if (windows.length === 0) {
return ( return (
`Aucune fenêtre visible sur DISPLAY=${display}. L'agent ne voit pas ta session ` + `Aucune fenêtre visible sur DISPLAY=${display}. L'agent ne voit pas ta session ` +
'graphique : soit le navigateur tourne dans une autre session, soit la session est ' + "graphique : le navigateur tourne-t-il bien sur cette machine, dans la session de " +
'en Wayland — une fenêtre Wayland native est invisible à xdotool. ' + "l'utilisateur qui exécute l'agent ?"
'Lance Firefox avec MOZ_ENABLE_WAYLAND=0, ou ouvre une session Xorg.' );
}
if (looksLikeWayland(windows)) {
const only = windows.map((window) => `« ${window.title} »`).join(', ');
return (
`Session Wayland : côté X11, seule la fenêtre technique du compositeur est visible ` +
`(${only}). Firefox y tourne en client Wayland natif — xdotool ne peut ni le voir ni ` +
'lui envoyer de touche. Deux issues : relancer Firefox sous XWayland (ferme toutes ses ' +
"fenêtres d'abord, l'agent pose MOZ_ENABLE_WAYLAND=0 au lancement ; une instance déjà " +
"ouverte en Wayland récupérerait l'URL et le réglage resterait sans effet), ou ouvrir " +
'une session Xorg depuis l\'écran de connexion GDM.'
); );
} }