Remote sous linux : beucoup de lirc et un peu de magie

Tombé du lit vers 4h30 ce matin, je me suis demandé à quoi j'allais bien pouvoir m'attaquer avant de me souvenir qu'il restait une chose que je n'avais pas configuré depuis ma migration de kubuntu vers arch : ma télécommande.

Configuration :

  • Arch Linux 0.8 (Voodoo)
  • Noyau : 2.6.21-ARCH
  • Alsa : version 1.0.14rc2
  • Lirc : 0.8.1-6

La télécommande est, comme toute chose inutile, indispensable.

Côté matériel j'utilise donc la télécommande livrée en standard avec ma carte son Audigy platinum 2 zs pro, qui à l'époque valait son pesant d'or.

Il y a en fait deux sources d'événements différents : le hub qui possède 3 boutons en façades et la télécommande en elle même qui en possède 33.
Le fonctionnement de cette télécommande est 'simple'. Lorque que vous appuyez sur un bouton, un signal est envoyé au hub qui le transfère à la carte son par une interface midi.
Dans un premier temps il faut vérifier la présence de cette interface midi, qui a été créée par alsa si celui ci a été installé.

$ ls -l /dev/snd/ | grep midi

  • crw-rw 1 root audio 116, 8 mai 10 2007 midiC0D0
  • crw-rw 1 root audio 116, 9 mai 10 2007 midiC0D1
  • crw-rw 1 root audio 116, 10 mai 10 2007 midiC0D2
  • crw-rw 1 root audio 116, 11 mai 10 2007 midiC0D3

L'interface midi est donc bien présente. Le C0 désigne la carte son 0 et le port midi qui nous intéresse est le 1. Puisque tout est en ordre, on commence donc par installer lirc qui permet de décoder les signaux infrarouges de la plupart des télécommandes.

Sous arch, lirc se trouve dans le dépôt extra, qu'il faudra donc activer si ce n'est pas encore le cas (dans /etc/pacman.conf). Si vous ne souhaitez pas activer ce dépôt, vous pouvez compiler lirc à la main, ce qui vous permettra entre autres de choisir le driver dont vous avez besoin (livedrive_midi) pendant la phase de configuration, évitant ainsi l'ajout de tous les drivers inutiles.

  1. pacman -S lirc lirc-utils

Une fois lirc installé, nous allons le configurer par le biais du fichier /etc/conf.d/lircd :

LIRC_DEVICE="/dev/snd/midiC0D1"
LIRC_DRIVER="livedrive_midi"
LIRC_EXTRAOPTS=""
LIRC_CONFIGFILE=""

Nous avons donc spécifié le device et le driver à utiliser. Avant de se jeter à l'eau et de lancer lircd pour tester il faut noter que certaines personnes doivent lancer une chaine d'initialisation au périphérique midi afin que celui ci soit opérationnel :

$ echo -e '\\360\\000\\040\\041\\141\\000\\000\\000\\177\\000\\367' > /dev/snd/midiC0D1

Si vous avez besoin de cette chaine, pensez à automatiser le processus car il faudra l'envoyer à chaque redémarrage. Lancons maintenant lircd :

/etc/rc.d/lircd start

Logiquement lircd se lance mais nous prévient qu'il n'a pas trouvé le fichier de configuration /etc/lircd.conf :

lircd: could not open config file '/etc/lircd.conf' lircd: No such file or directory

Ce fichier comportera le binding des événements correspondant à notre remote. En fait il est tout à fait possible de le générer nous même via irrecord :

$ irrecord -d /dev/snd/midiC0D1 -H livedrive_midi /tmp/binding

Mais nous pouvons nous en passer car un fichier fonctionnel pour cette remote existe déjà, autant donc s'en servir. Copier donc le contenu suivant dans /etc/lircd.conf :

