Wiki

Outils pour utilisateurs

Outils du site


telecommande

Piloter Mythtv avec une télécommande

Cette page concerne kernel supérieur à 2.6.33.

Ce tutoriel est une traduction de cette excellente synthèse en anglais faite pour XBMC/Gentoo et elle est tellement complète que je l'ai quasiment entièrement traduite et personnalisée sauf la partie XBMC bien sûr

Depuis quelque temps, il est devenu extrèmement difficile de faire fonctionner un récepteur ou une télécommande sous linux.

En effet une certaine confusion est apparue depuis la migration d'une partie des fonctionnalités de LIRC dans le noyau (les pilotes ou drivers). Ce changement commence avec le noyau 2.6.33 qui introduit le module “ir-core” dans le noyau. Beaucoup des anciens tutoriels ou guides présent sur le net n'ont pas pris en compte cette évolution, ce qui explique pourquoi ces guides traditionnels ne fonctionnent plus très bien. Et bien souvent il n'y a pas de nouveau guide.

Harold a écrit un excellent article sur ces changements. Il est à noter qu'il parle de 2.6.35 alors que les changements ont commencé avec 2.6.33 et qu'il décrit uniquement la façon de faire fonctionner la télécommande Imon sous 2.6.35. Pour faire court, les développeurs du noyau souhaitent que les télecommandes se comportent comme des claviers.

Cela signifie qu'à partir du noyau 2.6.33 et au-delà vous risquez des conflits entre la nouvelle interface du noyau et lirc. Cependant, le fait que le noyau inclus “ir-core”, ne veut pas dire que cela ne fonctionne plus pour tous les appareils, mais cela signifie qu'à partir de là des conflits potentiels peuvent apparaitre. Les 'nouveaux' pilotes (drivers) ont été inclus dans les versions suivantes:

  • 2.6.33: ir-core
  • 2.6.35: iMON
  • 2.6.36: Lirc bridge
  • 2.6.38: mceusb (MS/HP/Philips et les autres recepteurs compatible MCE )
  • 2.6.39: Nuvoton CIR (w83667hg), Winbond Super I/O, ENE KB3926 CIR, Streamzap, ITE IT8712F/IT8512 CIR
  • 3.0: Fintek LPC SuperIO Consumer IR Transceiver

Donc, selon la version de Linux et de votre récepteur IR, vous pouvez suivre ce guide ou non. Voici un aperçu:

  • noyau < = 2.6.32 quelque soit le récepteur: vous ne pouvez pas suivre ce guide, mais il n'y aura pas de conflit. Il suffit d'utiliser LIRC 0.8 et un ancien tutoriel lirc et tout ira bien. Attention de ne pas utiliser lirc 0.9 qui est prévu pour fonctionner avec les nouveaux pilotes du noyau.
  • noyau > = 2.6.33 tous les récepteurs en particuliers ceux énumérés ci-dessus: vous ne pouvez pas suivre ce guide, parce que votre récepteur est pas encore supporté par le noyau. Cependant, il ne devrait pas y avoir de conflit, si vous désactivez la nouvelle interface (blacklister tous les modules ir-* et RC-* ). Ensuite, vous pouvez simplement utiliser LIRC 0.8 et les anciens tutoriels de lirc. Ou si vous pouvez télécharger, compiler et installer les pilotes séparément pour votre noyau, vous pouvez bien sûr suivre ce guide.
  • Tous les autres cas: vous pouvez choisir de suivre mon guide ou d'utiliser un pont lirc (> = 2.6.36) (voir la suite) ou de blacklister les drivers rc-* ir-* mceusb/imon du noyau pour votre récepteur et simplement utiliser lirc.

Vous pouvez connaitre la version de votre noyau avec la commande suivante:

uname -r

Note: Ubuntu “Lucid” 10.04 LTS utilise 2.6.32 ou 2.6.35 (les deux sont sur le dépot officiel APT), et ça ne fonctionne ni avec l'un, ni avec l'autre sauf si vous avez un recepteur iMON. Je mentionne explicitement Lucid car beaucoup de gens l'utilisent encore pour monter un système de multimédia.

Sommaire

