Configure your TV card on linux

October 2016

Linux can be used not only for computing, but also for watching TV. For this, the basic requirement is to have administrator rights on the system. All the necessary commands to configure the TV card of Unix should be launched as root from sudo. The first step is to install a TV card via the BTTV module. After this, find the appropriate software to watch TV, as it is needed for TV time installation. The final step is to configure the remote control, which in turn is supported through a lirc module. Lirc modules can be quite complicated sometimes, and it is advisable to install it through a module assistant or by researching the relevant material from the lirc website. After this, one can easily configure the buttons with lirc and start watching your favorite television shows on Linux.

This FAQ is for people using Debian and other distributions which are based on it (Ubuntu, Xandros etc). Most of the following commands will require administrator rights and should be launched as root or via sudo.

This FAQ was made for the Winfast TV 2000 XP card on Debian Lenny and a Leadtek Y0400046 remote control.

Step1: Card Installation

The BTTV module used for this map is provided directly by the linux-image package. Just configure it according to the model of the TV card. To do this we create/fix /etc/modprobe.d/bttv and put in:

options bttv radio=0 card=34 tuner=24 gbuffers=8

Warning: This is specific to the TV card.

So that the module is loaded at startup it also alters /etc/modules by adding in the BTTV module. You can already load the BTTV module by typing:

modprobe bttv

Step 2: TVTime Installation

There are several programs you can use to watch TV in Linux. Sub TVTime seems to work without any problems. To install it:

aptitude update     
aptitude safe-upgrade     
aptitude install tvtime

Now you have to launch TVTime to scan the TV channels. If the tuner and card are properly configured this should not be a problem. Below is a possible configuration that may work for you:
  • Video source: TV
  • Sound Mode: pal-i
  • Standard received: secam

Step 3: Remote control configuration

Configuring the remote through lirc can be quite complicated for beginners. A common mistake is to reference a module that no longer exists on modern kernels: lirc_gpio

Lirc Installation

Start by installing the module that will allow you to manage the remote. It is advisable to go through the Module Assistant, and archives available on the lirc website to help you.

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

In the interface module wizard, choose lirc-modules-source (Get, Build, Install). If everything went well, everything should have installed properly.

Check this is the case by making sure the card is visible when you type the command:

cat /proc/bus/input/devices

You should be given information about the card, for example:

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     

Then use the following code:
lircd -d /dev/input/event6 -H dev/input

This command creates the device /dev/lircd to be used by lircd to receive signals from the remote.

Then correct the file /etc/lirc/hardware.conf so as to have:

#Chosen Remote Control     
REMOTE="Winfast TV2000/XP (card=34)"     

# Arguments which will be used when launching lircd     

#Don't start lircmd even if there seems to be a good config file     

#Try to load appropriate kernel modules     

# Run "lircd --driver=help" for a list of supported drivers.     
# If DEVICE is set to /dev/lirc and devfs is in use /dev/lirc/0 will be     
# automatically used instead     

# Default configuration files for your hardware if any     

Make sure you make any necessary changes to the variables according to the hardware you are using. Then launch lirc:
/etc/init.d/lirc restart

First Test

At this stage it is usually possible to begin to recover the signals from the remote with the IRW. This program can be launched by user. While running, you can press the buttons on the remote control to retrieve the IDs of keys that will be used in lirc configuration files. These identifiers depend on the remote. Here is an example of what you may get by pressing "channel +", "finetune +", "8", "6" and "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

Configure Lirc

You can download ready-made files to configure most available remotes, meaning you don't have to do all this yourself. You can find an archive of files you can use to fill /etc/lirc/lircd.conf here.

Here is how the file for Y0400052 looks:

# Please make this file available to others     
# by sending it to <>     
# 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

If you are feeling confident, you may want to make some adjustments to your file. This often necessary, however.

Configure the behavior of buttons

At this stage the key codes are properly associated with identifiers, but there is still more to do. We must now intercept these events with either irexec, or irxevent, and transmit to them to the software. This is done with rules that define what will happen when you press a particular key. Remember:
- Irexec allows you to run a command shell
- Irxevent can launch the equivalent of an action on the keyboard


These two rules are equivalent. They allow you to press the F key in TVTime to go into full screen mode.

a) with irxevent:

  prog = irxevent     
  button = FULLSCREEN     
  config = Key f tvtime     

b) with irexec:

  prog = irexec     
  button = FULLSCREEN     
  config = tvtime-command TOGGLE_FULLSCREEN     

These rules are usually in ~/.lircrc. You can also put them in /etc/lirc/lircrc to allow them to share all the profiles of the machine. To do this:

ln-s /etc/lirc/lircrc ~/.lircrc 

Here is an example of how the completed file may look:
 prog = irexec     
 button = CH_DOWN     
 config = tvtime-command CHANNEL_DOWN     
 prog = irexec     
 button = CH_UP     
 config = tvtime-command CHANNEL_UP     

 prog = irexec     
 button = VOL_DOWN      
 config = tvtime-command MIXER_DOWN     

 prog = irexec     
 button = VOL_UP      
 config = tvtime-command MIXER_UP     

 prog = irexec     
 button = FULLSCREEN     
 config = tvtime-command TOGGLE_FULLSCREEN     

 prog   = irexec     
 button = 1     
 config = tvtime-command CHANNEL_1     

 prog   = irexec     
 button = 2     
 config = tvtime-command CHANNEL_2     

 prog   = irexec     
 button = 3     
 config = tvtime-command CHANNEL_3     

 prog   = irexec     
 button = 4     
 config = tvtime-command CHANNEL_4     

 prog   = irexec     
 button = 5     
 config = tvtime-command CHANNEL_5     

 prog   = irexec     
 button = 6     
 config = tvtime-command CHANNEL_6     

 prog   = irexec     
 button = 7     
 config = tvtime-command CHANNEL_7     

 prog   = irexec     
 button = 8     
 config = tvtime-command CHANNEL_8     

 prog   = irexec     
 button = 9     
 config = tvtime-command CHANNEL_9     

 prog   = irexec     
 button = 0     
 config = tvtime-command CHANNEL_0     

Once you have finished this, run the following code:

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


To avoid unnecessary hassle every time you restart, you can set irxevent and irexec to run automatically whenever you switch on your machine. For example, in KDE, just create a file ~/.kde/Autostart/ and type in:

#! /bin/sh      
irxevent-d /etc/lirc/lircrc      
irexec-d /etc/lirc/lircrc 

Then add the execution rights:

chmod u + x ~ /.kde/Autostart/

For more details see the Ubuntu forums.

Related :

This document entitled « Configure your TV card on linux » from CCM ( is made available under the Creative Commons license. You can copy, modify copies of this page, under the conditions stipulated by the license, as this note appears clearly.