## 🔧 Correctifs critiques ### Forçage de l'état RGB au démarrage (résout clavier éteint au boot) - **Problème résolu**: Clavier parfois éteint au redémarrage, impossible à rallumer - Suppression vérification `if (brightness == 0)` dans writeRGB() - _applyCurrentState() force TOUJOURS brightness + RGB au boot - Logs explicites pour diagnostic - Fichiers: backend.js, ui.js - Documentation: docs/ANALYSE_PERSISTANCE.md ### Correction couleurs GNOME officielles - 7 des 9 presets utilisaient de mauvaises valeurs RGB - Correction basée sur les valeurs hex officielles GNOME: * Turquoise #2190a4: (33,144,164) ✅ * Vert #3a944a: (58,148,74) ✅ * Jaune #c88800: (200,136,0) ✅ * Orange #ed5b00: (237,91,0) ✅ * Rouge #e62d42: (230,45,66) ✅ * Rose #d56199: (213,97,153) ✅ * Ardoise #6f8396: (111,131,150) ✅ - Fichiers: schemas/gschema.xml, ui.js (_rgbToGnomeAccent) ## ✨ Améliorations UI ### Presets en cercles avec surbrillance - Presets affichés en cercles parfaits (border-radius: 50%) - Cercle blanc épais (3px) + box-shadow sur preset actif - Fonction _updatePresetSelection() avec tolérance RGB ±10 - Mise à jour automatique à chaque changement de couleur ### Synchronisation thème universelle - Correction: sync thème GNOME fonctionne maintenant depuis: * ✅ Roue chromatique * ✅ Sliders RGB * ✅ Presets (corrigé!) * ✅ Slider Master - Refactorisation _onPresetClicked() pour utiliser _onRGBChanged() ## 📚 Documentation et outils - docs/ANALYSE_PERSISTANCE.md: Analyse technique complète du problème de persistance - docs/RESULTAT_TEST_PERSISTANCE.md: Résultats des tests de validation - tools/test-persistance.sh: Script de test automatisé pour diagnostic ## 🧪 Tests effectués ✅ Initialisation au démarrage GNOME Shell ✅ Forçage RGB même avec brightness=0 ✅ Couleurs GNOME corrigées dans les logs ✅ Presets ronds avec surbrillance fonctionnelle ✅ Synchronisation thème depuis tous les modes Test au redémarrage PC: À valider par l'utilisateur 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
7.5 KiB
Analyse : Persistance de l'état du clavier RGB au redémarrage
Problème rapporté
Symptôme : Parfois au redémarrage de Debian, le clavier est éteint et ne peut pas être rallumé. L'utilisateur doit redémarrer sous Windows pour le rallumer.
Analyse technique
1. Comment fonctionne actuellement l'extension ?
Au démarrage de GNOME Shell
- L'extension s'active via
enable()dansextension.js - Elle crée le
KeyboardRGBIndicatorqui charge les valeurs depuis GSettings - Elle appelle
_applyCurrentState()qui :- Écrit
brightnessdepuis GSettings - Si brightness > 0, écrit les valeurs RGB depuis GSettings
- Écrit
Code actuel (extension/ui.js):
_applyCurrentState() {
Backend.writeBrightness(this._currentBrightnessLevel);
if (this._currentBrightnessLevel > 0) {
Backend.writeRGB(this._currentR, this._currentG, this._currentB, this._currentMasterGain);
}
}
À l'arrêt du PC
PROBLÈME IDENTIFIÉ : L'extension NE FORCE PAS l'état du clavier avant l'arrêt !
- Quand GNOME Shell se ferme,
disable()est appelé disable()détruit simplement l'interface, ne touche PAS au matériel- Les valeurs sysfs restent dans l'état actuel
2. Comportement du noyau Linux (asus-nb-wmi)
Les fichiers sysfs sous /sys/class/leds/asus::kbd_backlight/ sont :
- Éphémères : ils n'existent qu'en RAM, réinitialisés à chaque boot
- État par défaut au boot : Dépend du firmware ASUS et de l'état avant extinction
Observations
-rw-rw-r-- 1 root kbdled 4096 brightness
--w--w---- 1 root kbdled 4096 kbd_rgb_mode
- Permissions OK (groupe
kbdled) - kbd_rgb_mode est write-only : on ne peut pas lire l'état actuel !
3. Comportement au redémarrage
Scénario A : Extinction normale
- Linux s'éteint
- Firmware ASUS conserve son dernier état en mémoire volatile
- Au redémarrage :
- Si BIOS/UEFI réinitialise le contrôleur RGB → clavier éteint
- Si BIOS/UEFI préserve l'état → clavier allumé
Scénario B : Extinction brutale ou coupure de courant
- Contrôleur RGB réinitialisé complètement
- État par défaut firmware = souvent éteint
Scénario C : Dual-boot avec Windows
- Windows modifie l'état du clavier RGB via son propre driver
- Au redémarrage vers Debian :
- État hardware = celui laissé par Windows
- Si Windows a éteint le clavier → Debian ne peut pas le lire
4. Pourquoi Windows peut le rallumer ?
Windows utilise probablement :
- WMI (Windows Management Instrumentation) pour communiquer avec le firmware ASUS
- Accès direct au contrôleur RGB via ACPI
- Peut envoyer des commandes d'initialisation au firmware
Linux (asus-nb-wmi) ne fait que :
- Exposer les contrôles via sysfs
- Ne réinitialise PAS le contrôleur au boot
Solutions possibles
✅ Solution A : Forcer l'état au démarrage (RECOMMANDÉ)
Principe : Toujours forcer un état connu au démarrage de l'extension
Implémentation :
_applyCurrentState() {
// TOUJOURS écrire brightness, même si 0
Backend.writeBrightness(this._currentBrightnessLevel);
// TOUJOURS écrire RGB, même si brightness est 0
// Cela garantit que le contrôleur est dans un état connu
Backend.writeRGB(this._currentR, this._currentG, this._currentB, this._currentMasterGain);
}
Modification dans backend.js :
export function writeRGB(r, g, b, masterGain = 100) {
// ...
// SUPPRIMER cette vérification qui empêche l'écriture si brightness = 0
// const currentBrightness = readBrightness();
// if (currentBrightness === 0) {
// console.log('Brightness est 0, RGB mémorisé mais non appliqué');
// return true;
// }
// Toujours écrire RGB même si brightness = 0
// Cela initialise le contrôleur dans un état connu
// ... reste du code
}
Avantages :
- Simple à implémenter
- Garantit un état connu au démarrage
- Pas de dépendance système supplémentaire
Inconvénients :
- L'extension doit être activée pour fonctionner
- Délai entre boot et activation de GNOME Shell
❌ Solution B : Service systemd au boot
Principe : Script systemd qui force l'état avant le login
Avantages :
- Indépendant de GNOME Shell
- S'exécute très tôt au boot
Inconvénients :
- Complexe (nécessite root, service systemd)
- Duplique la logique
- Valeurs en dur ou à lire depuis GSettings (complexe)
❌ Solution C : udev rule avec action RUN
Principe : Déclencher un script à la détection du device
Inconvénients :
- Très complexe
- Timing incertain
- Nécessite privilèges root
Recommandation finale
Implémenter la Solution A :
- Modifier
_applyCurrentState()pour toujours écrire RGB - Supprimer la vérification
if (currentBrightness === 0)danswriteRGB() - Ajouter un log explicite au démarrage
Effet attendu :
- Au login GNOME, l'extension force brightness + RGB
- Même si le firmware a réinitialisé le clavier, il sera rallumé
- État cohérent à chaque démarrage
Notes importantes
Comportement actuel problématique
// backend.js ligne 182-186
const currentBrightness = readBrightness();
if (currentBrightness === 0) {
console.log('Brightness est 0, RGB mémorisé mais non appliqué');
return true; // ← PROBLÈME : on n'écrit pas RGB si brightness = 0
}
Pourquoi c'est un problème :
- Si au boot le firmware a
brightness = 0 - Et que GSettings a aussi
brightness-level = 0 - Alors
_applyCurrentState()écrit0dans brightness - Mais ne touche pas à
kbd_rgb_mode - Le contrôleur RGB reste dans un état indéfini
Comportement souhaité
// Toujours initialiser le contrôleur RGB, indépendamment de brightness
Backend.writeBrightness(this._currentBrightnessLevel);
Backend.writeRGB(this._currentR, this._currentG, this._currentB, this._currentMasterGain);
Résultat :
- Contrôleur RGB dans un état connu (couleur mémorisée)
- Brightness contrôle uniquement la visibilité
- Au prochain changement de brightness 0 → 1/2/3, la couleur apparaît immédiatement
Vérification après implémentation
Test 1 : Redémarrage normal
# Avant redémarrage
gsettings get org.gnome.shell.extensions.asuskbdrgb brightness-level
# → 2
# Redémarrer le PC
# Après login
cat /sys/class/leds/asus::kbd_backlight/brightness
# Devrait afficher une valeur correspondant au niveau 2
journalctl -f -o cat /usr/bin/gnome-shell | grep -i asus
# Devrait montrer : "RGB mis à (...)" même si brightness = 0
Test 2 : Brightness à 0 au démarrage
# Mettre brightness à 0
gsettings set org.gnome.shell.extensions.asuskbdrgb brightness-level 0
# Redémarrer
# Vérifier que RGB a quand même été écrit
journalctl -b -o cat /usr/bin/gnome-shell | grep "RGB mis à"
# Devrait afficher une ligne même avec brightness = 0
Test 3 : Dual-boot Windows
- Redémarrer sous Windows
- Modifier la couleur du clavier via Armoury Crate
- Éteindre le clavier dans Windows
- Redémarrer sous Debian
- Vérifier que l'extension rallume le clavier avec la couleur GSettings
Conclusion
Le problème n'est pas un bug de l'extension, mais une limitation de conception :
- L'extension suppose que le firmware conserve l'état RGB
- En réalité, le firmware ASUS peut réinitialiser le contrôleur
- La solution est de toujours forcer l'état au démarrage, indépendamment de l'état hardware actuel