Après avoir lu la suite de ce document, je pense que vous serez capable de

  • comprendre comment les signaux IR sont traitées par Linux;
  • émuler un clavier avec votre télécommande;
  • mapper presque tous les boutons de votre télécommande avec les événements de votre media center ;
  • attribuer plusieurs actions différentes à une même touche sur votre télécommande en fonction du contexte (utile pour XBMC)

Il y a environ trois étapes qui doivent toutes être appréhendées pour obtenir une expérience sans faille. Selon votre matériel, votre logiciel, votre configuration et de certains autres choix que vous faites, ces étapes peuvent aller de l'absence de configuration (rien à faire) à un grand nombre de manipulation de compilation et de configuration.

Récepteur IR

La première étape n'est pas radicalement différente de ce qu'elle était dans le passé. Comme avec n'importe quel matériel, il s'agit de trouver le bon pilote (module du noyau), éventuellement de le compiler, de l'installer et l'utiliser. Si vous utilisez DKMS, allez jeter un oeil à sur un guide ou tutoriel DKMS.

Si vous avez l'intention d'acheter un récepteur IR, assurez-vous qu'il est compatible avec Linux (out-of-the-box), ce qui signifie que le driver doit être inclus dans le noyau Linux. Cela vous simplifira la vie.

Si vous possédez déjà un récepteur, branchez-le et entrez dans une console

dmesg

Vous devrez voir quelque chose comme ça :

[   13.200050] Registered IR keymap rc-rc6-mce
[   13.200159] input: Media Center Ed. eHome Infrared Remote Transceiver (0471:0815) as /devices/pci0000:00/0000:00:12.0/usb3/3-3/3-3:1.0/rc/rc0/input2
[   13.200218] rc0: Media Center Ed. eHome Infrared Remote Transceiver (0471:0815) as /devices/pci0000:00/0000:00:12.0/usb3/3-3/3-3:1.0/rc/rc0
[   13.200267] mceusb 3-3:1.0: Registered Philips eHome Infrared Transceiver on usb3:2
[   13.200288] usbcore: registered new interface driver mceusb

Essayez aussi

lsusb

Au pire, votre récepteur doit être détecté et être répertorié comme “périphérique inconnu” ou vous devriez voir quelque chose comme ça.

Bus 003 Device 002: ID 0471:0815 Philips (or NXP) eHome Infrared Receiver

Maintenant je sais que le récepteur fonctionne (out of the box).

Quoi qu'il en soit, ce n'est pas nouveau. Comme je le disais, il se peut que vous soyez obligé de rechercher et installer le(s) pilote(s) approprié(s).

Ce qui a changé, c'est la procédure de test. De nombreux guides traditionnels vont commencer par lancer irw pour vérifier si votre recepteur reçoit les signaux IR et savoir ainsi si le driver fonctionne bien. Cependant, ceci n'est plus une méthode fiable, en raison des changements dans le noyau Linux 2.6.33 et suivants. Je vais revenir sur ce point dans le paragraphe suivant, mais dans le but de simplement tester votre récepteur IR, arrêtez lirc et exécutez :

ir-keytable -c -p NEC,RC-5,RC-6,JVC,SONY -t

Vous devriez désormais pouvoir générer des événements en appuyant sur les touches de votre télécommande. Je vais décortiquer cette commande et sa sortie par la suite, mais pour l'instant il suffit de voir si elle fonctionne. Rappelez-vous, c'est juste pour tester le récepteur. Si vous n'avez pas cette commande, installez le paquet qui le fournit. Dans Ubuntu c'est ir-keytable, mais je pense que cela varie selon votre distribution.

Testez toutes vos autres télécommandes pour connaitre celles qui fonctionne : celle de votre téléviseur, DVD, décodeur, Xbox, ampli A/V … Certaines télécommandes ne sont tout simplement pas compatibles, mais l'une d'elles le sera sans aucun doute.

Si tout cela a échoué, il est à peu prêt sûr que votre pilote n'a probablement pas été installé correctement. Retourner au début et ne reçoivent pas 20 000 €. (dans le texte original)

Télécommande

Il est désormais établir que votre récepteur IR fonctionne. Maintenant, vous devez avoir un logiciel qui reçoit et interprète les signaux IR. Dans le passé, il n'y avait que LIRC. Mais depuis Linux 2.6.36, la fonctionnalité est également présente dans le noyau (Kernel Newbies).

Même si cela semble aller dans le sens de la simplification, elle est à l'origine de la confusion de nombreuses personnes. Cela est parfaitement compréhensible car la documentation officielle est très clairsemée.

