Utilisation d'une télécommande multimédia avec Lirc
Cet article est inspiré de celui-ci et va vous présenter comment installer votre télécommande sous Frugalware. L'exemple donné est pour une télécommande fournie avec la carte tuner TNT Hauppauge Nova-t, vous pourrez l'adapter à la votre.
- Pré-requis
Avant de commencer, il va vous falloir ajouter un module au démarrage. Pour le charger manuellement, en root faites :
# modprobe evdev
Dans votre /etc/sysconfig/modules, ajouter le module evdev pour qu'il se lance automatiquement au démarrage :
# nano /etc/sysconfig/modules
Installer ensuite lirc qui va vous permettre de contrôler votre télécommande :
# pacman-g2 -S lirc
(cela va vous installer lirc_modules par la même occasion). Pour que le service lirc se lance automatiquement au démarrage, tapez la commande :
#service lirc add
- Création d'une règle Udev
Dans certains cas, l'identifiant de notre télécommande peut changer au démarrage. Pour éviter cela, nous allons créer une règle Udev. Nous allons avoir besoin de quelques informations. D'abord, tapez :
cat /proc/bus/input/devices
Cela va vous donner la liste de vos périphériques de saisie. Repérez-y votre télécommande. Dans mon cas :
I: Bus=0001 Vendor=0070 Product=9002 Version=0001 N: Name="cx88 IR (Hauppauge Nova-T DVB-T" P: Phys=pci-0000:00:0b.0/ir0 S: Sysfs=/class/input/input2 U: Uniq= H: Handlers=kbd event2 B: EV=100003 B: KEY=100fc312 214a80200000000 0 18000 41a800004801 9e168000000000 10000ffc''
Ce dont nous avons besoin ici est le numéro de l'event (ici 2).
Taper ensuite :
udevinfo -a -p $(udevinfo -q path -n /dev/input/event2)
En adaptant bien sûr le numéro de l'event retourné lors de la commande précèdente. Vous allez obtenir un certain nombre d'informations concernant votre técommande :
Udevinfo starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, 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 '/class/input/input2/event2':
KERNEL=="event2"
SUBSYSTEM=="input"
DRIVER==""
ATTR{dev}=="13:66"
looking at parent device '/class/input/input2':
KERNELS=="input2"
SUBSYSTEMS=="input"
DRIVERS==""
ATTRS{modalias}=="input:b0001v0070p9002e0001-e0,1,14,k71,72,73,74,77,80,8B,8E,A3,A5,A7,A8,AE,CF,D0,161,16B,16D,16F,172,174,179,181,184,188,189,18E,18F,190,191,192,193,19C,ramlsfw"
ATTRS{uniq}==""
ATTRS{phys}=="pci-0000:00:0b.0/ir0"
ATTRS{name}=="cx88 IR _Hauppauge Nova-T DVB-T"
looking at parent device '/devices/pci0000:00/0000:00:0b.0':
KERNELS=="0000:00:0b.0"
SUBSYSTEMS=="pci"
DRIVERS=="cx8800"
ATTRS{msi_bus}==""
ATTRS{broken_parity_status}=="0"
ATTRS{modalias}=="pci:v000014F1d00008800sv00000070sd00009002bc04sc00i00"
ATTRS{local_cpus}=="ff"
ATTRS{irq}=="19"
ATTRS{class}=="0x040000"
ATTRS{subsystem_device}=="0x9002"
ATTRS{subsystem_vendor}=="0x0070"
ATTRS{device}=="0x8800"
ATTRS{vendor}=="0x14f1"
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
ATTRS{uevent}==""
L'objectif est de trouver une information qui va identifier votre télécommande de manière unique sur votre système pour créer notre règle Udev. On va par exemple pouvoir utiliser le ATTRS{vendor}, ici 0x14f1. Maintenant que nous avons l'information nécessaire, nous allons pouvoir créer notre règle.
# nano /etc/udev/rules.d/10-local.rules
et ajoutez-y :
KERNEL=="event*", ATTRS{vendor}=="0x14f1", SYMLINK="input/irremote"
L'idée est que l'on va créer un lien symbolique du périphérique ayant le ATTRS{vendor}==“0x14f1” quel que soit son numéro d'event. Ainsi notre télécommande sera toujours reconnue de la même façon.
Il vous faut maintenant redémarrer udev pour que cette nouvelle règle soit prise en compte. La commande service udev restart
ne fonctionnant pas chez moi (Le service rc.udev n'est pas pris en charge par chkconfig), un redémarrage est nécessaire.
Vous pourrez alors taper :
ls -l /dev/input
pour vérifier que votre lien symbolique a bien été mis en place.
- Configuration de Lirc.
Nous allons maintenant passer à la configuration de lirc. Tout d'abord, éditez le fichier de configuration :
# nano /etc/sysconfig/lirc
Vous allez devoir modifier la ligne LIRCD_OPTIONS pour la faire correspondre au changement précèdent :
LIRCD_OPTIONS="-H dev/input --device=/dev/input/irremote"
Le -H dev/input (notez qu'il n'y a pas de faute de frappe ici) défini le driver qui sera utilisé. Vous devrez l'adapter en conséquence pour d'autres télécommandes. La commande :
# lircd --driver=help
va vous afficher la liste des drivers possibles (par exemple pour les télécommandes Pinnacle, il s'agit du driver pinsys).
Il va ensuite vous falloir créer un fichier /etc/lircd.conf qui va servir à faire la correspondance entre le nom de vos touches et leur code hexadécimal. Ce fichier peut être trouvé ici pour la plupart des télécommandes. Pour la mienne :
# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.7.1pre2(any) on Sat Sep 17 01:00:56 2005
#
# contributed by
#
# brand: lircd.conf.kernel-2.6.13.1.conf
# model no. of remote control:
# devices being controlled by this remote:
#
begin remote
name hauppauge_nova_t_uk
bits 16
eps 30
aeps 100
one 0 0
zero 0 0
pre_data_bits 16
pre_data 0x8001
gap 135803
toggle_bit 0
begin codes
Power 0x0074
Go 0x0161
TV 0x0179
Videos 0x0189
Music 0x0188
Pictures 0x016F
Guide 0x016D
Radio 0x0181
Up 0x0067
Left 0x0069
Right 0x006A
Down 0x006C
OK 0x001C
Back 0x00AE
Menu 0x008B
VolumeUp 0x0073
VolumeDown 0x0072
PreviousChannel 0x019C
Mute 0x0071
ChannelUp 0x0192
ChannelDown 0x0193
Record 0x00A7
Stop 0x0080
Replay 0x00A8
Play 0x00CF
Skip 0x00D0
PreviousTrack 0x00A5
Pause 0x0077
NextTrack 0x00A3
1 0x004F
2 0x0050
3 0x0051
4 0x004B
5 0x004C
6 0x004D
7 0x0047
8 0x0048
9 0x0049
0 0x0052
Text 0x0184
Subtitles 0x0172
Red 0x018E
Green 0x018F
Yellow 0x0190
Blue 0x0191
end codes
end remote
Maintenant que la configuration de Lirc est terminée, redémarrons-le :
#service lirc restart
et testons son bon fonctionnement avec la commande :
irw
Appuyez sur les touches de votre télécommande et vous devriez voir des sorties correspondantes dans votre terminal. Si c'est le cas, c'est que votre configuration est fonctionnelle et vous pouvez passer à la suite.
- Configurer Lirc pour vos applications
Voici une partie assez délicate car elle va dépendre des applications que vous allez contrôler avec votre télécommande. Je vais donner quelques pistes, mais il vous faudra sans doute faire quelques recherches pour vos applications.
Note : sous KDE, il existe une applications, IRKick (qui fait partie du paquet kdeutils) qui permet de configurer tout ça de manière graphique. L'inconvénient c'est que cela est limité à certaines applications KDE.
Donc sous Gnome ou si vous souhaitez avoir plus de possibilités, il va falloir le faire à la main.
Voici la méthode que j'utilise. Tout d'abord, dans votre home, créez un fichier .lircrc. Dans celui-ci, on va spécifier un fichier par application que l'on souhaite utiliser. Il est possible de tout mettre dans le fichier .lircrc, mais on perd en lisibilité. Voici par exemple mon fichier .lircrc (je sépare suivant l'environnement que j'utilise) :
##KDE include ~/.lirc/.lircrc-kaffeine include ~/.lirc/.lircrc-amarok ##GNOME include ~/.lirc/.lircrc-mplayer #include ~/.lirc/.lircrc-exaile #include ~/.lirc/.lircrc-vlc #include ~/.lirc/.lircrc-rhythmbox ##Communs include ~/.lirc/.lircrc-xdtv</php>
Les modifications dans ce fichier nécessitent un redémarrage de lirc pour être prises en compte. Et donc vous l'avez compris, on va créer ensuite dans le répertoire ~/.lirc/ les fichiers correspondants.
Il existe plusieurs façons pour faire ces fichiers, et vous trouverez des exemples sur le net pour beaucoup d'applications. Voici deux exemples, une application KDE (Amarok) où on va utiliser dcop et une application Gnome (Rhythmbox). Notez qu'on utilise irexec, fourni avec lirc, qu'il faudra prendre soin de lancer au démarrage de votre environnement. La ligne button est à adapter aux noms des touches définis dans votre /etc/lircd.conf.
##~/.lirc/.lircrc-amarok
begin
prog = irexec
button = Music
config = amarok
end
begin
prog = irexec
button = Play
config = dcop amarok player play
end
begin
prog = irexec
button = Stop
config = dcop amarok player stop
end
begin
prog = irexec
button = Pause
config = dcop amarok player playPause
end
begin
prog = irexec
button = VolumeDown
repeat = 2
config = dcop amarok player volumeDown
end
begin
prog = irexec
button = VolumeUp
repeat = 2
config = dcop amarok player volumeUp
end
begin
prog = irexec
button = Skip
repeat = 3
config = dcop amarok player seekRelative 5
end
begin
prog = irexec
button = NextTrack
repeat = 3
config = dcop amarok player next
end
begin
prog = irexec
button = Replay
repeat = 3
config = dcop amarok player seekRelative -5
end
begin
prog = irexec
button = Mute
config = dcop amarok player mute
end
begin
prog = irexec
button = Menu
repeat = 3
config = dcop amarok player showOSD
end
#~/.lirc/.lircrc-rhythmbox
begin
prog = irexec
button = Music
config = rhythmbox-client --play & rhythmbox-client --hide
end
begin
prog = irexec
button = Play
config = rhythmbox-client --play-pause
end
begin
prog = irexec
button = Pause
config = rhythmbox-client --play-pause
end
begin
prog = irexec
button = Stop
config = rhythmbox-client --pause
end
begin
prog = irexec
button = NextTrack
config = rhythmbox-client --next
end
begin
prog = irexec
button = PreviousTrack
config = rhythmbox-client --previous
end
begin
prog = irexec
button = Red
config = shuffle
end
begin
prog = irexec
button = Replay
config = seek_backward
end
begin
prog = irexec
button = Skip
config = seek_forward
end
begin
prog = irexec
button = VolumeDown
config = volume_down
end
begin
prog = irexec
button = VolumeUp
config = volume_up
end
begin
prog = irexec
button = Mute
config = mute
end
begin
prog = irexec
button = Menu
config = rhythmbox-client --notify
end
begin
prog = irexec
button = Power
config = rhythmbox-client --quit
end