Configurar sua placa TV e seu controle remoto no Linux

Dezembro 2016


Esta dica é para as pessoas que utilizam o Debian ou outra distribuição que se baseie no Ubuntu, Xandros, etc. Geralmente, os comandos abaixo requerem direitos de administrador e devem ser iniciados como root, ou através de um sudo.

Esta ficha foi realizada com uma placa Winfast TV 2000 XP no Debian lenny e um controle remoto Leadtek Y0400046.

Etapa n° 1: Instalação da placa

O módulo bttv utilizado para esta placa é fornecido pelo pacote Linux/imagem. Basta configurá-lo de acordo com o modelo da placa TV. Para isso, criamos/corrigimos o arquivo /etc/modprobe.d/bttv.conf e colocamos nele:
opções bttv radio=0 card=34 tuner=24 gbuffers=8

Atenção: Isto é típico da placa TV; assim sendo, é preciso corrigi-lo, caso você use outro modelo de placa.

Para que o módulo seja carregado também corrigimos /etc/módulos, adicionando o módulo bttv. Agora, já podemos carregar o módulo bttv, digitando:
modprobe bttv

No exemplo desta dica, o dispositivo associado à placa TV chama-se /dev/video0.

Etapa n° 2: Instalação do tvtime

Existem vários softwares para assistir televisão no Linux. Eu testei o KdeTV mas, infelizmente, com a minha placa, uma faixa verde aparece na borda direita da imagem em modo tela cheia por uma razão desconhecida. Porém, no tvtime, não ocorreu nenhum problema deste tipo, tudo correu bem.

Para instaá-lo:
aptitude update   
aptitude safe-upgrade
aptitude install tvtime

Agora, é só iniciar o TVTime e escanear os canais (tudo pode ser feito com o mouse). Se o turner e a placa forem configuradas corretamente no momento de carregar o módulo bttv, não haverá mais problemas.

No exemplo:
- fonte de vídeo: televisão
- modo sonoro: pal-i
- norma de recepção: secam

Se você não tiver som no tvtime e não puder consertá-lo

Talvez seja porque você está usando um kernel recente OSS, que provavelmente não é suportado. Você pode encontrar o número da versão do seu kernel com o comando:
uname -r

Se você utilizar um kernel => 3.0.0 instale o oss-compat e reinicie:
aptitude install oss-compat

Para os antigos núcleos (kernel), tente instalar o oss4-dkms, e reinicie.

Etapa n° 3 : Configuração do controle

Aqui, tudo se complica. Para que o controle remoto seja suportado, é preciso passar pelo lirc.

No entanto, o uso do lirc é bastante complexo para os novatos e alguns tutoriais, que eu li, não são nem muito simples, nem foram atualizados. Em geral, o problema se refere ao módulo lirc_gpio, que não existe mais nos núcleos recentes.

a) Instalação do lirc

Para começar, instalamos o módulo que vai permitir o suporte do controle remoto. Recomendo passar pelo editor-assistente pois os arquivos disponíveis no site do lirc têm poucas chances de compilar, a não ser que você recompile seu próprio núcleo (kernel).
aptitude install module-assistant lirc-modules-source lirc-x module-assistant   

Na interface do editor-assistente, escolha lirc-editor-fonte (Get, Build, Install). Se tudo correr bem, o editor-assistente deve criar um módulo, empacotá-lo na forma de um pacote Debian no /usr/src, e o instalá-lo.

Assim, se tudo der certo, a placa aparecerá quando digitarmos o comando abaixo:
cat /proc/bus/input/devices   

No exemplo :
...   
I: Bus=0001 Vendor=107d Product=6606 Versão=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
...

Verifique o dispositivo ao qual o controle remoto está associado, pois ele pode ser diferente em outros casos. Cabe à você adaptá-lo ao seu caso. No comando que segue, considero que seja o event6.
lircd -d /dev/input/event6 -H dev/input   

Este comando permite criar o device /dev/lircd que será utilizado para receber os sinais emitidos pelo controle remoto.

Em seguida corrigimos o arquivo /etc/lirc/hardware.conf para poder obter:
#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=""

Pense em corrigir as variáveis DEVICE e REMOTE, de acordo com o seu hardware!

Em seguida, reinicie o lirc:
/etc/init.d/lirc restart

Observação: se, depois de uma atualização, o núcleo lirc não funcionar mais, pode ser que o device (dispositivo) associado ao lirc tenha sido trocado. Neste caso, o irw não conseguirá se conectar mais (seja como usuário ou em root já que o lirc, não aponta para o dispositivo correto!)
(mando@aldur) (~) $ irw   
connect: Connection refused

Neste caso, basta retomar a etapa "a) Instalação de lirc" corrigindo os diferentes arquivos de configuração, e reiniciar o lirc.