Le problème est que le noyau «attrape» désormais tous les événements et ne les transmette pas à LIRC. Et parfois, LIRC semble également obtenir les signaux, en particulier lorsque vous utilisiez lirc 0.8 auparavent.

Donc, fondamentalement, les pilotes dans le noyau et le LIRC interfèrent les uns avec les autres.

En bref, il semble y avoir trois chemins possibles pour traiter les signaux IR entrant :

  • Transmettre les signaux du noyau à LIRC
  • utiliser le nouveau comportement du noyau
  • combiner le nouveau comportement et LIRC

il est également possible de simplement désactiver les pilotes du noyau en “blacklistant” tous les modules ir-* et rc-* pour utiliser une ancienne version de LIRC < = 0.8, mais je ne vois aucune raison de le faire, utilisez plutôt la transmission des signaux de noyau à LIRC.

Transmettre les signaux du noyau à LIRC

Dans ce premier cas, vous utilisez les modules du noyau pour recevoir les signaux IR qui seront ensuite router vers LIRC. Vous obtenez un fonctionnement similaire à l'ancien fonctionnement de LIRC et vous pouvez de nouveau suivre les guides traditionnels LIRC. Tout ce que vous avez à faire est d'envoyer tous les signaux reçus par le noyau à LIRC en exécutant

modprobe ir-lirc-codec
ir-keytable -p LIRC

Vous pouvez ajouter 'ir-lirc-codec' dans /etc/modules et la commande 'ir-keytable' dans /etc/rc.local (ou équivalent) si vous ne voulez pas retaper ces commandes à chaque rédémarrage.

Cela devrait permettre à irw de fonctionner comme il l'a toujours fait, de sorte que vous pouvez maintenant utiliser hardware.conf, lircd.conf et irrecord tel que décrit dans les tutoriels traditionnels de lirc. Il vous faudra certainement re-construire votre fichier lircd.conf pour être en accord avec les signaux reçus du module du noyau.

Notez que selon la FAQ LIRC, vous devez impérativement utiliser la version LIRC 0.9.0 incluant les pilotes du noyau.

Si vous choisissez cette voie, vous ne serez probablement pas capable d'attribuer des actions différentes pour une même touche (je pense).

Pour vous,le guide s'arrête ici et je vous suggère de suivre un bon guide à propos de LIRC. Je dois cependant, vous conseillons de passer aux pilotes du noyau.

Utiliser uniquement le fonctionnement du noyau

Si vous choississez d'utiliser les fonctionnalités du noyau, votre télécommande sera assimilée à un clavier par votre noyau et fonctionnera comme tel. Vous n'utiliserez plus LIRC.

Tout d'abord, commencez par désactiver LIRC. Vous pouvez désactiver lirc de façon semi-permanente en changeant la valeur START_LIRCD à false dans /etc/lirc/hardware.conf. Ou tout simplement en le désinstaller. Mais arrêter d'abord lirc, parce que quand cette variable est définie sur false, vous ne pouvez pas arrêter ou démarrer lirc. Arrêtez également Mythtv pour le moment.

Puis, si vous n'avez pas encore installé “ir-keytable”, faites-le maintenant et exécuter

ir-keytable

Vous devriez voir quelque chose comme ça :

Found /sys/class/rc/rc0/ (/dev/input/event2) with:
        Driver mceusb, table rc-rc6-mce
        Supported protocols: NEC RC-5 RC-6 JVC SONY LIRC
        Enabled protocols: NEC RC-5 RC-6 
        Repeat delay = 500 ms, repeat period = 33 ms

La ligne la plus importante est le ligne “Supported protocols”, elle indique les protocoles supportés par votre récepteur. C'est éssentiel car le récepteur et la télécommande doivent utiliser le même protocole.

Si je me base sur le peu d'expérience que j'ai, je dirais que le protocole RC-5 est principalement utilisé par les téléviseurs, RC-6 par les télécommandes MCE et NEC par la plupart des autres télécommandes qui ne sont pas Sony ou JVC. Apparemment, il peut aussi y avoir un chevauchement entre les protocoles. Par exemple, la télécommande de ma TV Sony Bravia génère des événements pour les deux protocoles RC-5 et SONY.

