Orchestrateur de démarrage Windows. Au boot, il détecte le contexte (TV connectée = mode jeu, écran bureau = mode bureau) et configure la machine en conséquence : résolution, son, plan d'alimentation, services, overclocking, puis lance Steam.
Windows démarre
→ Explorer
→ launcher.exe (Run key HKCU\...\Run)
│
├─ monitor::resolve_mode()
│ → mode "auto" : TV LG connectée ? oui → game, non → desktop
│ → mode "game" : force game
│ → mode "desktop": force desktop
│
├─ mode jeu ──────────────────────────────────────────────────────┐
│ cec power_on + set_source │
│ display : 1920×1080 + scale 175% │
│ sound : device LG (HDMI TV) │
│ wsl --shutdown │
│ HAGS enable │
│ TimerResolution 0.5ms │
│ GameBar uninstall │
│ GameMode enable │
│ Windows Update pause │
│ Notifications disable │
│ PowerPlan → Gaming │
│ killist : sc stop WSearch, SysMain, Spooler … │
│ disable_services : désactivation persistante │
│ RTSS : limit fps 0 │
│ Afterburner : profile 1 │
│ startup.game : exécutables à lancer │
│ Steam Big Picture │
│ cec-daemon.exe (daemon TV veille/réveil) │
│ │
└─ mode bureau ───────────────────────────────────────────────────┘
display : 2560×1440 + scale 125%
sound : device Speakers
HAGS disable
PowerPlan → Eco
killist restore / disable_services restore
startup.desktop : exécutables à lancer
| Mode | Déclenchement | Comportement |
|---|---|---|
game |
TV LG détectée (ou mode = "game") |
Optimise tout, lance Steam |
desktop |
TV absente (ou mode = "desktop") |
Restaure les réglages bureau |
Chaque module est contrôlé par une section dans config.toml. Supprimer une section ou laisser un champ vide désactive silencieusement le module.
| Paramètre | Valeurs | Description |
|---|---|---|
name |
chaîne | Sous-chaîne du nom du moniteur à détecter (insensible à la casse) |
mode |
"auto" / "game" / "desktop" |
"auto" = détection par moniteur connecté |
[monitor]
name = "LG"
mode = "auto"Change la résolution via QRes.exe (immédiat) et la mise à l'échelle Windows via le registre (effet au prochain démarrage). Chaque mode a sa propre résolution et son propre zoom.
La mise à l'échelle se définit en % — la conversion vers la valeur interne Windows (LogPixels) est automatique.
| Paramètre | Description |
|---|---|
exe_path |
Chemin vers QRes.exe (absent = résolution désactivée) |
game_width / game_height |
Résolution en mode jeu |
game_scale |
Zoom mode jeu en % (100, 125, 150, 175, 200) |
desktop_width / desktop_height |
Résolution en mode bureau |
desktop_scale |
Zoom mode bureau en % |
refresh_rate |
Hz (0 = ne pas changer) |
QRes.exe: standalone, pas d'installation.
Redirige le périphérique audio principal selon le mode via svcl.exe (SoundVolumeCommandLine de NirSoft). Avec auto_detect = true, vérifie que le device est visible avant de switcher — si la TV est éteinte, le switch est ignoré proprement.
| Paramètre | Description |
|---|---|
exe_path |
Chemin vers svcl.exe |
game_device |
Sous-chaîne du nom du device en mode jeu (ex: "LG") |
desktop_device |
Sous-chaîne du nom du device en mode bureau (ex: "Speakers") |
auto_detect |
true = vérifie que le device est disponible avant de switcher |
Téléchargement : NirSoft SoundVolumeCommandLine — contient
svcl.exe(CLI) etSoundVolumeView.exe(GUI).
Trouver le nom d'un device — méthode GUI :
- Lancer
SoundVolumeView.exe - Repérer le device dans la liste, colonne Name
- Copier un fragment distinctif (ex :
"LG","Realtek","Speakers")
Trouver le nom d'un device — méthode ligne de commande :
svcl.exe /scomma ""Liste tous les périphériques audio actifs. La première colonne est le nom exact du device.
game_device/desktop_devicesont des sous-chaînes (insensible à la casse) — un fragment unique suffit, pas besoin du nom complet.
auto_detect = true: au démarrage,svclvérifie que le device est visible avant de tenter le switch — si la TV est éteinte, le switch est ignoré sans erreur.
Arrête WSL en mode jeu pour libérer CPU, RAM et la VM légère Hyper-V.
| Paramètre | Description |
|---|---|
enabled |
true = exécute wsl --shutdown en mode jeu |
Active HAGS en mode jeu, le désactive en mode bureau. Aucun paramètre — appliqué systématiquement. Nécessite les droits admin.
Lance TimerResolution.exe en mode jeu. La résolution revient à 15.625ms à la fermeture du processus.
| Paramètre | Description |
|---|---|
path |
Chemin vers TimerResolution.exe |
resolution |
Résolution en ms (ex: 0.5) |
Désinstalle Microsoft.XboxGamingOverlay et désactive Game DVR via le registre.
| Paramètre | Description |
|---|---|
uninstall |
true = désinstalle l'overlay Xbox et désactive Game DVR |
Active la priorité Game Mode via le registre HKCU.
| Paramètre | Description |
|---|---|
enabled |
true = active AutoGameModeEnabled en mode jeu |
Stoppe le service wuauserv en mode jeu.
| Paramètre | Description |
|---|---|
pause_in_game |
true = stoppe Windows Update au démarrage du mode jeu |
Désactive les notifications Windows pendant la session de jeu.
| Paramètre | Description |
|---|---|
disable_in_game |
true = coupe les notifications toast en mode jeu |
Change le plan d'alimentation Windows. Lister les GUIDs : powercfg /L (terminal admin).
| Paramètre | Description |
|---|---|
game |
GUID du plan à activer en mode jeu ("" = désactivé) |
desktop |
GUID du plan à activer en mode bureau ("" = désactivé) |
Arrête des services (sc stop) et tue des processus (taskkill) pour libérer des ressources en mode jeu. L'arrêt est temporaire : les services redémarrent normalement au prochain boot.
| Paramètre | Description |
|---|---|
services |
Noms courts de services Windows (ex: ["WSearch", "SysMain"]) |
processes |
Noms d'exécutables (ex: ["OneDrive.exe"]) |
Trouver le nom court :
services.msc→ double-clic → onglet Général → Nom du service
Désactive des services (sc config start= disabled) en mode jeu et les restaure en démarrage Manuel en mode bureau. La désactivation persiste aux boots suivants.
| Paramètre | Description |
|---|---|
services |
Noms courts des services à désactiver (ex: ["WSearch", "WacomProfessional"]) |
killist vs disable_services : utilisez
killistpour libérer des ressources pendant la session. Utilisezdisable_servicespour des services que vous ne voulez jamais actifs en mode jeu, même après un redémarrage.
Modifie la limite de framerate dans le profil Global de RTSS, puis lance RTSS.
| Paramètre | Description |
|---|---|
path |
Chemin vers RTSS.exe |
profile_path |
Chemin vers le fichier profil Global de RTSS |
game_limit |
Limite fps en mode jeu (0 = illimité) |
desktop_limit |
Limite fps en mode bureau |
Lance MSI Afterburner avec un profil d'overclocking différent selon le mode (argument /ProfileN).
| Paramètre | Description |
|---|---|
path |
Chemin vers MSIAfterburner.exe |
game_profile |
Profil à charger en mode jeu (1 à 5) |
desktop_profile |
Profil à charger en mode bureau (1 à 5, optionnel) |
Lance une liste d'exécutables selon le mode.
| Paramètre | Description |
|---|---|
desktop |
Chemins complets des exécutables à lancer en mode bureau |
game |
Chemins complets des exécutables à lancer en mode jeu |
[startup]
desktop = ["C:\\Program Files\\Synology\\SynologyDrive\\bin\\launcher.exe"]
game = []Lance Steam en mode jeu uniquement.
| Paramètre | Description |
|---|---|
path |
Chemin vers steam.exe |
args |
Arguments passés à Steam (ex: ["-bigpicture"]) |
Allume la TV et bascule sur l'entrée HDMI au démarrage du mode jeu. Optionnellement lance cec-daemon.exe pour la veille/réveil automatique.
Requiert l'adaptateur USB-CEC Pulse-Eight.
| Paramètre | Description |
|---|---|
enabled |
true = active le contrôle CEC au démarrage du mode jeu |
client_path |
Chemin vers cec-client.exe (fourni par le driver Pulse-Eight) |
daemon |
true = lance cec-daemon.exe en fin de mode jeu |
[cec]
enabled = true
client_path = 'C:\Program Files (x86)\Pulse-Eight\USB-CEC Adapter\cec-client.exe'
daemon = truePour la documentation complète du daemon : cec-daemon/README.md
| Paramètre | Description |
|---|---|
path |
Chemin du fichier de log (défaut : launcher.log à côté du .exe) |
Le launcher écrit launcher.log dans le même dossier que le .exe (configurable).
[2026-03-13 18:42:01] [INFO] steam spawned pid=4521
[2026-03-13 18:42:01] [INFO] steam::launch ... ok
[2026-03-13 18:42:01] [WARN] afterburner: path not found: C:\...\MSIAfterburner.exe
[2026-03-13 18:42:01] [WARN] afterburner::launch ... FAIL
| Ce que tu vois | Signification |
|---|---|
xxx ... ok |
Étape réussie |
xxx ... FAIL |
Étape échouée — lire le [WARN] juste au-dessus |
path not found: C:\... |
Chemin incorrect dans config.toml |
spawn error: ... |
Erreur OS au lancement (permissions, fichier manquant…) |
spawned pid=XXXX |
Processus démarré — croiser avec le Gestionnaire des tâches |
exit=Some(1) |
Commande terminée avec code d'erreur |
killist: sc stop X exit=... |
Service déjà arrêté (normal) ou droits insuffisants |
Le fichier est en append — chaque démarrage ajoute des lignes sans effacer les précédentes.
cd /mnt/d/developpement.code/launcher
source ~/.cargo/env
cargo build --release