2024 Python PySide6 Qt6 openrazer D-Bus Linux

Razer Blade Control

GUI PySide6 pour contrôler un Razer Blade sous Linux — parce que les outils officiels ne tournent pas sur Fedora.

Voir sur GitHub
Razer Blade Control

Le problème

J'utilise un Razer Blade sous Fedora. Razer Synapse — le logiciel officiel pour gérer le RGB et les profils — ne tourne que sur Windows et macOS. Sur Linux : rien.

openrazer existe : c'est un driver kernel open source qui expose une API pour contrôler les périphériques Razer. Il y a même une interface graphique qui va avec, Polychromatic. Sauf que Polychromatic est en maintenance minimale depuis un moment et supporte mal mon modèle exact de laptop.

J'ai passé une soirée à chercher une alternative. Puis j'ai passé un weekend à écrire la mienne.

Comment Linux parle aux périphériques : D-Bus

Sur Linux, les applications communiquent souvent entre elles via D-Bus — un bus de messages système. openrazer expose son API de cette façon : quand tu veux changer la couleur d'une touche, tu n'écris pas directement dans un registre matériel, tu envoies un message D-Bus au daemon openrazer qui s'en charge.

C'est abstrait mais pratique : n'importe quel langage qui sait parler D-Bus peut contrôler les périphériques. En Python, ça se fait avec quelques lignes. L'interface reçoit l'événement « utilisateur a choisi cette couleur pour cette touche », envoie le message D-Bus, le daemon applique la couleur. La latence est suffisamment faible pour faire du live preview fluide.

Interface principale — RGB par touche avec prévisualisation temps réel
Interface principale — RGB par touche avec prévisualisation temps réel

Le RGB par touche et PySide6

Le Razer Blade supporte le per-key lighting : chaque touche peut avoir sa propre couleur indépendamment. openrazer expose ça comme une matrice — rangées × colonnes, une couleur RGB par cellule.

Pour l'interface, j'ai choisi PySide6 : les bindings Python officiels pour Qt6. Qt permet de créer des widgets personnalisés proprement, de gérer les événements sans se battre contre le framework, et de faire des applications qui ressemblent à quelque chose sur Linux natif.

Le détail qui rend l'outil agréable : le layout du clavier affiché en temps réel dans l'UI, qui se met à jour au fur et à mesure que tu choisis les couleurs dans le color picker. Ça semble évident, mais beaucoup d'outils de config RGB ont un bouton « Appliquer » et un aperçu statique. Voir la couleur changer en direct pendant la sélection, ça change complètement l'expérience.

Températures, batterie, profils de perfs

Puisque l'outil était ouvert de toute façon, autant centraliser aussi la surveillance système.

Les températures CPU et GPU viennent de sysfs — le système de fichiers virtuel Linux qui expose les données hardware. /sys/class/thermal/ contient un fichier par capteur thermique, il suffit de le lire. La batterie passe par upower, un daemon système qui agrège l'état de toutes les sources d'énergie. Les profils de performance (balanced, performance, quiet) utilisent les interfaces DMI du kernel.

Tout ça se rafraîchit toutes les 2 secondes via des QTimer. L'appli tourne en tâche de fond depuis des mois sans fuite mémoire détectable. C'est le genre de compliment silencieux qu'un outil système se fait lui-même.

realitynauts@bugquest:~
×
Realitynauts
RN

$ cat auteur.txt

Realitynauts — Dev PHP / Python / Hardware
Autiste. Intensément focalisé. Toujours en prod.

$ cat opportunites.txt

Ce projet te parle ? Tu as un projet similaire
ou complémentaire ? Parlons-en.

$ ./contact.sh