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

mamiemando Messages postés 33432 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 décembre 2024 - 30 mai 2022 à 04:23

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 ajoutant à la fin de celui-ci la ligne
bttv
. On peut d'ores et déjà charger le module
bttv
en tapant :

sudo modprobe bttv


Une fois le module chargé, un device associé à la carte TV s'appelle (par exemple
/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 :
sudo apt update  
sudo apt 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 :

apt install oss-compat


Pour les noyaux antérieurs, essayez d'installer oss4-dkms, et redémarrez.

Étape 3 : Configuration de la télécommande

Pour que la télécommande soit prise en charge, il faut installer et configurer
lirc
.

L'utilisation de lirc est assez complexe pour le néophytes et les tutoriels sont souvent obsolètes (en particulier ceux qui évoquent le module
lirc_gpio
, qui n'existe plus) ou complexes à comprendre.

Installation

On commence par installer le module qui va permette la prise en charge de la télécommande. Il est recommandé de passer par module-assistant, car les archives disponibles sur le site de lirc ont peu de chance de compiler à moins d'avoir compilé soi-même son propre noyau.

apt install module-assistant lirc-modules-source lirc-x module-assistant


Dans l'interface de
module-assistant
, choisir
lirc-modules-source
, puis 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é, ce qu'on peut contrôler avec le commande :

cat /proc/bus/input/devices  


Exemple :
...  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, qui peut différer en fonction de votre installation (dans cet exemple,
event6
). On lance LIRC on lui passant le device adéquat :

lircd -d /dev/input/event6 -H dev/input  


Cette commande crée le device
/dev/lircd
qui sera utilisé par le démon
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
:

sudo service lirc restart


Remarque : si suite à une mise à jour noyau
lirc
ne fonctionne plus, il est possible que le device associé à
lirc
ait changé. Cela se vérifie facilement avec irw, qui ne parviendra bien entendu plus à se connecter (que ce soit en utilisateur ou en root puisque lirc ne pointe pas sur le bon device !)

Exemple :
(mando@aldur) (~) $ irw  
connect: Connection refused


Dans ce cas, il suffit de reprendre l'étape "Installation de lirc" en corrigeant les différents fichiers de configuration, puis de relancer le service
lirc
.

Premiers tests

À ce stade, on doit pouvoir récupérer les signaux de la télécommande avec
irw
. Ce programme peut être lancé en utilisateur. Pendant qu'il tourne, appuyez sur les touches de la télécommande pour récupérer les identifiants de touches correspondant (en gras ci-dessous), qui seront par la suite utilisés dans les fichiers de configuration
lirc
. Ces identifiants dépendent de la télécommande.


Exemple : voici ce qui est apparu dans mon cas 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.

Remarque : À 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.

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 cette archive qui contient de très nombreux fichiers pouvant servir à remplir
/etc/lirc/lircd.conf


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


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 !). Pour les plus courageux, on peut arranger cela avec les commandes irw et irrecord...

Exemple :
0000000080010192 00 CH_UP Leadtek-RM0010  
correspond à la ligne
CH_UP 0x0192  
.

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 (démons) pour fonctionner. 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 dans
~/.lircrc
. On peut au besoin partager cette configuration entre plusieurs utilisateurs en la déportant dans
/etc/lirc/lircrc
, puis chaque utilisateur désirant l'utiliser n'a plus qu'à créer un lien symbolique :
ln -s /etc/lirc/lircrc ~/.lircrc


Attention : 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


À chaque fois que ce fichier est modifié, il faut relancer irexec et irxevent en tâche de fond afin de prendre en compte les modifications :

irxevent -d /etc/lirc/lircrc  
irexec -d /etc/lirc/lircrc  

Lancement automatique

Afin d'éviter de devoir
irexec
et
irxevent
à chaque redémarrage, on peut les lancer automatiquement. Par exemple, sous KDE, il suffit de créer le script ~/.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  


Puis on transforme ce script en exécutable :

chmod u+x ~/.kde/Autostart/remote.sh  

Un exemple plus complet

On peut trouver un exemple assez détaillé dans la documentation Ubuntu pour piloter d'autres logiciels.

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" pour le logiciel "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.

Références

https://doc.ubuntu-fr.org/carte_tv_pilote_bttv
https://doc.ubuntu-fr.org/tvtime
https://doc.ubuntu-fr.org/lircrc
https://forums.debian.net//viewtopic.php?t=36134&sid=6b65ceba08d0c2f0b3444a080278c587