{{tag>Xenial télécommande multimédia matériel media_center}} ---- ====== Gérer sa télécommande avec IR-Keytable ====== De nombreuses télécommandes infrarouges sont compatibles sous Linux (mais pas toutes). Les fonctionnalités de l'infrarouge (ir-core) sont désormais intégrées par défaut au [[:kernel|noyau]]. **IR-Keytable** est l'outil qui permet de faire fonctionner son récepteur IR et ses télécommandes.\\ Cette méthode est à privilégiée lorsque votre matériel est reconnu nativement par le noyau. Sinon il est préférable d'utilliser [[:LIRC]] (Linux Infrared Remote Control) et ses modules. ===== Prérequis ===== * Disposer des [[:sudo|droits d'administration]]. * Disposer d'une connexion à Internet configurée et activée. * Avoir désinstallé [[LIRC]] si vous l'aviez installé. ===== Installation ===== Avec IR-keytable, les touches de votre télécommande se comporteront comme des touches de clavier. [[:tutoriel:comment_installer_un_paquet|Installez le paquet]] **[[apt>ir-keytable]]**. ===== Configuration ===== Pour savoir si votre récepteur est reconnu tapez dans un [[:terminal]] : sudo ir-keytable Si votre récepteur est reconnu vous obtenez quelque chose de la sorte : Found /sys/class/rc/rc2/ (/dev/input/event14) with: Driver (null), table rc-dib0700-rc5 Supported protocols: NEC RC-5 RC-6 Enabled protocols: RC-5 Name: IR-receiver inside an USB DVB re bus: 3, vendor/product: 2040:7050, version: 0x0598 Repeat delay = 500 ms, repeat period = 125 ms Dans cet exemple le récepteur est le rc2 et il gère les protocoles NEC, RC-5 et RC-6. Si votre récepteur est reconnu, il faut maintenant vérifier que votre télécommande l'est aussi. Tapez : ir-keytable -t --sysdev rc2 Remplacez rc2 par votre récepteur (rc0, rc1, ...). Appuyez sur les touches de votre télécommande. Si votre télécommande est reconnue, à chaque appui sur une touche, une ou des lignes apparaîtront : 1446572211.444184: event type EV_MSC(0x04): scancode = 0x1f32 1446572211.444184: event type EV_SYN(0x00). 1446572211.558001: event type EV_MSC(0x04): scancode = 0x0d Chaque touche génère un ''scancode'' mais il est très probable que toutes les touches ne génèrent pas un ''keycode'' (un code clavier). Il faut donc y remédier en indiquant à Linux l’association à faire entre le ''scancode'' (ex. 0x1f32) et le ''keycode'' (ex. KEY_UP). Pour cela il est possible d'utiliser des fichiers de paramétrage existants ou bien de créer son propre fichier. Dans tous les cas, à ce stade, il est fortement recommandé de se faire un petit fichier permettant de connaître le scancode généré par chacune des touches de sa télécommande. ====Fichiers de paramétrage prédéfinis==== Les fichiers de paramétrage associant ''keycode'' et ''scancode'' sont situés dans le dossier **/lib/udev/rc_keymaps** et contiennent déjà des paramètres prédéfinis pour quelques télécommandes (ce qui vous évitera de créer vous même votre fichier). Il faudra alors rechercher le fichier de configuration le plus proche de votre materiel.\\ Pour cela, en remplaçant ''0x0d'' par un ''scancode'' généré par une touche de votre telecommande, tapez la ligne ci-dessous qui affichera les fichiers contenant ce scancode : grep -iH 0x0d /lib/udev/rc_keymaps/* Vous obtenez quelque chose de la sorte : /lib/udev/rc_keymaps/apac_viewcomp:0x0d KEY_STOP /lib/udev/rc_keymaps/ati_tv_wonder_hd_600:0x0d KEY_UP /lib/udev/rc_keymaps/ati_x10:0x0d KEY_1 /lib/udev/rc_keymaps/avermedia_cardbus:0x0d KEY_7 /lib/udev/rc_keymaps/behold_columbus:0x0D KEY_SETUP /lib/udev/rc_keymaps/budget_ci_old:0x0d KEY_MUTE /lib/udev/rc_keymaps/cinergy:0x0d KEY_CHANNELUP ... Dans cet exemple on obtenait le ''scancode 0x0d'' lorsqu'on appuyait sur le bouton "Couper le son" de la télécommande. Grâce à la commande précédente on peut se rendre compte que le fichier ''budget_ci_old'' contient le bon ''scancode''. Pour être sûr d'avoir le bon fichier, répéter l'opération avec différents scancodes. ====Créer son fichier de paramétrage==== Vous pouvez créer votre fichier de paramètres personnalisés. La première ligne doit être la suivante : # table nomdevotretable, type: letypedelatélécommande Le type de la télécommande correspond à RC5, RC6, NEC, UNKNOWN, ... Et ensuite les affectations de touches sous la forme : scancode keycode Exemple : # table telecommandetv, type: RC5 0x00 KEY_SPACE 0x01 KEY_N 0x02 KEY_BRIGHTNESSUP 0x0d KEY_MUTE ... Pour vous aider à la rédaction de ce fichier, vous trouverez une liste des "keycodes" multimedia avec leur signification [[https://linuxtv.org/wiki/index.php/Remote_Controllers|ici]]. Si vous avez plusieurs télécommandes reconnues par votre récepteur IR, vous pouvez créer plusieurs fichiers de paramétrage ou rassembler toutes ces tables de conversion dans un seul fichier. ====Utiliser son fichier de paramétrage==== Finalement il faut associer le fichier à un récepteur. Tapez la commande ci-dessous : sudo ir-keytable -c -w /lib/udev/rc_keymaps/budget_ci_old --sysdev rc2 Dans cet exemple, on utilise le fichier ''budget_ci_old'' pour le récepteur rc2. (Dans la ligne le -c permet de nettoyer la table de rc2 et -w permet d'écrire la nouvelle table à partir du fichier sélectionné). Une fois que vous aurez testé vos modifications, il suffira d'ajouter cette ligne de commande au fichier **/etc/rc.local** pour qu'elles soient prises en compte au prochain redémarrage : #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. ir-keytable -c -w /lib/udev/rc_keymaps/budget_ci_old --sysdev rc2 exit 0 Maintenant chaque touche de votre télécommande agit comme une touche du clavier. Pour **VLC**, par exemple, vous pouvez associer dans //Outils --> Configuration --> Raccourcis// chaque touche de votre télécommande à une action (changer de chaîne, mettre en plein écran, pause, ...). C'est peut-être suffisant, mais si vous avez besoin de différencier votre télécommande de votre clavier, vous pouvez aller plus loin en installant le daemon ''InputLirc''. C'est par exemple très utile pour utiliser agreablement [[:kodi|Kodi / XBMC]] Pour le lecteur **Audacious**, ouvrir le Menu "Sortie" puis -->Paramètres audio -->Greffons-->Raccourcis universels --> paramètres. On y choisit une action, on clique dans le champ de droite "association de touches" (par exemple LIRE = XF86AudioPlay) et on presse le bouton "Play" de sa télécommande. On répète l'opération pour toutes les actions qu'on veut définir puis on clique sur le pavé "Définir" en bas à droite pour les enregistrer définitivement. ==== InputLirc ==== ''InputLirc'' est un daemon léger qui permet de ré-envoyer les KeyCodes générés par ''/dev/input/eventX'' aux clients Lirc.\\ Il faut donc installer **[[apt>inputlirc]]**. ImputLirc est incompatible avec Lirc. Pour que cette méthode fonctionne, il faut impérativement désinstaller Lirc ou s'assurer que le daemon Lircd n'est pas lancé. Pour cela, lors de l'installation de Lirc ou de sa re-configuration : sudo dpkg-reconfigure lirc il faut bien avoir répondu none aux questions posée. Assurez vous également que le paramètre START_LIRCD est bien configuré sur ''false'' dans **etc/lirc/hardware.conf**. Pour le configurer, il faut connaître le numéro du EventX correspondant à votre récepteur IR : cat /proc/bus/input/devices Par exemple, sur une Zbox nano, vous pourrez obtenir : I: Bus=0019 Vendor=1050 Product=00c5 Version=0062 N: Name="Nuvoton w836x7hg Infrared Remote Transceiver" P: Phys=nuvoton/cir0 S: Sysfs=/devices/pnp0/00:02/rc/rc0/input7 U: Uniq= H: Handlers=kbd event7 B: PROP=0 B: EV=100013 B: KEY=fff 0 108fc010 4004900000000 0 40000a000 1080c4000801 9e168000000000 2 B: MSC=10 Donc, ici les signaux de la télécommande sont transmis à travers ''/dev/input/event7'', ce qu'il faut indiquer à ''inputLirc'' en ajoutant au fichier ''/etc/default/inputlirc'' : EVENTS="/dev/input/event7" OPTIONS="-g -m 0 -c" [cas particulier ?] Lorsque vous débranchez et rebrancher votre récepteur IR, le numero eventX peut changer. Voir plus bas comment s'affranchir de cet inconvénient Il ne reste plus qu'à redémarrer inputLirc : /etc/init.d/inputlirc stop /etc/init.d/inputlirc start Et tester que maintenant, votre télécommande est bien reconnue et que l'appui de touche renvoie le bon code lirc : irw Maintenant que InputLirc fonctionne, les scancodes générés par votre télécommande ne sont plus transformés en événements clavier KeyCode mais en événements télécommande. La commande ir-keytable -t --sysdev rc2 ne ferait plus rien apparaître lors de l'appui des touches. C'est pour cela qu'il faut désormais utiliser la commande irw pour tester votre télécommande. la commande irw fait partie du paquet Lirc qu'il faut donc installer pour l'utiliser. Rappelons que InputLirc et Lirc sont incompatibles. Assurez vous bien que le daemon Lircd n'est pas lancé ! ==== Cas où le numero EventX change de temps en temps ==== Il arrive que le numero EventX change parfois. Lors d'un redémarrage ou lorsque l'on débranche puis rebranche son récepteur IR USB. Il faut alors créer une règle permanente avec Udev.\\ Commençons par rechercher un peu plus d'information sur votre récepteur IR en tapant (remplacer event8 par le numéro d'eventX correspondant dans cette cession à votre récepteur IR) : udevadm info -a -p $(udevadm info -q path -n /dev/input/event8) On obtient alors par exemple : Udevadm info starts with the device specified by the devpath and then walks up the chain of parent devices. It prints for every devicefound, all possible attributes in the udev rules key format. A rule to match, can be composed by the attributes of the device and the attributes from one single parent device. looking at device '/devices/pnp0/00:01/rc/rc0/input8/event8': KERNEL=="event8" SUBSYSTEM=="input" DRIVER=="" looking at parent device '/devices/pnp0/00:01/rc/rc0/input8': KERNELS=="input8" SUBSYSTEMS=="input" DRIVERS=="" ATTRS{name}=="Nuvoton w836x7hg Infrared Remote Transceiver" ATTRS{phys}=="nuvoton/cir0" ATTRS{properties}=="0" ATTRS{uniq}=="" looking at parent device '/devices/pnp0/00:01/rc/rc0': KERNELS=="rc0" SUBSYSTEMS=="rc" DRIVERS=="" ATTRS{protocols}=="[other] [unknown] [rc-5] [nec] [rc-6] [jvc] [sony] [rc-5-sz] [sanyo] [sharp] [mce_kbd] [xmp] [lirc]" looking at parent device '/devices/pnp0/00:01': KERNELS=="00:01" SUBSYSTEMS=="pnp" DRIVERS=="nuvoton-cir" ATTRS{id}=="NTN0530" looking at parent device '/devices/pnp0': KERNELS=="pnp0" SUBSYSTEMS=="" DRIVERS=="" Il faut alors rechercher l'''ATTRS{id}'' correspondant à votre matériel (dans mon cas ''ATTRS{id}=="NTN0530"'') pour créer le lien symbolique ''MaTelecommande'' pointant toujours sur le bon ''EventX'': sudo echo 'KERNEL=="event*",ATTRS{id}=="NTN0530",SYMLINK="input/MaTelecommande"' > /etc/udev/rules.d/10-persistent-ir.rules (vous pouver aussi modifier directement le fichier ''/etc/udev/rules.d/10-persistent-ir.rules'' en ajoutant la ligne : ''KERNEL=="event*",ATTRS{id}=="NTN0530",SYMLINK="input/MaTelecommande"'' \\ Redemarrez Udev pour que les changements prennent effet : sudo /etc/init.d/udev reload sudo udevadm trigger Vous devriez voir désormais apparaître le fichier spécial ''/dev/input/MaTelecommande''\\ N'oubliez pas pour terminer de reconfigurer InputLirc : EVENTS="/dev/input/MaTelecommande" OPTIONS="-g -m 0 -c" Et redémarrer inputLirc : sudo /etc/init.d/inputlirc stop sudo /etc/init.d/inputlirc start ===== Désinstallation ===== Pour supprimer cette application, il suffit de [[:tutoriel:comment_supprimer_un_paquet|supprimer son paquet]]. Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée. Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés. ===== Voir aussi ===== * [[http://kodi.wiki/view/HOW-TO:Set_up_an_MCE_remote_control_in_Linux|Tuto en anglais sur lirc et IR-Keytable]]. ------ //Contributeurs : [[utilisateurs:zarmu]]//