Wiki

Outils pour utilisateurs

Outils du site


lirc_devinput

Lirc devinput

La gestion des télécommandes a radicalement changé depuis l'introduction des modules de gestion des télécommandes dans le noyau ( =⇒ 2.6.35)

Ce qui a changé

Depuis la version 2.6.35 (à confirmer), les modules de gestion des télécommandes ont été directement introduit dans les sources du noyau. Ce n'est plus vous qui décidez d'utiliser tel ou tel module pour la gestion de la télécommande, mais c'est le noyau qui décide. Udev détecte votre récepteur et installe le module approprié. Par ailleurs la ré-écriture des modules a conduit à une certaine uniformité dans la gestion des télécommandes. La majeure partie des récepteurs sont désormais vues comme des périphériques d'entrée et assimilé à un clavier.

Ce qui conduit votre télécommande à être directement opérationnelle sans avoir besoin d'installer lirc. Mais en théorie seulement car pour le moment ce mode est totalement inutilisable, toutes les touches des télécommandes ne sont pas reconnues et quand elles sont reconnues, elles le sont selon le clavier US.

Il faut donc encore avoir recours à lirc et faire en sorte que la télécommande ne réagisse plus comme un clavier.

Comment identifier la situation

Pour savoir si vous êtes dans la situation décrite précédemment, tapez dans une console

dmesg | grep input ou grep ir  ou grep hauppauge ou grep "ma télécommande"

si vous voyez quelque chose comme cela