Il faut maintenant savoir quel protocole utilise votre télécommande. Vous pouvez activer tous les protocoles ou bien uniquement le bon.

Dans tous le cas, vous devrez lancer cette commande:

ir-keytable -c -p $protocols -t
  • -c efface le table de correspondance existante
  • -p définie le protocole qui sera utilisé par votre récepteur. Remplacez “$protocole” par la liste des protocoles supportés (séparés par une virgule); Exemple pour moi NEC,RC-5,RC-6,JVC,SONY,LIRC.
  • -t initialise le mode test. l'équivalent de irw pour le fonctionnement noyau.

Pressez quelques touches de votre télécommande, vous devriez voir quelque chose comme cela:

1309368621.558360: event MSC: scancode = 45b580
1309368622.010326: event MSC: scancode = 45b581
1309368622.465330: event MSC: scancode = 45b551
1309368622.966319: event MSC: scancode = 45b54d
1309368623.814289: event MSC: scancode = 45b522
1309368624.285272: event MSC: scancode = 45b584
1309368625.009254: event MSC: scancode = 45b5de
1309368625.569238: event MSC: scancode = 45b520
1309368626.643231: event MSC: scancode = 45b501
1309368627.080215: event MSC: scancode = 45b502
1309368627.483210: event MSC: scancode = 45b503

Si un bouton génère 2 évenements avec différents “scancodes”, celà veut dire que votre télécommande émet dans 2 protocoles différents, comme ma Bravia ou j'ai:

1309368864.058322: event MSC: scancode = 1f3f
1309368864.058344: event MSC: scancode = 97008a
1309368864.109318: event MSC: scancode = 1f3f
1309368864.109340: event MSC: scancode = 97008a
1309368864.159316: event MSC: scancode = 1f3f
1309368864.159337: event MSC: scancode = 97008a
1309368866.089281: event MSC: scancode = 1f3f
1309368866.089305: event MSC: scancode = 97008f
1309368866.145265: event MSC: scancode = 1f3f
1309368866.145287: event MSC: scancode = 97008f
1309368866.178268: event MSC: scancode = 1f3f
1309368866.178288: event MSC: scancode = 97008f
1309368866.682269: event MSC: scancode = 1f3f
1309368866.682293: event MSC: scancode = 970090
1309368866.733263: event MSC: scancode = 1f3f
1309368866.733286: event MSC: scancode = 970090
1309368866.783262: event MSC: scancode = 1f3f
1309368866.783288: event MSC: scancode = 970090

Le code “1f3f” est inutilisable car il est toujours le même quelque soit la touche pressée. Vous pouvez ainsi tester chaque protocole pour savoir celui qui correspond à votre télécommande. Dans mon cas, si j'active le protocole RC5 j'ai des “1f3f” et si j'active le protocole “Sony”, je reçois un code différent par touche. Les autres protocoles ne donnent rien. Je peux donc activer mon protocole comme ceci

ir-keytable -c -p SONY -t

Vous pouvez également activer tous les protocoles et ne pas configurer le scancode “1f3f”.

Soit dit en passant, une fois que vous avez défini le(s) protocole(s) à utilisez, vous n'avez plus besoin de relancer cette commande, du moins jusqu'à prochain redémarrage. Donc, à partir de maintenant vous pouvez simplement utiliser `ir-keyable -t` pour tester. L'option -c est seulement nécessaire lorsque vous souhaitez réinitialiser la table.

Maintenant tapez `ir-keyable -t` à nouveau et testez si tous les boutons de votre télécommande sont fonctionnels. Il est possible que tous le soient, mais je crains que ce ne soit pas le cas.

Et maintenant, la partie qui peut nécessiter le plus de travail. Vous êtes capable de générer des événements, mais toutes les touches ne sont pas reconnues. Si vous avez une télécommande, tels que la célèbre télécommande MCE, vous pouvez simplement utiliser le fichier de configuration fourni (disons un lircd.conf pour ir-keytable). Exécutez la commande suivante pour voir les fichiers de configuration inclus:

ls /lib/udev/rc_keymaps/   ou ls /lib/udev/keymaps/