b) Primeiros testes

Nesta altura, geralmente começamos a recuperar os sinais do controle remoto com o comando irw. Este programa pode ser lançado em usuário. Enquanto ele roda, podemos pressionar as teclas do controle remoto para recuperar os identificadores de teclas (em negrito, abaixo) que serão usados pelos arquivos de configuração lirc. Estes identificadores dependem do controle remoto. No nosso exemplo, veja o que aparece quando pressionamos as teclas "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

Agora, é preciso dizer ao lirc como processar estes sinais.

Observação: Quando o lirc_gpio existia, este módulo criava um device /dev/lirc e era possível usar o mode2 para recuperar os códigos das teclas. Agora, este device não existe mais e o comando mode2 também não funciona mais.

c) Configurar o lirc

Podemos recuperar no site do lirc um mapa de controle remoto, mais ou menos utilizável. Aqui, podemos baixar um arquivo que contenha vários arquivos que podem servir para preencher /etc/lirc/lircd.conf http://www.lirc.org/remotes.tar.bz2

No exemplo, foi usado o controle remoto Y0400052, pois não tive coragem de reconstruir um outro. Veja como ficou o arquivo
/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

Note-se que se você utilizar o mesmo controle remoto, as teclas BOSS KEY, PIP, coloridas (verde, vermelha, azul, amarela), ZZ e as teclas de gravador de vídeo serão pouco reconhecidas (mas, de qualquer maneira, elas não são muito úteis). De qualquer maneira, os comandos irw ou irrecord retificam isso.

Exemplo:
0000000080010192 00 CH_UP Leadtek-RM0010

... corresponde à linha:
CH_UP 0x0192


d) Configurar o comportamento das teclas

A esta altura, os códigos teclas são associados corretamente aos identificadores, mas isto não torna o lirc utilizável (seria fácil demais...).

Agora, é preciso interceptar estes acontecimentos, seja com o irexec, ou com o irxevent, e transmiti-los para os diversos softwares iniciados. Isso é feito através de regras. Elas definem o que vai se passar quando pressionamos tal ou tal tecla. Na verdade, o que devemos lembrar é que:
- irexec permite iniciar um comando shell
- irxevent permite iniciar o equivalente a uma ação no teclado (eventualmente, para uma aplicação específica).

O que não é exatamente intuitivo, é que os dois softwares podem ler o mesmo arquivo de configuração, por padrão ~/.lircrc. Mas, eles devem rodar em plano de fundo para funcionar. Cada um deles encontra suas bolinhas com a ajuda da marcação "prog" (veja abaixo).

Exemplo: estas duas regras são equivalentes, no tvtime, a tecla "f" permite passar para o modo de tela cheia.

1) com o irxevent :

begin
prog = irxevent
button = FULLSCREEN
config = Key f tvtime
end

2) com o irexec:
begin   
prog = irexec
button = FULLSCREEN
config = tvtime-command TOGGLE_FULLSCREEN
end

Em geral, estas regras são configuradas no ~/.lircrc. No exemplo, foi colocado no /etc/lirc/lircrc, o que permite compartilhá-las em todos os perfis da máquina. Em seguida, basta criar um link simbólico na sua home.
ln -s /etc/lirc/lircrc ~/.lircrc

Qualquer que seja o método selecionado, não esqueça que os identificadores de teclas que aparecem no ~/.lircrc e no /etc/lirc/lircd.conf devem concordar, senão, nada feito!

Veja como fica um arquivo ~/.lircrc coerente com o exemplo apresentado para pilotar o 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

Depois de terminar ou corrigir o arquivo, reinicie o irexec e o irxevent em plano de fundo para que ele seja considerado:
irxevent -d /etc/lirc/lircrc   
irexec -d /etc/lirc/lircrc

e) Lançamento automático

Para não precisar iniciá-los em cada arranque, o mais simples é lançá-los, automaticamente, no login. Por exemplo, no KDE, basta criar um arquivo ~/.kde/Autostart/remote.sh e colocar nele:
#!/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

Em seguida, colocamos os direitos em execução :
chmod u+x ~/.kde/Autostart/remote.sh

Um exemplo mais completo

Podemos encontrar um exemplo bastante detalhado no http://doc.ubuntu-fr.org/lircrc, para pilotar amarok, kaffeine, totem, etc.

No link acima, o controle remoto propõe 4 modos. Um modo é delimitado por um bloco (por exemplo, "begin totem" e "end totem"). O conteúdo de ~/.lircrc.tvtime só e considerado quando o controle remoto estiver em modo "tvtime", ou seja, depois de pressionar o botão TV.

Tradução feita por Ana Spadari

Veja também :
Este documento, intitulado « Configurar sua placa TV e seu controle remoto no Linux »a partir de CCM (br.ccm.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.