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