Exile UI (native Linux)
Réécriture native pour Linux de Lailloken/Exile-UI (à l'origine un overlay AutoHotkey v1.1, Windows uniquement).
Cible : Path of Exile 2, X11 et Wayland (KDE Plasma 6 testé). Stack : Tauri v2 (backend Rust) + SvelteKit/TypeScript (frontend), livré en AppImage.
Wayland
Un overlay de jeu a besoin de capacités que Wayland interdit aux clients (se positionner soi-même, rester au-dessus, hotkeys globaux, détection de la fenêtre active). L'app force donc le backend XWayland au démarrage quand un serveur X (réel ou XWayland) est joignable — PoE2 tournant lui-même en XWayland (Proton), les deux partagent le même espace X11 et tout fonctionne. Rien à configurer. Pour les sessions X11 c'est sans effet.
Si le compositeur replace/ne garde pas l'overlay au-dessus, créer une règle de fenêtre KWin pour « Exile UI Overlay » : Garder au-dessus = Oui, position/taille forcées, ignorer la barre des tâches. Jouer en plein écran fenêtré (borderless).
Fonctionnalités
Socle + Act-Tracker / leveling, timer de run, profils de personnage et zone-layout viewer.
Act-Tracker / leveling
- Lecture en continu du
Client.txtdu jeu (détection de zone et de niveau via les lignesGenerating level … area "…"et… is now level N). - Détection automatique du chemin du log (installations Steam courantes +
libraryfolders.vdf), ou saisie manuelle. - Overlay transparent, click-through, toujours au-dessus du jeu, affichant
le guide de leveling pas-à-pas (données PoE2 du projet d'origine), avec rendu
du langage de balisage (
(img:),(color:),(quest:),areaid… ;; nom,||). - Progression automatique : le guide avance quand on entre dans la zone cible d'une étape ; resynchronisation si on dévie.
- Hotkeys globaux configurables (suivant / précédent / afficher-masquer).
- Branche league-start vs non-league-start du guide.
- L'overlay n'apparaît que lorsque le jeu est au premier plan (optionnel).
Timer de run
- Chronomètre de speedrun campagne : temps total + splits par acte, calqué sur le timer de l'outil d'origine.
- Pause automatique en ville/hideout et sur inactivité (AFK) — la
détection AFK se fait par polling de la souris via
xdotool(les API d'idle sont absentes sous Wayland/XWayland). - Pause manuelle distincte de la pause automatique.
Profils de personnage
- Profils créés manuellement, liés à un personnage in-game par son nom (reconnu dans le log) — pas d'API GGG (OAuth réservé).
- Chaque profil garde sa propre progression, sa branche de guide et son timer (avec splits par acte).
Zone-layout viewer
- Sélecteur de layouts de zone interactif, porté de l'
act-decoderAHK : arbre de décision sur les images groupées parareaID, qu'on affine manuellement selon ce qu'on voit à l'écran (aucune capture d'écran — ToS). - Images de layouts PoE2 embarquées dans
static/layouts/.
Réglages et profils persistés dans ~/.config/exile-ui/config.json.
Développement
Prérequis : Rust, Node 18+, et les libs Tauri (webkit2gtk-4.1, gtk3,
libsoup-3.0), plus xdotool (détection de la fenêtre active).
cd exile-ui
npm install
npm run tauri dev # lancement en mode dev
npm run tauri build # produit l'AppImage + .deb dans src-tauri/target/release/bundle/
Sur certains systèmes le bundling AppImage nécessite
APPIMAGE_EXTRACT_AND_RUN=1 npm run tauri build(FUSE).
Architecture
src/ frontend (SvelteKit, SPA)
lib/api.ts pont commandes/events Tauri
lib/markup.ts parseur du langage de balisage du guide → HTML
lib/StepView.svelte rendu d'une étape du guide (lignes + optionnels)
lib/Overlay.svelte fenêtre overlay (label "overlay")
lib/Settings.svelte fenêtre principale / réglages / profils (label "main")
lib/Layouts.svelte fenêtre du zone-layout viewer (label "layout")
lib/layouts.ts arbre de décision des layouts (manifest areaID → chemins)
src-tauri/src/
lib.rs état partagé, commandes, fenêtres, hotkeys
logwatch.rs tail du Client.txt → parsing → events + progression
leveltracker.rs chargement du guide/zones, logique de progression
timer.rs timer de run (total + splits par acte, pauses auto/AFK)
poe.rs détection du log + fenêtre active (X11/xdotool)
config.rs persistance config + profils de personnage
src-tauri/data/ données PoE2 embarquées (guide2, areas2, gems2)
static/layouts/ images de layouts de zone (zone-layout viewer)
Les fenêtres chargent le même bundle SPA ; la vue est choisie selon le label de
la fenêtre (overlay, main, layout).
Crédits
Données de leveling, zones et gemmes dérivées du projet original Lailloken/Exile-UI. Ce fork n'est ni affilié ni approuvé par Grinding Gear Games.