Je me suis remis sur Rivalcfg après une longue pause !
Je suis de retour sur Rivalcfg ! 🎉️
Pour ceux qui ne connaissent pas le projet, il s'agit d'un outil en ligne de commande et d'une bibliothèque Python permettant de configurer les souris gaming de la marque SteelSeries. Ces souris sont en effet très [trop ?] configurables.
On peut par exemple changer la sensibilité du capteur, configurer les paramètres d'alimentation (pour les modèles sans fil), les faire clignoter de toutes les couleurs [pire qu'un sapin de Noël !] ou encore réassigner les boutons comme on le souhaite. Certaines des souris de la marque disposent même de vibreurs et d'écrans OLED [ouais c'est un peu too much là !].
Où en est-on ?
L'année 2025 a été assez compliquée pour moi. J'ai dû pas mal batailler pour avancer sur mes projets et pour écrire des articles mais j'ai malgré tout réussi à faire quelques trucs, surtout sur la fin d'année. Je ne vais pas vous faire la rétrospective de mon année 2025 ici car c'est pas le sujet, et puis je l'ai déjà fait sur ma page Buy Me a Coffee :
[Oui je sais, c'est tout en anglais, mais j'ai pas eu le courage de refaire un article sur ce blog en janvier, désolé. 😬️]
Mais revenons-en à Rivalcfg. Dans le titre de l'article je parle d'« une longue pause », car ça fait bien 2 ans pour moi que je n'ai pas travaillé « sérieusement » sur ce projet. En 2024 je me suis surtout efforcé de faire quelques ajouts faciles histoire de maintenir le projet en vie, et en 2025 j'ai presque rien fait.
En 2025 j'ai en effet sorti une seule et unique version de Rivalcfg (la v4.15.0)... Et j'ai eu beaucoup de mal à la sortir. Non pas qu'elle contienne quoi que ce soit de compliqué techniquement. J'étais juste épuisé. J'étais sur une sorte de mini-burnout sur le projet. Dès que je voyais passer un email en rapport avec Rivalcfg j'avais juste envie de l'enterrer et de ne plus y penser. Je suis d'ailleurs désolé de ne pas avoir toujours répondu aux messages, j'en avais pas la force.
Heureusement les choses ont commencé à aller mieux sur la fin de l'année, j'ai même eu des semaines où j'ai été particulièrement en forme ce qui m'a permis de publier plein d'articles sur cette période. Et puis fin décembre / début janvier, je me suis remis tranquillement sur Rivalcfg. J'ai pu travailler sur pas mal de sujets qui traînaient depuis trop longtemps et j'ai également pu rajouter le support de quelques nouvelles souris sorties en 2025.
Aujourd'hui ça va donc mieux, la motivation est revenue et je vais donc vous parler un peu de tout ce qui se trame autour du projet.
10 ans déjà !
Rivalcfg fêtera ses 10 ans cette année ! Ça fait 10 ans que je me suis lancé dans la rétro-ingénierie de bidules USB ! Le temps passe vite ! J'ai en effet acheté ma première souris SteelSeries et commencé à la bidouiller en mars 2016, j'en avais d'ailleurs parlé dans un article sur ce blog :
Le lendemain de la sortie de cet article je commençais le projet Rivalcfg, dont la première version est sortie à peine une semaine plus tard. J'en avais également parlé sur ce blog :
À la base Rivalcfg n'était pas prévu pour supporter une autre souris que celle que je possédais, la SteelSeries Rival 100. Mais très rapidement j'ai voulu en supporter une autre et j'ai donc réécrit tout le code pour rendre ça possible. Je ne vous refais pas tout l'historique, car ça aussi j'en ai déjà parlé dans un article de paru en 2020 :
Tout ça pour dire qu'aujourd'hui Rivalcfg vise à supporter toutes les souris gaming de la marque SteelSeries. Actuellement 73 modèles sont supportés si on en croit la commande "rivalcfg --list", mais il ne faut pas s'y fier. Certaines souris y sont en effet listées en double (lorsqu'elles disposent de deux product id différents pour leur mode filaire et sans fil). Et puis certaines souris ne sont que des déclinaisons esthétiques d'un même modèle et sont identiques d'un point de vue technique.
Si je recompte à la main, je tombe plutôt sur le chiffre de 24 familles de souris, ce qui est déjà pas mal ! 😄️
Un p'tit logo pour fêter ça !
Pour fêter mon retour sur le projet (ou plutôt le retour de ma motivation), j'ai enfin dessiné un petit logo pour Rivalcfg. Il représente l'avant d'une souris avec sa molette de défilement, le tout formant un « R », comme dans « [R]ivalcfg ». Le logo reprend les codes de celui de SteelSeries mais en reste suffisamment éloigné pour ne pas risquer d'avoir de problème juridique... 😬️
Pour le moment le logo n'est utilisé que sur le site Web, il faut encore que je le colle sur GitHub et dans la doc. À terme il pourra également être utilisé par l'interface graphique... Si elle arrive un jour... 😅️
Enfin un site Web !
Après 10 ans d'existence, il était grand temps que le projet ait son propre site Web. Je me suis donc penché sur la réalisation d'un template Pelican (le générateur de site statique que j'utilise également pour ce blog) qui sera facilement réutilisable pour tous mes sites de projet.
Ce template est basé sur celui que j'ai déjà réalisé pour le blog sur lequel vous êtes en train de lire le présent article [enfin... sauf si vous me lisez depuis votre lecteur de flux RSS... 😅️] afin de conserver une cohérence visuelle entre mes différents sites.
Voici à quoi le site de Rivalcfg ressemble :
Ce site me permettra de pointer autre chose que GitHub lorsque je veux partager un lien vers mon projet (par les temps qui courent, qui sait combien de temps on va encore pouvoir rester sur GitHub...). Et puis je vais enfin pouvoir centraliser les news autour du projet à un seul endroit, et en anglais pour que ça soit accessible au plus grand nombre. Jusqu'à présent, je publiais de temps à autre des nouvelles sur ma page Buy Me a Coffee, sur ce blog, sur les release GitHub, sur Discord... C'était pas forcément facile à suivre ! 😅️
Vous pouvez donc à présent retrouver le site officiel de Rivalcfg à l'adresse suivante et vous abonner au flux RSS (enfin Atom) :
Nouvelle version : Rivalcfg v4.16.0
Comme je l'ai dit dans l'introduction, je me suis tranquillement remis sur ce projet, et j'ai enfin pu publier une nouvelle version, la v4.16.0, ce vendredi 13 février 2026.
Cette version ajoute le support de trois nouvelles souris, toutes sorties en 2025 : la Rival 3 Gen 2, la Rival 3 Wireless Gen 2, et la Aerox 3 Wireless CS2 Dragon Lore Edition.
Cette version apporte également des correctifs sur la configuration de la sensibilité des souris utilisant les capteurs TrueMove Air, TrueMove Core et PMW3326. Pour la faire courte, le mapping de ces capteurs n'est pas linéaire et nécessite une table de correspondance entre les DPI et les valeurs à envoyer au capteur.
Par facilité Rivalcfg utilisait jusqu'à présent une fonction linéaire pour faire un mapping approximatif, mais on pouvait dans certains cas tomber sur des valeurs qui n'existent pas, et dont le comportement est indéfini... Maintenant une table de correspondance a été implémentée pour les 3 capteurs, ce qui évitera tout problème à l'avenir.
D'un point de vue plus technique, cette version prend en charge Python 3.14, qui est sorti en fin d'année dernière, et Python 3.9 n'est plus officiellement supporté. En pratique, il est probable que ça continue à fonctionner avec cette version, mais elle n'est plus testée et aucun effort ne sera fait pour maintenir le code compatible avec.
J'ai également profité de cette version pour moderniser le packaging (Python) du projet. On passe du vénérable couple "setup.py" / setuptools au plus moderne "pyproject.toml" / Flit.
Si vous voulez en apprendre plus sur cette version, je vous laisse lire les release notes sur le tout nouveau site du projet : 😄️
Futur du projet ?
Bah déjà le prochain objectif sera d'ajouter le support de la Rival 5, une pull request a déjà été ouverte par un contributeur à ce sujet.
Ensuite, j'aimerais me pencher sur le dernier gros sujet qui traîne depuis trop longtemps : la possibilité d'envoyer plusieurs paquets de données à la souris pour un élément de configuration. C'est ce qui bloque le support du binding des boutons de l'Aerox 9 et qui empêche la configuration de la molette de la souris sur un certain nombre de modèles.
Il y a également les options d'alimentation de certaines souris comme les Rival 3 Wireless et Rival 3 Wireless Gen 2 sur lesquelles il faudrait que je me penche.
Et puis il y a un sujet sur lequel j'ai envie de travailler depuis des années : une interface graphique ! Toute belle, en GTK 4 ! Aucune idée d'à quelle échéance je pourrais avancer là-dessus, mais j'ai vraiment envie de la faire !
À vrai dire les premiers travaux permettant de l'implémenter ont déjà été commencés il y a des années. Des labels sont présents dans le profil des souris dans le seul but de pouvoir être utilisés pour construire l'interface. Et depuis la v4.4.0, Rivalcfg enregistre toutes les configurations sur le disque en plus de les envoyer à la souris. C'est nécessaire car on a besoin de pouvoir afficher l'état actuel dans l'interface graphique, mais on ne peut pas lire cet état depuis la souris...
C'est tout pour aujourd'hui
Voilà, c'est tout pour ce petit point de reprise du projet. Je me suis remis à développer sur Rivalcfg, mais je vais y aller tranquillement. Faut que j'arrête de me mettre la pression quand ça avance pas assez vite à mon goût, sinon je risque de recommencer à faire le mort pendant des mois, ça serait dommage. 😅️
À bientôt [enfin peut être,] pour de nouveaux articles ! 😉️