L'antre du Loup Blanc

Un bouton mute reprogrammé en Play/Pause sur mon casque G733

Mon casque Logitech G733 a un bouton mute physique, sur l'écouteur gauche. Sous Windows, le logiciel G HUB permet de le réassigner à autre chose — Play/Pause par exemple, ce qui m'arrange beaucoup quand j'écoute de la musique. Sous Linux, pas de G HUB : le bouton se contente de couper le micro, et rien d'autre. Frustrant pour un truc aussi bête.

Voici l'histoire d'une petite enquête, et de ce qui a fini par tomber juste — avec un sérieux coup de main de mon fidèle ami Claude.

Le matériel et l'idée

  • Casque sans fil Logitech G733.
  • Zorin OS.
  • Objectif : le bouton mute doit faire Play/Pause.
  • Bonus : éteindre les LED sur les oreillettes. Le casque n'a aucune mémoire embarquée, donc à chaque allumage elles se rallument. Je les avais masquées au scotch noir, ce qui n'est pas très glorieux pour un casque à 200 €.

Les fausses pistes

Le problème commence par une mauvaise nouvelle : sous Linux, le bouton ne fait rien d'observable. On essaye plusieurs angles classiques pour intercepter la touche — silence radio à chaque fois.

Verdict : le bouton est figé dans le firmware du casque. Il déclenche le mute du micro à l'intérieur de l'appareil ; le système d'exploitation n'est jamais informé qu'on a appuyé dessus.

La percée

Les casques Logitech parlent aussi un protocole de configuration privé, qu'utilise leur logiciel G HUB pour tout régler (couleurs des LED, mapping des touches, etc.). On finit par découvrir comment dialoguer avec ce protocole sous Linux. Et là, bingo : on peut dire au casque d'arrêter de couper le micro tout seul, et de prévenir l'OS à chaque appui à la place.

Le reste suit naturellement : un petit programme tourne en tâche de fond, écoute le casque, et à chaque appui sur le bouton il fait croire au système qu'on a tapé sur la touche Play/Pause d'un clavier. Spotify, YouTube Music et compagnie ne font pas la différence.

Le piège du sans-fil

Détail qui complique : le casque sans fil oublie tout dès qu'il s'éteint. Configuration oubliée, LED rallumées. Pas grave : le casque envoie un petit signal quand il se réveille. Le programme l'attend, et lui ré-applique la config en une fraction de seconde.

Et les LED

Tant qu'on tient le bon protocole, on lui demande aussi de mettre les LED en couleur noire sur les deux zones. Résultat : tout éteint, sans avoir besoin de scotch.

D'un script bricolé à un binaire propre

Première version : un script Python rapide qui fonctionne. Deuxième version : on le réécrit en Rust pour obtenir un seul fichier de 318 Ko, à copier-coller, sans rien à installer à côté. Démarrage automatique au boot, accès au casque sans avoir besoin d'être root.

Résultat

Bouton mute = Play/Pause. LED éteintes. Tout se ré-applique seul quand le casque se réveille. Le scotch noir est à la poubelle.

Et la vraie morale de cette histoire : je n'ai fait que guider et tester. Tout le reste — l'enquête, la découverte du bon protocole, le script Python, sa réécriture en Rust, l'intégration au démarrage — c'est mon fidèle ami Claude qui l'a fait. Sans IA à côté, je n'aurais même pas su par où commencer. C'est exactement le pari de ce blog : voir jusqu'où un débutant accompagné peut aller. Spoiler : très loin.

Pour les curieux


Ce blog n'est pas une pub pour Claude ni pour Anthropic — personne ne m'a rien demandé. Claude est simplement l'outil que j'utilise au quotidien ; remplace-le librement par celui que tu préfères, le principe reste le même.

Tous les articles