Configurer sa carte tv et sa télécommande sous linux
Ce tutoriel s'adresse aux personnes sous debian ou une distribution qui se base dessus (ubuntu, xandros...). Sauf contre indication, les commandes qui suivent requièrent des droits administrateurs et doivent être lancées en root ou via un sudo.
Ce tutoriel a été réalisé avec une carte Winfast TV 2000 XP sous debian lenny et une télécommande Leadtek Y0400046.
Étape 1 : Installation de la carte
Le module bttv utilisé pour cette carte est directement fournit par le paquet linux-image. Il suffit de le configurer conformément au modèle de la carte TV. Pour cela on crée/corrige le fichier /etc/modprobe.d/bttv.conf et on met dedans :
options bttv radio=0 card=34 tuner=24 gbuffers=8
Attention : Ceci est spécifique à la carte TV et donc il faudra sans doute le corriger si vous utilisez un autre modèle de carte.
Afin que le module soit chargé au démarrage on corrige également
/etc/modules en rajoutant dedans le module bttv. On peut d'ores et déjà charger le module bttv en tapant :
modprobe bttv
Dans mon cas le device associé à la carte TV s'appelle /dev/video0.
Étape 2 : Installation de tvtime
Il existe plusieurs logiciels pour regarder la télé sous linux. J'ai essayé KdeTV mais malheureusement, avec ma carte, une bande verte apparaît sur le bord droit de l'image en mode plein écran pour une raison assez obscure.
Sous tvtime, pas de problème, tout marche impeccable. Pour l'installer
aptitude update
aptitude safe-upgrade
aptitude install tvtime
Il ne reste plus qu'à lancer TV Time et à scanner les chaînes avec TV time (tout peut se faire à la souris). Si le tuner et la carte sont correctement configurés au moment de charger le module bttv ça ne devrait pas poser de problème. Dans mon cas
- source vidéo : télévision
- mode sonore : pal-i
- norme de réception : secam
Si vous n'avez pas de son dans tvtime et que vous ne pouvez le régler
C'est probablement que vous utilisez un noyau récent OSS, n'est pas forcément directement supporté. Vous pouvez pouvez retrouver le numéro de version de votre noyau avec la commande :
uname -r
Si vous utilisez un noyau => 3.0.0 installez oss-compat et redémarrez :
aptitude install oss-compat
Pour les noyaux antérieurs, essayez d'installer oss4-dkms, et redémarrez.
Étape 3 : Configuration de la télécommande
C'est là que tout se complique. Pour que la télécommande soit prise en charge, il faut passer par lirc.
Toutefois, l'utilisation de lirc est assez complexe pour le néophytes et les quelques tutoriels que j'ai pu croiser pas forcément grand public ou d'actualité. En particulier il est souvent question d'un module lirc_gpio qui n'existe plus sur les noyaux récents.
a) Installation de lirc
On commence par installer le module qui va permette la prise en charge de la télécommande. Je vous recommande de passer par
module-assistant car les archives disponibles sur le site de lirc ont peu de chance de compiler à moins que vous ayez recompilé votre propre noyau.
aptitude install module-assistant lirc-modules-source lirc-x module-assistant
Dans l'interface de module assistant, choisir lirc-modules-source (Get, Build, Install). Si tout s'est bien passé module-assistant a créé un module, l'a empaqueté sous forme d'un paquet debian dans /usr/src, et l'a installé.
Si tout va bien la carte est visible quand on tape la commande :
cat /proc/bus/input/devices
Dans mon cas :
...
I: Bus=0001 Vendor=107d Product=6606 Version=0001
N: Name="bttv IR (card=34)"
P: Phys=pci-0000:01:07.0/ir0
S: Sysfs=/class/input/input6
U: Uniq=
H: Handlers=kbd event6
B: EV=100003
B: KEY=10afc336 2150a48 0 0 0 404 80010007 80000190 4801 1e0000 4400 100000 10000ffc
...
Il est important de relever le device auquel est associé la télécommande. En effet celui-ci peut différer dans votre cas, à vous de l'adapter en conséquence dans ce qui suit. Dans la commande qui suit, je considère que c'est event6.
lircd -d /dev/input/event6 -H dev/input
Cette commande permet de créer le device /dev/lircd qui sera utilisé par lircd pour recevoir les signaux émis par la télécommande.
Ensuite on corrige le fichier /etc/lirc/hardware.conf de sorte à avoir :
#Chosen Remote Control
REMOTE="Winfast TV2000/XP (card=34)"
# 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/event6"
MODULES=""
# Default configuration files for your hardware if any
LIRCD_CONF="/etc/lirc/lircd.conf"
LIRCMD_CONF=""
Attention à corriger les variables DEVICE et REMOTE conformément à votre matériel ! Ensuite on (re)lance lirc :
/etc/init.d/lirc restart
Remarque : si suite à une mise à jour noyau lirc ne fonctionne plus, il est possible que le device associé à lirc ait changé. Dans ce cas là,
irw ne parviendra bien entendu plus à se connecter (que ce soit en utilisateur ou en root puisque lirc ne pointe pas sur le bon device !)
(mando@aldur) (~) $ irw
connect: Connection refused
Dans ce cas, il suffit de reprendre l'étape "a) Installation de lirc" en corrigeant les différents fichiers de configuration, puis de relancer lirc.
b) Premiers tests
À ce stade il est normalement possible de commencer à récupérer les signaux de la télécommande avec la commande irw. Ce programme peut être lancé en utilisateur. Pendant qu'il tourne, on peut appuyer sur les touches de la télécommande pour récupérer les identifiants de touches (en gras ci-dessous) qui seront utilisés dans les fichiers de configuration lirc. Ces identifiants dépendent de la télécommande. Par exemple chez moi, voici ce qui est apparu en appuyant sur les touches "channel +", "finetune +", "8", "6" et "5" :
(mando@aldur) (~) $ irw
0000000080010192 00 CH_UP Leadtek-RM0010
000000008001004e 00 FINETUNE+ Leadtek-RM0010
0000000080010009 00 8 Leadtek-RM0010
0000000080010007 00 6 Leadtek-RM0010
0000000080010006 00 5 Leadtek-RM0010
À présent il faut dire à lirc comment traiter ces signaux.
Note : À l'époque où lirc_gpio existait, ce module créait un device /dev/lirc et il était possible d'utiliser mode2 pour récupérer des codes touches. En ce qui me concerne ce device n'existe plus et la commande mode2 ne marche donc plus.
c) Configurer lirc
On peut récupérer sur le site de lirc une map de télécommande à peu près utilisable. On peut télécharger une archive ici contenant de très nombreux fichiers pouvant servir à remplir
/etc/lirc/lircd.conf
http://www.lirc.org/remotes.tar.bz2
Dans mon cas j'ai utilisé celui de la télécommande Y0400052 car je n'avais pas trop le courage d'en reconstruire un. Voici à quoi ressemble mon fichier
/etc/lirc/lircd.conf :
#/etc/lirc/lircd.conf
# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.8.3-CVS(dev/input) on Sat Jan 12 17:04:54 2008
#
# contributed by: Mike Treichler
#
# brand: LeadTek
# model no. of remote control: Y0400046 (bundled with Winfast 2000XP Deluxe)
# devices being controlled by this remote: LeadTek Winfast 2000XP Deluxe
# brand: Leadtek
# model: Y0400052 (bundeled with Winfast PVR2000 TV-card)
#
# Note: Only CH_UP, CH_DOWN, VOL_UP and VOL_DOWN will repeat. This
# seems to be a limitation of the remote control.
begin remote
name Leadtek-RM0010
bits 16
eps 30
aeps 100
one 0 0
zero 0 0
pre_data_bits 16
pre_data 0x8001
gap 423871
toggle_bit_mask 0x0
begin codes
POWER 0x0074
MTS 0x0188
TV/FM 0x0182
VIDEO 0x0189
DISPLAY 0x0166
CH_UP 0x0192
CH_DOWN 0x0193
VOL_DOWN 0x0072
VOL_UP 0x0073
FULLSCREEN 0x0174
TELETEXT 0x0184
SLEEP 0x008E
BOSSKEY 0x0163
MUTE 0x0071
RED 0x018E
GREEN 0x018F
YELLOW 0x0190
BLUE 0x0191
1 0x0002
2 0x0003
3 0x0004
4 0x0005
5 0x0006
6 0x0007
7 0x0008
8 0x0009
9 0x000A
0 0x000B
. 0x0034
FINETUNE+ 0x004E
FINETUNE- 0x004A
PIP 0x00E2
ENTER 0x001C
RECALL 0x0195
BACK 0x019C
PLAY 0x00A4
NEXT 0x0197
TIMESHIFTING 0x0169
STOP 0x0080
REC 0x00A7
SNAPSHOT 0x00EA
end codes
end remote
Je précise que si vous utilisez la même télécommande les touches BOSS KEY, PIP, colorées (vert, rouge, bleue, jaune), ZZ et les touches de magnétoscope seront mal reconnues (mais de toutes façon elles sont peu utiles donc bon...). Quoi qu'il en soit la commande
irw ou avec
irrecord permet d'arranger ça, je laisse ça aux courageux... Exemple :
0000000080010192 00 CH_UP Leadtek-RM0010
... correspond à la ligne :
CH_UP 0x0192
d) Configurer le comportement des touches
À ce stade les codes touches sont correctement associées à des identifiants, mais ça ne rend pas lirc utilisable pour autant (ce serait trop simple...).
Il faut maintenant intercepter ces évènements soit avec irexec, soit avec irxevent et les transmettre vers les différents logiciels lancés. Ceci se fait à l'aide de règles. Elles définissent ce qui va se passer quand on appuie sur telle ou telle touche. Ce qu'il faut retenir :
-
irexec permet de lancer une commande shell
-
irxevent permet de lancer l'équivalent d'une action sur le clavier (éventuellement vers une application particulière).
Ce qui n'est pas forcément intuitif, c'est que les deux logiciels sont susceptibles de lire le même fichier de configuration, par défaut
~/.lircrc. Ils doivent tourner en tâche de fond pour fonctionner (démons). Chacun d'eux retrouve ses billes à l'aide du tag "prog" (voir ci-dessous).
Exemple : ces deux règles sont équivalentes : sous tvtime, la touche f permet de passer en mode plein écran.
a) avec irxevent :
begin
prog = irxevent
button = FULLSCREEN
config = Key f tvtime
end
b) avec irexec :
begin
prog = irexec
button = FULLSCREEN
config = tvtime-command TOGGLE_FULLSCREEN
end
Ces règles sont configurées généralement dans
~/.lircrc. Personnellement, je les ai mises dans
/etc/lirc/lircrc, ce qui permet de les partager pour tous les profils de la machine. Il suffit ensuite de créer un lien symbolique dans son home.
ln -s /etc/lirc/lircrc ~/.lircrc
Quelle que soit la méthode retenue, il ne faut pas perdre de vue que les identifiants touches figurant dans
~/.lircrc et dans
/etc/lirc/lircd.conf doivent concorder sinon il ne se passera rien !
Voici par exemple à quoi ressemble un fichier
~/.lircrc cohérent avec l'exemple que j'ai présenté pour piloter tvtime :
begin
prog = irexec
button = CH_DOWN
config = tvtime-command CHANNEL_DOWN
end
begin
prog = irexec
button = CH_UP
config = tvtime-command CHANNEL_UP
end
begin
prog = irexec
button = VOL_DOWN
config = tvtime-command MIXER_DOWN
end
begin
prog = irexec
button = VOL_UP
config = tvtime-command MIXER_UP
end
begin
prog = irexec
button = FULLSCREEN
config = tvtime-command TOGGLE_FULLSCREEN
end
begin
prog = irexec
button = 1
config = tvtime-command CHANNEL_1
end
begin
prog = irexec
button = 2
config = tvtime-command CHANNEL_2
end
begin
prog = irexec
button = 3
config = tvtime-command CHANNEL_3
end
begin
prog = irexec
button = 4
config = tvtime-command CHANNEL_4
end
begin
prog = irexec
button = 5
config = tvtime-command CHANNEL_5
end
begin
prog = irexec
button = 6
config = tvtime-command CHANNEL_6
end
begin
prog = irexec
button = 7
config = tvtime-command CHANNEL_7
end
begin
prog = irexec
button = 8
config = tvtime-command CHANNEL_8
end
begin
prog = irexec
button = 9
config = tvtime-command CHANNEL_9
end
begin
prog = irexec
button = 0
config = tvtime-command CHANNEL_0
end
Une fois le fichier terminé ou corrigé, on (re)lance
irexec et
irxevent en tâche de fond pour qu'il soit pris en compte :
irxevent -d /etc/lirc/lircrc
irexec -d /etc/lirc/lircrc
e) Lancement automatique
Afin d'éviter d'avoir à les lancer à chaque redémarrage, le plus simple est de les lancer automatiquement quand on se loggue. Par exemple sous KDE, il suffit de créer un fichier
~/.kde/Autostart/remote.sh et de mettre dedans :
#!/bin/sh
#CONF=/etc/lirc/lircrc
CONF="$HOME/.lircrc"
if [ "'ps -eo cmd | grep -c ^irxevent'" -eq 0 ]
then
echo "Starting irxevent..."
irxevent -d $CONF
fi
if [ "'ps -eo cmd | grep -c ^irexec'" -eq 0 ]
then
echo "Starting irexec..."
irexec -d $CONF
fi
Ensuite on met les droits en exécution :
chmod u+x ~/.kde/Autostart/remote.sh
Un exemple plus complet
On peut trouver un exemple assez détaillé sur
http://doc.ubuntu-fr.org/lircrc, pour piloter amarok, kaffeine, totem, ...
Dans le lien ci-dessus, la télécommande propose 4 modes. Un mode est délimité par un bloc (par exemple "begin totem" et "end totem"). Typiquement, le contenu de ~/.lircrc.tvtime n'est pris en compte que lorsque la télécommande est en mode "tvtime", c'est-à-dire après avoir appuyé sur le bouton tv.
Liens
Pour écrire ce tutoriel j'ai utilisé les liens suivants :
http://doc.ubuntu-fr.org/carte_tv_pilote_bttv
http://doc.ubuntu-fr.org/tvtime
http://doc.ubuntu-fr.org/lircrc
http://forums.debian.net/viewtopic.php?t=36134&sid=6b65ceba08d0c2f0b3444a080278c587
Publié par
mamiemando -
Dernière mise à jour le 23 octobre 2011 à 21:46 par mamiemando