begin remote

   name        rm1500
   flags       SPACE_ENC|CONST_LENGTH
   bits        32
   eps         30
   aeps        100
   header      9000 4500
   one         563  1687
   zero        563  562
   gap         108000
   toggle_bit  0
   repeat      9000 2250
   frequency   38000
   duty_cycle  33
   begin codes
       1       0x83228B74
       2       0x83228F70
       3       0x8322906F
       4       0x83228A75
       5       0x8322847B
       6       0x83227887
       7       0x83228976
       8       0x8322837C
       9       0x83227788
       0       0x8322807F
       stop    0x8322857A
       play    0x83227986
       pause   0x83227986
       slow    0x83227D82
       step    0x83227E81
       prev    0x83227F80
       next    0x83227A85
       mute    0x83226E91
       vol-    0x8322639C
       vol+    0x8322629D
       eax     0x83228C73
       options 0x8322827D
       display 0x83227689
       return  0x83228E71
       start   0x83228877
       close   0x83227C83
       up      0x83227B84
       down    0x83228D72
       left    0x83228778
       right   0x8322758A
       ok      0x8322817E
       power   0x8322619e
       cmss    0x8322718e
       record  0x8322738c
   end codes

end remote begin remote

   name        audigy_io_hub
   flags       SPACE_ENC|CONST_LENGTH
   bits        32
   eps         30
   aeps        100
   header      9000 4500
   one         563  1687
   zero        563  562
   gap         108000
   toggle_bit  0
   repeat      9000 2250
   frequency   38000
   duty_cycle  33
   begin codes
       mute    0x80000040
       vol+    0x80008080
       vol-    0x80008082
       cmss    0x80000080
   end codes

end remote

Vous pouvez constater la présence du hub et de la remote. Une fois le fichier pasté, on relance lircd. Si tout s'est bien passé on lance un irw :

$ irw

En appuyant sur les boutons de la remote ou en triturant les boutons du hub vous devriez voir apparraitres des choses du style :

0000000080008080 00 vol+ audigy_io_hub
0000000080008080 01 vol+ audigy_io_hub
0000000080008082 00 vol- audigy_io_hub
0000000080008082 00 vol- audigy_io_hub
0000000083228b74 00 1 rm1500
0000000083228f70 00 2 rm1500
000000008322906f 00 3 rm1500

Magnifique, tout fonctionne au poil. Que faire maintenant de ces signaux ? Grâce à ce fichier de configuration nous allons pouvoir réaliser des actions correspondantes aux différentes touches. Pour cela on se crée un fichier .lircrc dans son home et on le remplit de la sorte, pour la touche display par exemple :

begin

 prog = irexec 
 button = display
 config = /opt/kde/bin/amarok &

end

On le voit c'est irexec qui fait la correspondance entre lirc et les commandes de lancement, seulement irexec n'est pas encore lancé actuellement, alors n'attendons plus, lançons le en démon :

$ irexec -d

Maintenant l'appui sur la touche display devrait lancer amarok. N'oubliez pas de faire un petit script qui s'éxécutera au démarrage et lancera irexec en tâche de fond. Si vous êtes un peu flemmard pour configurer un à un chacun des boutons dans le fichier .lircrc sachez que irkick peut le faire pour vous. Il s'agit d'un soft kde qui vous permet de configurer vos boutons via une IHM.

La part de magie :

Lorsque j'ai voulu installer et que j'ai effectué les opérations que je viens de décrire cela n'a pas fonctionné. D'ailleurs le voyant rouge du hub ne s'allumait même pas lorsque j'appuyais sur un des boutons de la remote. Pourtant tout semblait bien configuré, mais au lancement d'irw aucun des pottards n'avait le moindre effet. J'ai donc commencé à me poser des questions et à sérieusement me demander si le matériel était toujours opérationnel.

Et puis dans un dernier espoir j'ai voulu tester avec un live cd de kubuntu. J'ai donc booté rapidement, installé lirc, lirc-x et lirc-modules-source et ré-itérer les étapes précédentes et la bingo : le voyant s'est allumé, ça a fonctionné directement. Déjà content que ça marche quelquepart j'ai voulu réessayer sur mon arch et la boum ça a fonctionné aussi, sans rien retoucher.

Note : le seul bouton qui ne fonctionne pas est celui qui permet de régler l'amplification du micro. Vu son intérêt limité je ne me suis pas penché en détail sur le pourquoi du comment.

Vus : 836
Publié par Fuse : 11