input: cx88 IR (Hauppauge Nova-S-Plus  as /devices/pci0000:00/0000:00:1e.0/0000:02:0c.2/rc/rc0/input5

vous êtes dans le cas précité, confirmez avec cette commande

cat /proc/bus/input/devices

qui doit vous fournir quelque chose comme cela

I: Bus=0001 Vendor=0070 Product=9202 Version=0001
N: Name="cx88 IR (Hauppauge Nova-S-Plus "
P: Phys=pci-0000:02:0c.2/ir0
S: Sysfs=/devices/pci0000:00/0000:00:1e.0/0000:02:0c.2/rc/rc0/input5
U: Uniq=
H: Handlers=kbd event5 
B: EV=100003
B: KEY=100fc312 214a802 0 0 0 0 18000 41a8 4801 9e1680 0 0 10000ffc

On voit que le driver du récepteur est “kbd” (pour keyboard) et que chez moi, il est disponible sous /dev/input/event5

Si ce n'est pas le cas, il va falloir installer le module lirc compatible avec votre récepteur IR et ce tutoriel ne vous est pas destiné.

Comment procéder

Il fait réaliser 2 étapes

  1. installer lirc
  2. configurer lirc avec les bons paramètres

Oublier tout ce que vous savez de lirc, le nouveau fonctionnement est totalement différent et surtout supprimer tout ce que vous avez installé pour lirc avant de commencer.

Avec l'introduction de Xorg 1.8, hal (qui détectait le matériel) a été supprimé car il n'est plus maintenu et il a été remplacé par le gestionnaire de périphérique udev qui assure la bonne reconnaissance de votre récepteur (et des autres périphériques).

La gestion des périphériques (claviers, souris, télécommandes) dans l'interface graphique est assuré par xorg. Le Xorg.conf n'est plus le fichier de configuration, il faut désormais aller voir du coté de /etc/X11/xorg.conf.d; c'est dans 10-evdev.conf que sont gérés les “events” des périphériques du type clavier/souris/télécommande .

Installer lirc

Utiliser la méthode habituelle pour installer lirc.

Vous devez utiliser la version lirc-0.8.7 ou plus qui est compatible avec ce fonctionnement.

Configurer lirc

Procédons dans l'ordre des liens entre les fichiers de configuration. Commençons par le fichier de configuration du démon de lirc (lircd) pour qu'il utilise le bon driver et le bon périphérique. Selon votre distribution ce fichier peut être :

  • /etc/lirc/hardware.conf
  • /etc/sysconf/lircd
  • /etc/conf.d/lircd.conf

Modifiez ce fichier comme suit :

#
# Parameters for lirc deamon
#
 
LIRC_DEVICE=name="cx88\?IR\?\?Hauppauge\?Nova-S-Plus\?"     # les \? remplacent les caractères spéciaux 
LIRC_DRIVER="devinput"
LIRC_EXTRAOPTS=""
LIRC_CONFIGFILE="/etc/lirc/lircd.conf"

En mettant “name=cx88\?IR\?\?Hauppauge\?Nova-S-Plus\?”, vous ne vous souciez plus du numéro d “event” qui peut changer à chaque démarrage. Ce “name” est donné par le résultat de la commande “cat /proc/bus/input/devices”. (astuce donnée par Philippe_PMA)(chez moi, ça fonctionne avec sans le \?)

Vous pouvez également utiliser les nouvelles possibilités de udev qui crée des liens fixes par composant. A découvrir en tapant dans une console

ls -la /dev/input/by-path/
   total 0
   drwxr-xr-x 2 root root 140 2008-02-07 20:31 .
   drwxr-xr-x 4 root root 280 2008-02-07 20:31 ..
   lrwxrwxrwx 1 root root   9 2008-02-07 20:31 pci-0000:00:1a.1-usb-0:2:1.0-event-kbd -> ../event1
   lrwxrwxrwx 1 root root   9 2008-02-07 20:31 pci-0000:00:1a.1-usb-0:2:1.1-event-mouse -> ../event2
   lrwxrwxrwx 1 root root   9 2008-02-07 20:31 pci-0000:00:1a.1-usb-0:2:1.1-mouse -> ../mouse1
   lrwxrwxrwx 1 root root   9 2008-02-07 20:31 pci-4-1--event-ir -> ../event4
   lrwxrwxrwx 1 root root   9 2008-02-07 20:31 platform-pcspkr-event-spkr -> ../event3

En utilisant “/dev/input/by-path/pci-4-1–event-ir”, vous vous affranchissez également du numéro d“event”.

Autre solution, mettre ceci

Pour Ubuntu, le fichier de configuration doit ressembler à ceci

# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS=""
 
#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
 
# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="dev/input"
# If DEVICE is set to /dev/lirc and devfs is in use /dev/lirc/0 will be
# automatically used instead
DEVICE="/dev/input/by-path/pci-4-1--event-ir"
MODULES=""
 
# Default configuration files for your hardware if any
LIRCD_CONF="/etc/lirc/lircd.conf"
LIRCMD_CONF=""

Si vous avez des rubriques “remote” et “transmiter”, utilisez ceci

#Chosen Remote Control
REMOTE="Linux input layer (/dev/input/eventX)"
REMOTE_MODULES=""
REMOTE_DRIVER="devinput"
REMOTE_DEVICE="/dev/input/by-path/pci-4-1--event-ir"  
REMOTE_SOCKET=""
REMOTE_LIRCD_CONF="/etc/lirc/lircd.conf"
REMOTE_LIRCD_ARGS=""
 
#Chosen IR Transmitter
TRANSMITTER=""
TRANSMITTER_MODULES=""
TRANSMITTER_DRIVER=""
TRANSMITTER_DEVICE=""
TRANSMITTER_SOCKET=""
TRANSMITTER_LIRCD_CONF=""
TRANSMITTER_LIRCD_ARGS=""

Passons au fichier /etc/lirc/lircd.conf qui est chargé de traduire les codes touches (numériques) reçus de la télécommande, en noms de touches. Contrairement à ce que l'on aurait pu espérer, ces codes ne sont pas identiques pour chaque télécommande. De plus, l'entête de ce fichier doit contenir des caractéristiques précises pour la bonne interprétation de ces codes et ces informations peuvent être différentes selon la marque, le modèle, voir la version du matériel. Heureusement LIRC fourni quelques fichiers prédéfinis qu'on peut trouver aux emplacements suivants :

  • /usr/share/lirc/remotes/<MARQUE>/ (où <MARQUE> est la marque de votre télécommande)
  • /usr/share/lirc/extras/more_remotes/ (fouiller dans les répertoires suivants)

Si vous trouvez votre bonheur parmi les fichiers fournis, il suffit d'ajouter un lien dans /dev/lirc/lircd.conf comme dans cet exemple :

include "/usr/share/lirc/extras/more_remotes/hauppauge/lircd.conf.hauppauge_novat500"

Vous pouvez tester une configuration en faisant ceci dans une console en root

# Stopper le démon LIRC :
/etc/rc.d/lircd stop                             # à adapter selon votre distribution
 
# dans la ligne suivante, remplacer pci-4-1--event-ir par le votre, tapez lircd --help pour plus de détails
lircd -H devinput -d /dev/input/by-path/pci-4-1--event-ir -n /etc/lirc/lircd.conf

Cette commande lance lirc manuellement avec les bonnes options sans utiliser les fichiers de configuration qui ne sont pas encore correctement renseignés. Si vous obtenez un résultat correct vous pourrez passer à l'étape suivante.

Vous devriez voir ceci

lircd-0.8.7-CVS[17443]: garbage after 'name' token in line 9 ignored
lircd-0.8.7-CVS[17443]: lircd(devinput) ready, using /var/run/lirc/lircd

Ouvrir une autre console en root et tapez

irw   # puis tapez sur les touches de votre télécommande

Les codes de votre télécommande devraient s'afficher dans la console sinon il faut essayer avec un autre fichier de correspondance de touches ou en créer un qui sera mieux adapté à votre télécommande.

Pour créer votre propre fichier il faut utiliser irrecord :

# le démon LIRC doit être arrêté
# dans la ligne ci-dessous, remplacer le "device" par le votre ainsi que le chemin du fichier qui sera généré
irrecord -H devinput -d /dev/input/by-path/pci-4-1--event-ir -n /etc/lirc/nom_fichier_touches.conf

Au départ, irrecord demande d'appuyer sur une touche quelconque de la télécommande pour détecter les fameuses caractéristiques de récupération des codes. Il faut alors rester appuyé sur une touche et ne pas la relâcher tant que irrecord ne réagit pas. Ensuite, irrecord va demander le nom que l'on veut affecter à la prochaine touche puis il faudra appuyer (brièvement cette fois-ci) sur la touche en question.

Pour l'affectation des noms, si on veut éviter d'avoir à changer tous les noms du fichier lircrc (voir ci-dessous), il vaut mieux redonner les mêmes que ceux qui y sont indiqués. De cette manière, on redéfinit entièrement le fichier de correspondance télécommande –> LIRC. Une fois que c'est fait, il faut dire à LIRC d'utiliser notre fichier perso en l'indiquant dans le fichier /etc/lirc/lircd.conf.

Il reste à lier lirc avec Mythtv en créant le fichier

/home/user/.mythtv/lircrc   (le "user" doit correspondre à celui qui lance le frontend)

Si vous n'avez qu'une seule télécommande, il est préférable de supprimer toutes les lignes “remote =” car elles servent à identifier la bonne télécommande. Si vous en avez plusieurs, ce paramètre doit être fixé avec le nom que retourne la commande irw derrière le nom de la touche. Exemple : Si irw retourne 0004000400001e25 00 OK NOVA-T500, il faudra mettre remote = NOVA-T500

Le paramètre repeat correspond au délai de répétition lorsqu'on reste appuyé sur la touche. La valeur 0 désactive la répétition (idem si on supprime le paramètre). Plus la valeur est élevée, plus la répétition est lente. C'est très utile pour les touches de volume ou les touches de déplacement rapide dans les vidéos.

Le paramètre delay est le délai avant répétition. Lorsqu'on reste appuyé sur une touche, elle n'est pas répétée immédiatement. On peut ajuster ce temps d'attente avec le paramètre delay.

Le nom de touche indiqué par le paramètre button doit absolument correspondre au nom de touche définit dans le fichier de correspondance pointé par lircd.conf (voir plus haut). Car ce nom doit être celui qui est retourné par LIRC lorsqu'on appuie sur la touche en question. l'outil irw permet d'afficher ce nom.

Quant au paramètre config il définit ce que doit faire MythTV à l'appui de la touche.

lircrc
# LIRCRC
# Author(s): Mario Limonciello, Nick Fox, John Baab, Edited by Chris Murphy
# Created for use with Mythbuntu 10.10
begin
      remote = devinput
      prog = mythtv
      button = KEY_EXIT
      config = Escape
      repeat = 0
      delay = 0
end
 
begin
      remote = devinput
      prog = mythtv
      button = KEY_RECORD
      config = R
      repeat = 0
      delay = 0
end
 
begin
      remote = devinput
      prog = mythtv
      button = KEY_PLAY
      config = P
      repeat = 0
      delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_REWIND
    config = <
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_PAUSE
    config = P
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_FASTFORWARD
    config = >
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_PREVIOUS
    config = Up
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_STOP
    config = Escape
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_NEXT
    config = Down
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_BACKSPACE
    config = Escape
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_SELECT
    config = Return
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_CONTEXT_MENU
    config = Q
    repeat = 0
    delay = 0
end 
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_COMPOSE
    config = Z
    repeat = 0
    delay = 0
end 
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_ENTER
    config = Return
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_UP
    config = Up
    repeat = 3
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_DOWN
    config = Down
    repeat = 3
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_LEFT
    config = Left
    repeat = 3
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_RIGHT
    config = Right
    repeat = 3
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_ESC
    config = Escape
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_DASHBOARD
    config = S
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_PROG1
    config = Return
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_CYCLEWINDOWS
    config = I
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_MUTE
    config = |
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_VOLUMEUP
    config = ]
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_VOLUMEDOWN
    config = [
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_CHANNELUP
    config = Up
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_CHANNELDOWN
    config = Down
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_TIME
    config = F8
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_NUMERIC_1
    config = 1
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_NUMERIC_2
    config = 2
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_NUMERIC_3
    config = 3
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_NUMERIC_4
    config = 4
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_NUMERIC_5
    config = 5
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_NUMERIC_6
    config = 6
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_NUMERIC_7
    config = 7
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_NUMERIC_8
    config = 8
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_NUMERIC_9
    config = 9
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_NUMERIC_0
    config = 0
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_NUMERIC_POUND
    config = D
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_NUMERIC_STAR
    config = ?
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_BOOKMARKS
    config = C
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_MEDIA
    config = O
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_ZOOM
    config = W
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_SCREEN
    config = F
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_MENU
    config = M
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_SUBTITLE
    config = T
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_LANGUAGE
    config = +
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_VIDEO
    config = \U
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_AUDIO
    config = \M
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_CAMERA
    config = \I
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_TV
    config = \T
    repeat = 0
    delay = 0
end
 
begin
    remote = devinput
    prog = mythtv
    button = KEY_DVD
    config = \D
    repeat = 0
    delay = 0
end

Relancer lirc ou mieux relancer votre machine et tester le fonctionnement de la télécommande dans Mythtv.

Rédigé par Gilles74 le 22/11/2010; modifié en 12/2010; corrigé suite aux remarques d'Ookaze en mai 2011

lirc_devinput.txt · Dernière modification: 20/08/2011 par SnouF