Files
gnome-asus-kbd-rgb/docs/FIX_UDEV_PERMISSIONS.md
2025-12-21 06:55:49 +01:00

155 lines
4.1 KiB
Markdown

# 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)).