Configurer sa carte tv et sa télécommande sous linux
Configurer sa carte tv et sa télécommande sous linux

- Étape 1 : Installation de la carte
- Étape 2 : Installation de tvtime
- Étape 3 : Configuration de la télécommande
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
Ce document intitulé « Configurer sa carte tv et sa télécommande sous linux » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.