Si vous voyez quelque chose qui ressemble à la télécommande que vous utilisez, vous êtes chanceux. Mais ce n'est pas toujours le cas. Vous allez devoir parcourir tous ces fichiers manuellement pour connaitre le fichier à utiliser, heureusement on est sous linux et il y a donc une commande pour cela. Entrez `ir-keyable-t` à nouveau et appuyez sur un bouton standard, tels que le “ok”, “vers le haut” ou “vers le bas”. Ensuite, copiez le code (scancode) qui en résulte et exécutez la commande suivante:

grep -iH $scancode /lib/udev/rc_keymaps/*  ou grep -iH $scancode /lib/udev/keymaps/*   ou grep -iH $scancode /etc/rc_keymaps/*  selon votre distribution

Par exemple, si j'obtiens “1309375577.020898: event MSC: scancode = 1e14”, je lance

grep -iH 1e14 /lib/udev/rc_keymaps/* ou équivalent 

Et j'obtiens le résultat suivant:

/lib/udev/rc_keymaps/dib0700_rc5:0x1e14 KEY_UP
/lib/udev/rc_keymaps/haupp:0x1e14 KEY_UP

Cela signifie donc que l'un de ces fichiers pourrait être correct. Comparer le résultat avec le maximum de scancodes pour confirmer. Si vous êtes chanceux, votre télécommande dispose d'un fichier de configuration préconfiguré et vous pouvez largement ignorer les étapes à venir sur la création d'un fichier de configuration personnalisée. Après la section sur la création d'un fichier de configuration personnalisé, vous trouverez comment charger ce fichier de configuration dans la mémoire sans modifier les fichiers dans /lib/udev/rc_keymaps (ou /lib/udev/keymaps), mais en copiant le fichier approprié dans /etc/rc_keymaps/ .

Création d'un fichier de configuration personnalisé

Si la commande “grep” ne retourne aucun résultat ou ne retourne rien pour certaines touches, vous allez devoir créer votre propre fichier de configuration. Regardons un extrait d'un fichier de configuration existant(rc6_mce pour les télécommandes MCE) pour connaitre la syntaxe générale d'un tel fichier:

0x800f041e KEY_UP
0x800f041f KEY_DOWN
0x800f0420 KEY_LEFT
0x800f0421 KEY_RIGHT
0x800f0422 KEY_OK

Donc, sur la gauche, nous avons un code (qui correspond au code de balayage ou scancode) commençant par '0x '. Sur la droite, nous avons la touche qui est associée. Cette touche peut être n'importe quelle touche «normale» d'un clavier (par exemple KEY_A) ou une touche plus ou moins standardisée de MCE comme KEY_PLAY, KEY_STOP, KEY_MENU, KEY_RED / VERT / JAUNE / BLEU ou KEY_NUMERIC_x. Je ne sais pas ni où, ni comment ces touches MCE sont répertoriées, mais beaucoup d'entre elles fonctionnent dans MythTV. Peu importe, tout ce que nous avons vraiment besoin, ce sont les touches régulières de toute façon, puisque nous pouvons tout simplement mapper celle-ci dans le fichier keyboard.xml de mythtv et beaucoup d'entre elles sont déjà mappés par défaut. Après tout, MythTV peut déjà être commandé en utilisant un clavier ordinaire et nous sommes en émulation d'un clavier. Par exemple, MythTV ne semble pas avoir de KEY_INFO , mais le «i» du clavier est (aussi) mappé pour cette action, on peut simplement utiliser 0x123abc KEY_I, avec 123abc comme scancode de la touche “i” pour déclencher l'info dans MythTV.

Ce que vous avez à faire, c'est d'identifier toutes les touches de votre télécommande et de savoir à quelle touche du clavier ou à quelle action vous souhaitez l'associer. Je vous suggère de commencer par définir les actions par défaut qui sont toujours les mêmes de toute façon, comme la lecture, pause, gauche, droite, etc … Donc, ouvrez une fenêtre de terminal et lancez `ir-keytable -t` puis créer votre fichier de configuration avec un éditeur de texte. Maintenant, pour chaque pression de touche sans équivoque sur votre télécommande, copiez le scancode dans votre fichier de configuration et associez-le à la touche appropriée du clavier (tout celà dans le format décrit ci-dessus). Donc, si votre scancode est 44222a lorsque vous appuyez sur votre bouton de lecture, la ligne dans votre fichier de configuration devrait ressembler à ceci: “0x44222a KEY_PLAY”. A la fin de ce processus, vous aurez un fichier de configuration avec lequel votre télécommande peut au moins contrôler les fonctions de base.

Avant de changer votre fichier en mémoire je vous conseille de mettre en entête de votre fichier, la ligne de commentaire suivante:

# table "le_nom_de_ma_telecommande", type: "son_protocole"

Charger votre fichier de configuration

Maintenant que vous avez créé votre propre fichier de configuration ou que vous avez un fichier pré-configuré, vous devez le charger pour qu'il puisse être utilisé. Le fichier de configuration va dans le dossier /etc/rc_keymaps/. Le nom n'est pas vraiment important. Il suffit de le garder bref et concis. Soit dit en passant, ne pas écraser les fichiers de configuration standard dans /lib/udev/rc_keymaps/. Si vous voulez en utiliser un, copiez-le dans /etc/rc_keymaps/ et modifiez le.

Quoi qu'il en soit, pour charger votre fichier de configuration, utilisez à nouveau ir-keytable:

ir-keytable -c -p $proto -w /etc/rc_keymaps/$file

Si vous avez correctement défini le protocole dans l'entête de votre fichier de configuration, vous pouvez ommettre l'option -p $proto comme ceci:

ir-keytable -c -w /etc/rc_keymaps/onkyo-dvd

Pour la petite histoire, j'utilise une télécommande universelle qui est fournie avec mon ampli-tuner AV TX-NR509. Il peut contrôler un grand nombre de périphériques (j'ai une bonne dizaine de pages de codes pour cette télécommande) et je l'ai mis en place comme une télécommande de lecteur de DVD. Voici mon fichier de config:

# table onkyo-dvd, type: NEC

0x45b512 KEY_S                  # Source On/Off

0x45b521 KEY_ENTER
0x45b580 KEY_UP
0x45b581 KEY_DOWN
0x45b551 KEY_LEFT
0x45b54d KEY_RIGHT

0x45b520 KEY_MENU               # Setup
0x45b522 KEY_BACK               # Return
0x45b584 KEY_I                  # Video
0x45b5de KEY_C                  # Guide/Top Menu

0x45b527 KEY_H                  # Home
0x45b516 KEY_Z                  # Display

0x45b515 KEY_PLAY
0x45b500 KEY_PLAYPAUSE
0x45b514 KEY_STOP

#0x2d2d32 KEY_REWIND
#0x2d2d33 KEY_FASTFORWARD

0x45b535 KEY_RED
0x45b536 KEY_GREEN
0x45b537 KEY_YELLOW
0x45b533 KEY_BLUE

0x45b50a KEY_NUMERIC_0
0x45b501 KEY_NUMERIC_1
0x45b502 KEY_NUMERIC_2
0x45b503 KEY_NUMERIC_3
0x45b504 KEY_NUMERIC_4
0x45b505 KEY_NUMERIC_5
0x45b506 KEY_NUMERIC_6
0x45b507 KEY_NUMERIC_7
0x45b508 KEY_NUMERIC_8
0x45b509 KEY_NUMERIC_9

#
# Onkyo Remote Code: 33504
#

Mais comme je l'ai dit, pour l'instant, ne faites attention qu'aux fonctionnalités standards. A noter également que ir-keytable donne une erreur de segmentation s'il constate des commentaires avant la première définition. Ça m'a pris un moment pour comprendre ce qui n'allait pas avec mon fichier de configuration (cela ne justifie pas une erreur de segmentation, mais bon). Quoi qu'il en soit, la commande devrait afficher quelque chose comme ceci:

Read onkyo-dvd table
Old keytable cleared
Wrote 29 keycode(s) to driver
Protocols changed to NEC

Si vous lancez de nouveau ir-keytable, vous devriez avoir ceci pour les touches configurées:

1309389537.706840: event MSC: scancode = 45b521
1309389537.706868: event key down: KEY_ENTER (0x001c)
1309389537.706878: event sync
1309389537.738835: event MSC: scancode = 45b521
1309389537.738859: event MSC: scancode = 45b521
1309389537.986104: event key up: KEY_ENTER (0x001c)
1309389537.986119: event sync
1309389543.267687: event MSC: scancode = 45b581
1309389543.267713: event key down: KEY_DOWN (0x006c)
1309389543.267714: event sync
1309389543.516097: event key up: KEY_DOWN (0x006c)
1309389543.516112: event sync
1309389547.808589: event MSC: scancode = 45b551
1309389547.808612: event key down: KEY_LEFT (0x0069)
1309389547.808613: event sync
1309389548.056101: event key up: KEY_LEFT (0x0069)
1309389548.056117: event sync
1309389549.183552: event MSC: scancode = 45b54d
1309389549.183579: event key down: KEY_RIGHT (0x006a)
1309389549.183581: event sync
1309389549.426105: event key up: KEY_RIGHT (0x006a)
1309389549.426120: event sync
1309389552.252585: event MSC: scancode = 45b522
1309389552.252610: event key down: KEY_BACK (0x009e)
1309389552.252611: event sync
1309389552.496098: event key up: KEY_BACK (0x009e)
1309389552.496118: event sync

Donc, il reconnaît les touches que vous avez configurés. Maintenant lancer MythTV pour voir si les touches que vous avez configurées, réalisent les actions que vous souhaitez!

Si vous voulez charger le fichier de configuration au moment du démarrage, vous pouvez utiliser le fichier /etc/rc_maps.cfg. Éxecutez dans une console :

ir-keytable

Vous devriez voir quelque chose comme ça :

Found /sys/class/rc/rc0/ (/dev/input/event2) with:
        Driver mceusb, table rc-rc6-mce
        Supported protocols: NEC RC-5 RC-6 JVC SONY LIRC
        Enabled protocols: NEC RC-5 RC-6 
        Repeat delay = 500 ms, repeat period = 33 ms

La partie la plus importante est la table ici “rc-rc6-mce”. Il faut ajuster le fichier /etc/rc_maps.cfg qui contrôle la sélection automatique des télécommandes en ajoutant une ligne comme celle-ci:

*	rc-rc6-mce               rc6_mce

qui signifie que le fichier “/etc/rc_keymaps/rc6_mce” sera chargé pour tous matériels ayant la table “rc-rc6-mce”. Mais si vous avez créé ou modifié votre fichier, il faut pointer vers le nouveau fichier et ajouter une ligne comme celle-là :

*	rc-rc6-mce               $mon_fichier

Avec cette modification, votre fichier sera chargé à chaque démarrage si une télécommande avec la table “rc-rc6-mce” est détectée. Maintenant vous pouvez soit redémarrer, soit recharger le fichier de configuration avec la commande suivante :

 ir-keytable -a /etc/rc_maps.cfg

Malheureusement, ça dé-active le protocole, il faut donc relancer la commande :

ir-keytable -p <proto>

en remplaçant <proto> par le protocole de votre télécommande et tout devrait fonctionner

Ou alors vous pouvez ajouter la commande “ir-keytable -c -w /etc/rc_keymaps/onkyo-dvd” au fichier /etc/rc.local.

Faire cohabiter le fonctionnement du noyau avec LIRC

Vous pouvez également combiner à la fois les points forts du mappage dans le noyau et l'emploi de LIRC, qui semblent avoir quelques capacités que les pilotes du noyau n'ont pas, par exemple le lancement de certains scripts pour certains boutons, par le biais de irexec. Vous aurez seulement besoin de faire cela mais si vous besoin de ce genre de fonctionnalités avancées. Selon le site LIRC, vous avez besoin d'au moins 0.9.0. Avant d'aller plus loin, vous devez déjà avoir fait fonctionner votre télécommande avec le noyau en suivant le paragraphe précédent.

Commencez par installer lirc si vous l'avez désinstallé ou si vous ne l'avez jamais installé. S'il vous demande quelle télécommande vous souhaitez utiliser, choisissez “Linux input layer (/dev/input/eventX)”. En général, vous n'aurez pas besoin d'un émetteur, choisissez donc “none”. Pour le dispositif (REMOTE_DEVICE), choisissez celui qui inclut son nom de votre récepteur. Dans mon cas, voici mon hardware.conf. Si votre gestionnaire de paquet ne l'a pas généré, il suffit d'utiliser le mien et de l'adapter:

#Chosen Remote Control
REMOTE="Linux input layer (/dev/input/eventX)"
REMOTE_MODULES=""
REMOTE_DRIVER="devinput"
REMOTE_DEVICE="/dev/input/by-id/usb-Philips_eHome_Infrared_Transceiver_PH00OXFk-event-if00" ### Change this one!!!! ###
REMOTE_SOCKET=""
REMOTE_LIRCD_CONF="devinput/lircd.conf.devinput"
REMOTE_LIRCD_ARGS=""

#Chosen IR Transmitter
TRANSMITTER="None"
TRANSMITTER_MODULES=""
TRANSMITTER_DRIVER=""
TRANSMITTER_DEVICE=""
TRANSMITTER_SOCKET=""
TRANSMITTER_LIRCD_CONF=""
TRANSMITTER_LIRCD_ARGS=""

#Enable lircd
START_LIRCD="true"

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD="false"

#Try to load appropriate kernel modules
LOAD_MODULES="true"

# Default configuration files for your hardware if any
LIRCMD_CONF=""

FORCE_NONINTERACTIVE_RECONFIGURATION="false"
START_LIRCMD=""

Puis, avec modprobe, montez le module qui fournit le support du protocole ir-keytable pour LIRC :

modprobe ir-lirc-codec

Si vous voulez monter automatiquement ce module au démarrage; ajoutez cette commande dans /etc/modules ou dans /etc/modprobe.d. Lancer de nouveau ir-keytable mais en ajoutant LIRC (avec une virgule) à la liste des protocoles, exemple:

ir-keytable -c -w /etc/rc_keymaps/myconfig -p NEC,LIRC

Si vous voulez rendre ce fonctionnement permanent, ajoutez cette commande dans /etc/rc.local (ou equivalent) bien sûr. NOTE si vous utilisez une distribution basée sur DEBIAN, vous devrez relancer cette commande si vous re-installer LIRC ou si vous lancez dpkg-reconfigure lirc pour réinitialiser le protocole LIRC uniquement

Puis si votre gestionnaire de paquet ne génére pas le bon fichier “hardware.conf”, vous devrez le regénérer et le modifier ainsi que votre fichier lircd.conf en ajoutant simplement:

include "/usr/share/lirc/remotes/devinput/lircd.conf.devinput"

Maintenant, la chaîne se présente comme suit:

évenement -> kernel (ir-keytable) -> LIRC -> mappage du fichier standard de configuration ir-keytable renvoyé par LIRC (grace à la ligne inclus dans lircd.conf)
                                          -> mappage personnalisé de lircd.conf ( grâce aux directives spécifiques incluses dans lircd.conf)

Maintenant vous pouvez enregistrer tous les commandes spécifiques à LIRC dans lircd.conf, tout en conservant l'avantage des pilotes du noyau. Si tout va bien, vous devriez être en mesure de voir les événements dans irw:

000000008001001c 00 KEY_ENTER devinput
0000000080010067 00 KEY_UP devinput
0000000080010069 00 KEY_LEFT devinput
000000008001006a 00 KEY_RIGHT devinput
000000008001006c 00 KEY_DOWN devinput

Multiple affectation à un bouton de votre télécommande

J'ai supprimé cette partie car je crois qu'elle ne concerne pas MythTV. Veuillez vous reporter au texte original et me signaler si c'est nécessaire de la traduire.

Je pense que ça pourrait être utile si la télécommande a un nombre de touches réduites ????

FAQ

Q: quels sont les avantages et les inconvénients à utiliser les modules du noyau avec ir-keytable plutôt que LIRC ?

R: Les avantages sont essentiellement que vous êtes capable d'émuler un clavier, que c'est beaucoup plus en accord avec la façon dont Linux gère les périphériques d'entrée et d'autre part que c'est simple à configurer. Les inconvénients sont que LIRC peut supporter plusieurs récepteurs et une base d'utilisateurs plus importante, ce qui signifie beaucoup plus de fichiers lircd.conf disponibles qui pourraient s'appliquer à votre télécommande. En outre, en ce moment LIRC semble avoir des fonctionnalités un peu plus large et plus mature.

Q: Y-a-t-il des incompatibilités ?

R: La préoccupation la plus importante que j'ai à l'heure actuelle, c'est que ir-keytable ne fonctionne pas très bien sur l'architecture i386.

Q: Comment puis-je faire fonctionner le récepteur après une sortie du mode veille ou hibernation?

R: Voir cette discussion

Autres sources de renseignements

Forum ubuntu en anglais

Forum XBMC en anglais également

forum Archlinux et bien sûr les commentaires de l'article original

l'original

telecommande.txt · Dernière modification: 09/04/2013 par gilles74