fix : opening link 1
All checks were successful
release / build (push) Successful in 23s
release / verify-windows (push) Successful in 1m13s

This commit is contained in:
jeanotx32
2026-08-12 01:03:23 +02:00
parent 6ad8429cf1
commit a38baf9a88
6 changed files with 109 additions and 19 deletions

View File

@@ -80,10 +80,47 @@ export function resolveDisplay(): string {
return ':0';
}
/** Environnement d'exécution des outils graphiques (xdotool, navigateur). */
export function x11Env(): NodeJS.ProcessEnv {
/**
* Bus de session de l'utilisateur.
*
* Firefox s'en sert pour confier une URL à l'instance déjà lancée. Sans lui, le
* nouveau processus ne la trouve pas, bute sur le verrou de profil et affiche
* « Firefox est déjà ouvert » au lieu d'ouvrir la page — c'est le mécanisme
* retenu sous Wayland, où le protocole X de remoting n'existe pas.
*/
export function resolveSessionBus(): string | null {
if (process.env.DBUS_SESSION_BUS_ADDRESS) return process.env.DBUS_SESSION_BUS_ADDRESS;
const runtime = runtimeDir();
if (!runtime) return null;
const socket = path.join(runtime, 'bus');
try {
if (fs.statSync(socket).isSocket()) return `unix:path=${socket}`;
} catch {
/* pas de bus de session accessible */
}
return null;
}
/**
* Environnement d'exécution des outils de session (xdotool, navigateur).
*
* Un service systemd « system » n'hérite de rien de la session graphique : ni
* écran, ni cookie d'autorisation, ni bus. Les trois se résolvent ici, à chaque
* appel, pour survivre à un changement de session sans réinstallation.
*/
export function sessionEnv(): NodeJS.ProcessEnv {
const env: NodeJS.ProcessEnv = { ...process.env, DISPLAY: resolveDisplay() };
const auth = resolveXauthority();
if (auth) env.XAUTHORITY = auth;
const runtime = runtimeDir();
if (runtime) env.XDG_RUNTIME_DIR = runtime;
const bus = resolveSessionBus();
if (bus) env.DBUS_SESSION_BUS_ADDRESS = bus;
return env;
}