{"id":8,"date":"2010-07-29T03:53:23","date_gmt":"2010-07-29T01:53:23","guid":{"rendered":"http:\/\/mmed.roulleau.net\/?p=7"},"modified":"2010-07-29T03:53:23","modified_gmt":"2010-07-29T01:53:23","slug":"lirc-quelques-explications","status":"publish","type":"post","link":"https:\/\/mmed.roulleau.net\/?p=8","title":{"rendered":"LIRC &#8211; Quelques explications"},"content":{"rendered":"<p>On trouve de nombreux tutoriels sur le net \u00e0 propos de LIRC. \u00ab\u00a0Fais ci\u00a0\u00bb, \u00ab\u00a0\u00e9dite ce fichier\u00a0\u00bb, et \u00ab\u00a0relance \u00e7a comme \u00e7a\u00a0\u00bb. Et puis \u00ab\u00a0bidouille ce truc aussi s&rsquo;il te pla\u00eet !\u00a0\u00bb. Bref, beaucoup d&rsquo;actions op\u00e9r\u00e9es en aveugles et un bon paquet de lignes de commande absconces pour la plupart des utilisateurs. Plut\u00f4t que de \u00ab\u00a0r\u00e9\u00e9crire la roue\u00a0\u00bb (magnifique figure de style, n&rsquo;est ce pas ?) avec un autre tuto, je vais profiter de cet article pour faire quelque chose qu&rsquo;on voit rarement : d\u00e9crire le fonctionnement de l&rsquo;application, le pourquoi des fichiers de configuration et leur r\u00f4le.<br \/>\nAttention : dans cette article je ne couvrirai que les syst\u00e8mes bas\u00e9s sur Debian.<\/p>\n<h2>LIRC, mais c&rsquo;est quoi en fait?<\/h2>\n<p><strong>LIRC<\/strong> est une excellente suite logicielle visant \u00e0 utiliser des t\u00e9l\u00e9commandes avec GNU\/Linux. Sa compatibilit\u00e9 avec tout et n&rsquo;importe quoi et sa versatilit\u00e9 en font un incontournable de tout PC orient\u00e9 Home Cinema.<br \/>\nConcr\u00e8tement, et c&rsquo;est souvent ce qu&rsquo;on a du mal \u00e0 comprendre la premi\u00e8re fois qu&rsquo;on y touche,\u00a0 LIRC est un mot fourre-tout pour ce qui est \u00e0 la fois une paquet d&rsquo;\u00e9x\u00e9cutables\u00a0 (sous forme de d\u00e9mon ou non), un framework (utilisable par les application tierces), et un ensemble de modules noyaux (pour piloter le hardware de vos r\u00e9cepteurs).<br \/>\nMais assez de pr\u00e9sentations, entrons dans le vif du sujet :<\/p>\n<h2>\/etc\/lirc\/hardware.conf, le fichier de configuration du mat\u00e9riel<\/h2>\n<p>C&rsquo;est ici qu&rsquo;est d\u00e9fini le mat\u00e9riel. \u00c7a vous l&rsquo;aviez compris tout seul, non?<br \/>\nPar contre, et l\u00e0 je pense que je vous apprends quelque chose,\u00a0 il ne fait pas partie de LIRC ! Ce fichier de configuration est une aide, laiss\u00e9e par les packageurs de votre distribution afin de simplifier l&rsquo;utilisation des d\u00e9mons contr\u00f4lant LIRC. Il est donc n\u00e9cessaire de faire attention \u00e0 ce que vous lisez sur Internet, car en fonction de votre distribution les param\u00e8tres peuvent drastiquement changer. Le fichier peut m\u00eame \u00eatre totalement inutile. (Pour l&rsquo;anecdote, je l&rsquo;ai appris \u00e0 mes d\u00e9pends en perdant quelques heures lors d&rsquo;une migration Ubuntu vers Debian)<br \/>\nConcr\u00e8tement, ce fichier est lu par le script de d\u00e9marrage de LIRC (<em>\/etc\/init.d\/lirc<\/em>,\u00a0 dont le contenu change selon les distributions). Celui-ci\u00a0 pr\u00e9pare l&rsquo;environnement et construit la ligne de commande ad\u00e9quate pour lancer le d\u00e9mon LIRC.<\/p>\n<p>Je ne vais pas tout couvrir, mais les param\u00e8tres les plus importants sont :<\/p>\n<ul>\n<li>REMOTE : Ah non, en fait ce param\u00e8tre ne sert pas \u00e0 grand chose. Je vous ai bien eu non? Il est principalement esth\u00e9tique. Mettez y ce qu&rsquo;on vous dit d&rsquo;y mettre et puis c&rsquo;est tout.<\/li>\n<\/ul>\n<ul>\n<li>REMOTE_MODULE : Le script d&rsquo;initialisation parcourt ce param\u00e8tre et avant toute op\u00e9ration charge les modules noyaux mentionn\u00e9s ici. Bien entendu ces modules doivent \u00eatre install\u00e9s et compatibles avec le noyau que vous utilisez actuellement.\u00a0 O\u00f9 les trouver ? Ils sont g\u00e9n\u00e9ralement issue directement du projet LIRC. Soit vous avez de la chance et ils sont disponibles directement dans votre distribution, patiemment reconstruit par les packageurs \u00e0 chaque nouvelle version de noyau, soit vous devrez les faire vous m\u00eame avec la commande <em>m-a<\/em>, acronyme de <em>module-assistant<\/em> (reportez vous aux diff\u00e9rents tuto sur le sujet). Pour v\u00e9rifier que le module est OK, n&rsquo;h\u00e9sitez pas \u00e0 vous amuser avec les commandes <em>lsmod<\/em>, <em>modprobe<\/em> et <em>rmmod <\/em>afin de voir si celui ci se charge correctement<em>.<\/em> Le chargement du module, si OK, devrait faire appara\u00eetre un fichier p\u00e9riph\u00e9rique dans \/dev\/ (exemple<em> \/dev\/ttyUSB0<\/em> pour mon USBuirt)<\/li>\n<\/ul>\n<ul>\n<li>REMOTE_DRIVER : Ceci indique \u00e0 LIRC quel pilote utiliser pour dialoguer. Cette notion de pilote est cette fois interne \u00e0 LIRC\u00a0 : Il ne s&rsquo;agit pas de p\u00e9riph\u00e9rique noyau mais juste de d\u00e9finir comment LIRC va dialoguer avec votre p\u00e9riph\u00e9rique <em>\/dev\/machin<\/em>. La subtilit\u00e9, c&rsquo;est que LIRC peut tr\u00e8s bien avoir \u00e9t\u00e9 compil\u00e9 sans le support du p\u00e9riph\u00e9rique que vous voulez utiliser. Un petit coup de <em>\/usr\/sbin\/lircd -H help<\/em> \u00f4tera vos doutes rapidement.<\/li>\n<\/ul>\n<ul>\n<li>REMOTE_DEVICE : C&rsquo;est le fichier p\u00e9riph\u00e9rique qui a \u00e9t\u00e9 cr\u00e9\u00e9 par le module noyau que vous avez charg\u00e9. Ceci indique au d\u00e9mon LIRC avec qui il va devoir dialoguer.<\/li>\n<\/ul>\n<ul>\n<li>REMOTE_LIRCD_CONF : L&#8217;emplacement du fichier de configuration des t\u00e9l\u00e9commandes (habituellement <em>\/etc\/lirc\/lircd.conf<\/em>, mais vous pouvez mettre ce que vous voulez) . Voir plus bas.<\/li>\n<\/ul>\n<p>Alors, tout ce beau monde, qu&rsquo;est ce que \u00e7a fait au final ?<br \/>\nSi je prends mon exemple personnel et relativement simple de boitier USBuirt, un passage de<em> \/etc\/init.d\/lirc start<\/em> me donne maintenant un d\u00e9mon lanc\u00e9 comme \u00e7a:<\/p>\n<pre>\/usr\/sbin\/lircd --driver=usb_uirt_raw --device=\/dev\/ttyUSB0 --output=\/dev\/lircd --listen<\/pre>\n<p>Tout \u00e7a pour \u00e7a, pourrait-on se dire&#8230;<br \/>\nMais au moins, maintenant, \u00e0 chaque fois que je lance LIRC par le script d&rsquo;initialisation j&rsquo;obtiens : des modules charg\u00e9s, un p\u00e9riph\u00e9rique bloc <em>\/dev\/ttyUSB0<\/em> mont\u00e9, un joli d\u00e9mon lanc\u00e9 sur ma machine pour dialoguer avec ce <em>\/dev\/ttyUSB0<\/em> selon le langage \u00ab\u00a0usb_uirt_raw\u00a0\u00bb, et ce m\u00eame d\u00e9mon me cr\u00e9e une jolie socket unix \/dev\/lircd pour mes logiciels favoris (voir plus bas le r\u00f4le de cette socket). Pas mal non? C&rsquo;est un bon d\u00e9but.<\/p>\n<h2>Le fichier de configuration \/etc\/init.d\/lircd.conf<\/h2>\n<p>Jusqu&rsquo;ici le d\u00e9mon lircd que vous pouvez maintenant lancer sait comment dialoguer avec votre p\u00e9riph\u00e9rique \u00e9metteur ou r\u00e9cepteur. Mais il ne sait pas vraiment ce qu&rsquo;il va trouver pendant son dialogue, qu&rsquo;est ce qu&rsquo;il doit garder et qu&rsquo;est ce qu&rsquo;il doit jeter. Ce fichier lircd.conf est l\u00e0 pour \u00e7a : c&rsquo;est une sorte de \u00ab\u00a0carte\u00a0\u00bb de votre t\u00e9l\u00e9commande. A l&rsquo;int\u00e9rieur, des listes de t\u00e9l\u00e9commande (si vous en utilisez plusieurs) et pour chaque t\u00e9l\u00e9commande des touches avec des jolis noms \u00ab\u00a0user-friendly\u00a0\u00bb et les codes infrarouges correspondant.<\/p>\n<p>O\u00f9 trouver ce fichier de configuration? Par exemple <a title=\"ici\" href=\"http:\/\/lirc.sourceforge.net\/remotes\/\">ici<\/a>.<br \/>\nMais si il ne s&rsquo;y trouve pas, vous pouvez le faire vous m\u00eame. Vous allez devoir utiliser <em>irrecord<\/em> pour \u00e7a. C&rsquo;est un ex\u00e9cutable livr\u00e9 ordinairement avec LIRC. Il prend grosso modo les m\u00eame param\u00e8tres que le d\u00e9mon \u00ab\u00a0lircd\u00a0\u00bb, donc si vous \u00eates capables de configurer le fichier hardware.conf et que celui ci vous g\u00e9n\u00e8re \u00e0 chaque lancement de \/etc\/init.d\/lirc une belle ligne de commande, alors le plus gros du travail est fait.<br \/>\nExemple :<\/p>\n<pre>irrecord --driver=usb_uirt_raw --device=\/dev\/ttyUSB0 monlircd.conf<\/pre>\n<p>Comme <em>irrecord<\/em> dialogue directement avec le bloc p\u00e9riph\u00e9rique, comme lircd, il ne faut pas que ce dernier soit lanc\u00e9 (ils sont exclusifs et tr\u00e8s jaloux).<br \/>\nCot\u00e9 utilisation, c&rsquo;est tr\u00e8s facile : vous suivez les instructions, et il enregistre toutes vos touches les unes apr\u00e8s les autres en leur attribuant le joli nom que vous souhaitez.<\/p>\n<h2>Mais alors, comment mes applications savent jouer avec LIRC ?<\/h2>\n<p>C&rsquo;est simple, vous vous souvenez de la socket unix dont je parlais plus haut, celle qui est pr\u00e9par\u00e9e par le d\u00e9mon LIRC? Et bien les applications\u00a0 se connectent \u00e0 celle-ci\u00a0 et \u00e9coutent toutes les touches que vous pouvez taper.<br \/>\nCette socket est nomm\u00e9e <em>\/dev\/lircd<\/em> le plus souvent. Si vous souhaitez donner son chemin vous m\u00eame (par exemple si vous en avez plusieurs), il est d\u00e9fini par le param\u00e8tre <em>&#8211;output<\/em> du d\u00e9mon lircd. La plupart des application vont se connecter \u00e0<em> \/dev\/lircd<\/em>, mais certaines d&rsquo;entre elles peuvent \u00eatre configur\u00e9es pour se connecter au chemin de votre choix (c&rsquo;est le cas par exemple de mon cher <strong>mythtv<\/strong> qui poss\u00e8de ce param\u00e8tre dans un coin de la configuration du frontend). Je vous conseille de tout laisser par d\u00e9faut, c&rsquo;est suffisant pour 90% des cas.<\/p>\n<p>Vous l&rsquo;avez compris, mais je me permets de le rappeler : pour qu&rsquo;une application fonctionne avec LIRC, il faut qu&rsquo;elle se branche sur la socket unix, et donc qu&rsquo;elle ait \u00e9t\u00e9 cod\u00e9e pour \u00e7\u00e0 ! Cela semble \u00e9vident au premier abord mais c&rsquo;est pourtant loin d&rsquo;\u00eatre automatique si l&rsquo;on se r\u00e9f\u00e8re aux questions qu&rsquo;on trouve souvent sur les forums.<\/p>\n<p>Et la configuration de ces applications, o\u00f9 se fait-elle?<\/p>\n<h2>\/home\/&lt;user&gt;\/.lircrc, o\u00f9 comment en avoir marre de tous ces fichiers de configuration<\/h2>\n<p>Les applications se connectent \u00e0 la socket lircd, OK. Mais comment l&rsquo;application sait quoi faire selon la touche press\u00e9e? C&rsquo;est ici qu&rsquo;intervient le fichier .lircrc.<br \/>\nContrairement \u00e0 une autre id\u00e9e fr\u00e9quemment r\u00e9pandue, ce n&rsquo;est pas un fichier de configuration de LIRC. C&rsquo;est un fichier de configuration de vos applications finales !<br \/>\nEn effet, celles ci parcourent immanquablement le fichier ~\/.lircrc (et les \u00e9ventuels sous fichier inclus avec la directive <em>include<\/em>), y rep\u00e8rent leur propre marqueur (c&rsquo;est le r\u00f4le de l&rsquo;attribut \u00ab\u00a0<em>prog<\/em>\u00ab\u00a0), et enregistre la carte des \u00e9v\u00e9nements d\u00e9clench\u00e9s en fonction des touches appuy\u00e9es. Exemple :<\/p>\n<pre>begin\nremote = NOVA-T500\nprog = mplayer\nbutton = Play\nconfig = pause\nend<\/pre>\n<p>L&rsquo;appui de la touche \u00ab\u00a0Play\u00a0\u00bb (touche nomm\u00e9e ainsi dans le fichier <em>\/etc\/lirc\/lircd.conf<\/em> qui \u00e9tablit la correspondance nom &lt;&#8211;&gt; code infrarouge), provoque l&rsquo;\u00e9v\u00e9nement \u00ab\u00a0pause\u00a0\u00bb dans l&rsquo;application mplayer.<\/p>\n<p>Et voil\u00e0 ! C&rsquo;\u00e9tait pas si compliqu\u00e9 (hum&#8230;)<\/p>\n<h2>Une synth\u00e8se s&rsquo;il te pla\u00eet, pour finir un article trop long !<\/h2>\n<p>Comme je suis attentif \u00e0 vos remarques, la voici :<br \/>\nlircd est un d\u00e9mon qui s&rsquo;interface avec un p\u00e9riph\u00e9rique \/dev\/machinX (donc le fichier bloc est cr\u00e9\u00e9 par un module noyau appartenant parfois au projet LIRC) selon un protocole de communication appel\u00e9 \u00ab\u00a0driver\u00a0\u00bb par LIRC. Une fois que lircd est lanc\u00e9, celui ci va \u00e0 son tour lire un fichier de conf (\/etc\/lirc\/lircd.conf par d\u00e9faut). Ce fichier d\u00e9crit les codes infrarouges susceptibles d&rsquo;\u00eatre \u00e9chang\u00e9s avec le p\u00e9riph\u00e9rique (les codes sont regroup\u00e9s en appareil). Le d\u00e9mon cr\u00e9\u00e9 ensuite une socket de type \/dev\/lircdX avec lequel les programmes peuvent s&rsquo;interfacer facilement.<br \/>\nLes programmes se connectent \u00e0 cette belle socket, lisent un fichier de conf .lircrc dans le home de l&rsquo;utilisateur, rep\u00e8rent le mappage touche &lt;&#8211;&gt; \u00e9v\u00e9nement \u00e0 d\u00e9clencher, et VOUS POUVEZ ENFIN REGARDER DES VIDEOS DEPUIS VOTRE CANAPE.<\/p>\n<p>Article sous licence \u00ab\u00a0Creative Common Merciciel\u00a0\u00bb. Vous en faites ce vous voulez, mais je veux un merci si vous l&rsquo;avez bien aim\u00e9.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>On trouve de nombreux tutoriels sur le net \u00e0 propos de LIRC. \u00ab\u00a0Fais ci\u00a0\u00bb, \u00ab\u00a0\u00e9dite ce fichier\u00a0\u00bb, et \u00ab\u00a0relance \u00e7a comme \u00e7a\u00a0\u00bb. Et puis \u00ab\u00a0bidouille ce truc aussi s&rsquo;il te pla\u00eet !\u00a0\u00bb. Bref, beaucoup d&rsquo;actions op\u00e9r\u00e9es en aveugles et un bon paquet de lignes de commande absconces pour la plupart des utilisateurs. Plut\u00f4t que de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7],"tags":[19,26,33],"_links":{"self":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/posts\/8"}],"collection":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8"}],"version-history":[{"count":0,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=\/wp\/v2\/posts\/8\/revisions"}],"wp:attachment":[{"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mmed.roulleau.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}