NOTE: Cet article a été publié dans le magazine "Login:" (site web: www.loginmag.com) daté de Septembre 2002. Il est reproduit ici avec l'aimable permission de ce magazine.

Commander Linux par infrarouge

A quoi sert de transformer son PC sous Linux en machine multimédia à tout faire si l'on ne peut pas commander le tout à distance depuis son canapé ?

On trouve aujourd'hui sur Linux une flopée d'applications qui permettent de transformer son PC en lecteur / enregistreur multimédia. Citons MPlayer - spécialisé dans la lecture de films (AVI, DivX, MPEG 1/2, MOV), VDR - récepteur/enregistreur câble et satellite, mythtv (http://www.mythtv.org), freevo (http://freevo.sourceforge.net/) et bien d'autres encore. Ces applications ont ceci de commun : elles aiment obéir au doigt et à la télécommande infra-rouge ! Voyons comment ceci peut être mis en oeuvre.

LIRC

Grand régisseur de l'infra-rouge, LIRC (Linux Infrared Remote Control / http://www.lirc.org) est une suite de programmes permettant de décoder et d'envoyer les signaux de la plupart des périphériques infra-rouge. Pour que celui-ci fonctionne, il est nécessaire de disposer d'un récepteur et/ou d'un émetteur infra-rouge. Si il est possible d'acquérir ce genre de périphérique sur internet (http://connect.proxone.fr ou bien encore http://www.pinnaclesys.com) il est tout aussi simple et meilleur marché de le fabriquer soi-même. Nous nous limiterons ici au récepteur infra-rouge, ce qui suffira pour toutes les applications pré-citées.

L'interface infra-rouge

Avant toute chose, nous tenons à remercier Alessio Sangalli (ciao Italia !) qui nous a fourni les photos de son récepteur infra-rouge. L'interface que nous allons construire se branche sur le port série du PC et s'articule principalement autour d'un récepteur infra-rouge de type "TSOP 1738" (38 pour 38khz) et d'un régulateur de tension 5V. Le montage proposé ici intègre tous les composants dans le boîtier de la prise série (de type DB9) pour un encombrement minimum.
Commencer par souder directement la broche "out" du régulateur de tension avec la broche centrale (2) du TSOP 1738. La broche centrale (GND) du régulateur de tension va se loger dans le connecteur "5" de la prise DB9 grâce à un petit point de soudure. Couper les connecteurs de la diode assez court pour que celle-ci puisse être placée entre la broche "in" du régulateur de tension et le connecteur "7" de la prise DB9. Attention : la cathode de la diode (là où il y a un anneau noir) est à connecter du côté du régulateur de tension. Souder également un côté de la résistance 4,7kW (coupée elle aussi assez court) sur la broche "in" du régulateur de tension. Souder l'autre côté de la résistance dans le connecteur "1" de la prise DB9. Placer le condensateur entre la broche centrale (GND) et la broche "out" du régulateur de tension. Reste à connecter un fil entre la broche 3 (data) du TSOP 1738 et le connecteur "1" de la prise DB9.
Très peu de composants sont en jeu dans ce montage, il ne devrait donc pas poser de problèmes. Si vous désirez déporter le récepteur infrarouge à l'avant du PC, il est tout à fait possible d'utiliser un câble composé de trois fils afin de connecter le TSOP 1738 au reste du montage.

Schéma de principe
Schéma de principe

Les composants nécessaires
Les composants nécessaires

Configurer LIRC

Prêt à tester le tout ? Encore un peu de patience ; il nous faut d'abord installer LIRC, présent sur le CDROM du mois.

tar -xIvf lirc-0.6.6.tar.bz2 
cd lirc-0.6.6
./setup.sh
make
make install

Le script setup.sh a besoin du composant "dialog", présent sur la plupart des distributions Linux. Il se trouve également sur le CDROM, au cas où. Répondez aux questions posées et choisissez "Save configuration & run configure". Une fois l'installation effectuée, un nouveau device est créé  : "/dev/lircd". Celui-ci est utilisé par les clients pour se connecter à LIRC. Il faut le rendre accessible aux utilisateurs autre que root par un "chmod 666 /dev/lircd" (ou en l'affectant à un groupe commun). Si cela est nécessaire pour votre kernel, éditez le fichier /etc/modules.conf et ajoutez la ligne

alias char-major-61 lirc_serial

Une fois le driver lancé (insmod lirc_serial), vous pouvez vérifier que l'interface que vous venez de construire fonctionne en utilisant la commande "mode2". Vous devriez voir des "pulse" et "space" correspondant aux touches appuyées défiler sur l'écran.
Pour fonctionner, LIRC a besoin d'un fichier de configuration (/etc/lircd.conf) correspondants aux codes particuliers de votre télécommande. Le package LIRC contient déjà un grand nombre de fichiers de configuration pour les télécommandes courantes. Au cas où votre télécommande ne se trouverai pas listée, utilisez "irrecord" pour créer votre propre lircd.conf.
Vous pouvez maintenant lancer le démon LIRC par "lircd". La commande "irw" dans le répertoire tools permet d'afficher les touches pressées. En cas de soucis, vérifiez le fichier /var/log/lircd qui peut vous permettre de comprendre ce qui ne va pas.

Montage du TSOP, du régulateur et de la diode
Montage du TSOP, du régulateur et de la diode

LIRC et VDR

Comme déjà évoqué dans les numéros précédents de Login, VDR est entièrement pilotable à la télécommande. A partir de la version 1.1.11, la configuration de la télécommande est prise en charge par VDR à la première utilisation de celle-ci. Il suffit d'appuyer sur les touches de la télécommande lorsque VDR le demande. La procédure produit un fichier remote.conf utilisé ensuite par VDR.

L'ensemble dans le boîtier DB9
L'ensemble dans le boîtier DB9

LIRC et commandes shell

Des exemples d'utilisation en C de LIRC sont disponibles dans l'archive. Dans l'exemple qui suit, nous nous basons ici sur tools/ircat.c pour contrôler un script shell qui tourne en boucle et attend l'appui d'une des touches 1, 2, 3 de la télécommande pour afficher un petit message ou de la touche power pour sortir. Pour les besoins de l'exemple, éditez le fichier tools/ircat.c et ajoutez un "break;" juste après le "free(code);" ligne 110 puis re-compilez. Cela permettra de sortir d'ircat dès qu'une touche de la télécommande sera pressée. Un fichier de configuration "lircrc" contient les actions à exécuter pour chacune des touches, la liste des touches étant configurées dans /etc/lircd.conf.

Fichier "lircrc"
begin
	prog = monprog
	button = 1
	config = action1
end
begin
	prog = monprog
	button = 2
	config = action2
end
begin
	prog = monprog
	button = 3
	config = action3
end
begin
	prog = monprog
	button = Quit
	config = sortir
end
Fichier "exemple.sh"
#!/bin/sh
MaTouche="rien"
while [ "$MaTouche" != "sortir" ]; do
        MaTouche=`ircat --config=lircrc monprog`
        case $MaTouche in
                action1) echo "Et un..." ;;
                action2) echo "Et deux..." ;;
                action3) echo "Et trois-zero !" ;;
                sortir) echo "OK, je sors" ;;
        esac
done

Simplissime ! Les applications ne m'arrêtent pas au contrôle à distance. Il est possible d'imaginer des systèmes de contrôle d'accès par infrarouge ou même de saisie de texte grâce à la télécommande (voir l'étonnant thumbscript http://www.thumbscript.com/howitworks.html). Laissez libre cours à votre imagination !

MythTV, entièrement pilotable par LIRC
MythTV, entièrement pilotable par LIRC