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

@@ -48,7 +48,12 @@ export async function openUrl(
const child = spawn(settings.command, args, {
detached: true,
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) => {

View File

@@ -3,6 +3,7 @@ import net from 'node:net';
import { promisify } from 'node:util';
import { WebSocket } from 'ws';
import { CONFIG_PATH, type AgentConfig } from './config.ts';
import { looksLikeWayland } from './hotkey.ts';
import { resolveDisplay, resolveXauthority, x11Env } from './x11.ts';
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)`);
for (const title of titles) console.log(` · ${title}`);
}

View File

@@ -66,6 +66,22 @@ interface VisibleWindow {
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.
*
@@ -171,9 +187,20 @@ function describeNoMatch(match: string, windows: VisibleWindow[]): string {
if (windows.length === 0) {
return (
`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 ' +
'en Wayland — une fenêtre Wayland native est invisible à xdotool. ' +
'Lance Firefox avec MOZ_ENABLE_WAYLAND=0, ou ouvre une session Xorg.'
"graphique : le navigateur tourne-t-il bien sur cette machine, dans la session de " +
"l'utilisateur qui exécute l'agent ?"
);
}
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.'
);
}