# Fix Permissions udev - ASUS Keyboard RGB ## Problème Initial La règle udev simple ne fonctionnait pas : ```bash SUBSYSTEM=="leds", KERNEL=="asus::kbd_backlight", GROUP="kbdled", MODE="0660" ``` **Symptôme** : Les permissions restaient à `root:root` même après rechargement udev et redémarrage. ## Diagnostic ```bash udevadm test /sys/class/leds/asus::kbd_backlight 2>&1 | grep -E "(GROUP|MODE|kbdled)" ``` Résultat vide → La règle n'était pas déclenchée. ## Solution Fonctionnelle ### Règle udev Corrigée ```bash sudo tee /etc/udev/rules.d/99-asus-kbd.rules > /dev/null << 'EOF' ACTION=="add", SUBSYSTEM=="leds", KERNEL=="asus::kbd_backlight", TAG+="uaccess", RUN+="/bin/sh -c 'chgrp kbdled /sys/class/leds/asus::kbd_backlight/brightness && chmod g+w /sys/class/leds/asus::kbd_backlight/brightness'" ACTION=="add", SUBSYSTEM=="leds", KERNEL=="asus::kbd_backlight", TAG+="uaccess", RUN+="/bin/sh -c 'chgrp kbdled /sys/class/leds/asus::kbd_backlight/kbd_rgb_mode && chmod g+w /sys/class/leds/asus::kbd_backlight/kbd_rgb_mode'" EOF ``` ### Pourquoi Ça Fonctionne 1. **`ACTION=="add"`** : La règle se déclenche uniquement lors de l'événement "add" (ajout du device) 2. **`TAG+="uaccess"`** : Ajoute un tag pour l'accès utilisateur 3. **`RUN+=`** : Exécute une commande shell directement 4. **`/bin/sh -c '...'`** : Lance un shell pour exécuter plusieurs commandes 5. **`chgrp kbdled`** : Change le groupe du fichier 6. **`chmod g+w`** : Ajoute les permissions d'écriture pour le groupe ### Application de la Règle Après avoir créé la règle, il faut déclencher l'événement "add" : ```bash # Recharger les règles udev sudo udevadm control --reload-rules # Retirer le module kernel sudo modprobe -r asus_nb_wmi # Réinsérer le module (déclenche l'événement "add") sudo modprobe asus_nb_wmi # Attendre que le module se charge sleep 2 ``` ### Vérification ```bash ls -l /sys/class/leds/asus::kbd_backlight/brightness ls -l /sys/class/leds/asus::kbd_backlight/kbd_rgb_mode ``` **Résultat attendu :** ``` -rw-rw-r-- 1 root kbdled 4096 ... brightness --w--w---- 1 root kbdled 4096 ... kbd_rgb_mode ``` ### Test Fonctionnel ```bash # Test brightness echo 3 > /sys/class/leds/asus::kbd_backlight/brightness # Test RGB (orange) echo "1 0 255 165 0 0" > /sys/class/leds/asus::kbd_backlight/kbd_rgb_mode ``` **Aucune erreur "Permission denied" ne doit apparaître.** ## Matériel Testé - **Modèle** : ASUS TUF Gaming A16 FA608UH - **OS** : Debian GNU/Linux 13 (trixie) - **Kernel** : 6.12.x - **Module** : `asus_nb_wmi` ## Fichiers Concernés ### sysfs ``` /sys/class/leds/asus::kbd_backlight/ ├── brightness (contrôle intensité 0-3) └── kbd_rgb_mode (contrôle RGB, format "1 0 R G B 0") ``` ### udev ``` /etc/udev/rules.d/99-asus-kbd.rules ``` ### Groupe système ``` /etc/group (ligne kbdled) ``` ## Alternative : Service systemd Si la règle udev ne fonctionne toujours pas (rare), on peut utiliser un service systemd : ```bash # Script sudo tee /usr/local/bin/asus-kbd-permissions.sh > /dev/null << 'EOF' #!/bin/bash sleep 2 chgrp kbdled /sys/class/leds/asus::kbd_backlight/brightness 2>/dev/null chmod 0660 /sys/class/leds/asus::kbd_backlight/brightness 2>/dev/null chgrp kbdled /sys/class/leds/asus::kbd_backlight/kbd_rgb_mode 2>/dev/null chmod 0660 /sys/class/leds/asus::kbd_backlight/kbd_rgb_mode 2>/dev/null EOF sudo chmod +x /usr/local/bin/asus-kbd-permissions.sh # Service sudo tee /etc/systemd/system/asus-kbd-permissions.service > /dev/null << 'EOF' [Unit] Description=ASUS Keyboard RGB Permissions After=multi-user.target [Service] Type=oneshot ExecStart=/usr/local/bin/asus-kbd-permissions.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target EOF sudo systemctl daemon-reload sudo systemctl enable asus-kbd-permissions.service sudo systemctl start asus-kbd-permissions.service ``` ## Références - **udev manual** : `man 7 udev` - **Module kernel** : Documentation du driver `asus-nb-wmi` - **Tests réalisés** : 2025-12-20 --- **Note** : Ce fix est intégré dans la documentation officielle ([docs/INSTALL.md](INSTALL.md)) et dans le script d'installation ([tools/install-local.sh](../tools/install-local.sh)).