Después de actualizar mi media center a Debian Wheezy, lo único que me ha dado problemas es el mando a distancia. De repente parece que solo funcionan algunas teclas :-(
Después de investigar, parece que a partir de la versión 2.6.32 del kernel, han incluido los mandos a distancia para que se detecten como un dispositivo de entrada cualquiera. Con lo que sin ninguna configuración adicional funcionan como si fueran un teclado.
A primera vista esto puede estar muy bien, pero a mi me interesa seguir usando Lirc, ya que me permite hacer la correspondencia de teclas del mando a distancia de forma más personalizada, según el programa que esté usando. Además, como he dicho antes, parece ser que este mando no tiene mapeadas correctamente todas las teclas, y necesitaría realizar cierta configuración con el comando "ir-keytable".
A continuación, a modo de referencia, pongo los pasos a seguir para configurar un mando a distancia desde cero. El mando a distancia a configurar es el modelo "RM-FP" de Avermedia:
Aunque con un poco de trampa, porque lo que utilizo es un mando a distancia universal, programado para que pueda controlar la televisión y el media center.
El mando a distancia universal que uso es el modelo "Essence 4 (URC-7140)" de One For All:
Este mando universal permite copiar los códigos que envía el mando original mediante su función de aprendizaje. Con lo que, aunque no era compatible con el mando de Avermedia, he podido grabar el código de cada tecla, y así sustituirlo con el mando universal.
El primer paso es configurar el fichero "/etc/lirc/hardware.conf". Para ello se debe buscar en que dispositivo se ha referencia el mando a distancia. Para ello ejecutamos el siguiente comando:
cat /proc/bus/input/devices
Ahora podemos buscar el dispositivo dentro del directorio "/dev/input". En mi caso el fichero de configuración queda como sigue:
# /etc/lirc/hardware.conf
#
# 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
#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false
#Try to load appropriate kernel modules
LOAD_MODULES=true
# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="devinput"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/input/by-path/pci-0000:00:04.1-usb-0:6-event-ir"
MODULES=""
# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""
Para crear el fichero "lircd.conf" para nuestro mando a distancia copiamos el fichero de configuración genérico y reiniciamos el servicio, con el siguiente comando:
cp /usr/share/lirc/remotes/devinput/lircd.conf.devinput /etc/lirc/lircd.conf
/etc/init.d/lirc restart
Ahora, con el siguiente comando se deberían poder ver los códigos que genera el mando a distancia con cada tecla:
irw
Es posible que algunas teclas no muestren ningún código. Aquí es donde entra en juego el comando "ir-keytable". Al ejecutarlo nos debería mostrar la información del mando a distancia. Por ejemplo:
Found /sys/class/rc/rc0/ (/dev/input/event3) with:
Driver af9015, table rc-avermedia-m135a
Supported protocols: NEC
Enabled protocols: NEC
Repeat delay = 500 ms, repeat period = 125 ms
Con estos datos, podemos usar este mismo comando para ver los códigos que genera cada botón del mando a distancia, al estilo del comando "irw", pero con la diferencia que debería mostrar el código de todas las teclas que pulsemos. Debemos ejecutar lo siguiente:
ir-keytable -s rc0 -t
A su vez, si no aparecen los códigos de las teclas del mando pulsadas, puede ser que haya un programa capturando las teclas de Lirc, o que el servidor de X Windows esté usando el mando a distancia como dispositivo de entrada estándar, e impida que lleguen los códigos al comando "ir-keytable". Puedes comprobarlo parando Lirc con el siguiente comando:
/etc/init.d/lirc stop
Si ahora funciona se puede seguir con la configuración del mando. Si no se puede probar a parar las X:
/etc/init.d/kdm stop
Y si ahora sí funciona el comando "ir-keytable" debemos añadir lo siguiente al fichero de la ruta "/usr/share/X11/xorg.conf.d/10-evdev.conf":
Section "InputClass"
Identifier "IR-receiver inside an USB DVB receiver"
MatchProduct "IR-receiver inside an USB DVB receiver"
MatchIsKeyboard "true"
Option "Ignore" "true"
EndSection
El identificador del mando hay que bucarlo ejecutando el siguiente comando:
cat /proc/bus/input/devices
Ahora podemos arrancar de nuevo las X y ver que el comando "ir-keytable" funciona:
/etc/init.d/kdm start
El siguiente paso es el más importante, que consiste en modificar la tabla de correspondencia de teclas que tiene configurado el kernel. En mi caso está en el fichero "/lib/udev/rc_keymaps/avermedia_m135a".
Para adaptar adecuadamente este fichero al mando a distancia en concreto, se debe ir viendo el código asociado a cada tecla. Para lo que se puede usar el siguiente comando:
ir-keytable -s rc0 -t
Una vez editado el fichero, para que los cambios surtan efecto en caliente, hay que ejecutar los siguientes comandos.
ir-keytable -c
ir-keytable -w /etc/rc_keymaps/rc0_avermedia
La siguiente vez que se reinicie la máquina, la nueva tabla de códigos del mando a distancia se cargará automáticamente.
El contenido final del fichero "/lib/udev/rc_keymaps/avermedia_m135a" es el siguiente:
0x0205 KEY_1
0x0206 KEY_2
0x0207 KEY_3
0x0209 KEY_4
0x020a KEY_5
0x020b KEY_6
0x020d KEY_7
0x020e KEY_8
0x020f KEY_9
0x0211 KEY_0
0x0213 KEY_PREVIOUS
0x0204 KEY_EPG
0x0215 KEY_MENU
0x0212 KEY_SCREEN
0x021e KEY_LEFT
0x021f KEY_RIGHT
0x0303 KEY_UP
0x0302 KEY_DOWN
0x020c KEY_OK
0x0201 KEY_EXIT
0x0210 KEY_INFO
0x021d KEY_REWIND
0x0218 KEY_PLAY
0x021a KEY_PAUSE
0x021c KEY_FORWARD
0x021d KEY_REWIND
0x021b KEY_STOP
0x0219 KEY_RECORD
0x021c KEY_FORWARD
Fichero de configuración para XBMC ubicado en la ruta $HOME/.xbmc/userdata/Lircmap.xml
<lircmap>
<remote device="/etc/lirc/lircd.conf">
<reverse>KEY_REWIND</reverse>
<play>KEY_PLAY</play>
<pause>KEY_PAUSE</pause>
<forward>KEY_FORWARD</forward>
<stop>KEY_STOP</stop>
<record>KEY_RECORD</record>
<left>KEY_LEFT</left>
<right>KEY_RIGHT</right>
<up>KEY_UP</up>
<down>KEY_DOWN</down>
<select>KEY_OK</select>
<back>KEY_EXIT</back>
<menu>KEY_MENU</menu>
<title>KEY_EPG</title>
<info>KEY_INFO</info>
<display>KEY_SCREEN</display>
<one>1</one>
<two>2</two>
<three>3</three>
<four>4</four>
<five>5</five>
<six>6</six>
<seven>7</seven>
<eight>8</eight>
<nine>9</nine>
<zero>0</zero>
</remote>
</lircmap>
Fichero de configuración para MythTV ubicado en la ruta $HOME/.lircrc
begin
prog = mythtv
button = 1
config = 1
end
begin
prog = mythtv
button = 2
config = 2
end
begin
prog = mythtv
button = 3
config = 3
end
begin
prog = mythtv
button = 4
config = 4
end
begin
prog = mythtv
button = 5
config = 5
end
begin
prog = mythtv
button = 6
config = 6
end
begin
prog = mythtv
button = 7
config = 7
end
begin
prog = mythtv
button = 8
config = 8
end
begin
prog = mythtv
button = 9
config = 9
end
begin
prog = mythtv
button = 0
config = 0
end
begin
prog = mythtv
button = source
config = Esc
end
begin
prog = mythtv
button = menu
config = M
end
begin
prog = mythtv
button = 16_ch_prev
config = I
end
begin
prog = mythtv
button = ch_up
config = Up
end
begin
prog = mythtv
button = ch_down
config = Down
end
begin
prog = mythtv
button = vol_down
config = Left
end
begin
prog = mythtv
button = vol_up
config = Right
end
begin
prog = mythtv
button = fullscreen
config = Return
end
begin
prog = mythtv
button = epg
config = S
end
begin
prog = mythtv
button = play
config = P
end
begin
prog = mythtv
button = record
config = R
end
begin
prog = mythtv
button = stop
config = Esc
end
begin
prog = mythtv
button = pause
config = P
end
begin
prog = mythtv
button = ch_rtn
config = H
end
begin
prog = mythtv
button = teletext
config = T
end
begin
prog = mythtv
button = display
config = W
end
begin
prog = mythtv
button = red
config = ,
end
begin
prog = mythtv
button = yellow
config = .
end
begin
prog = mythtv
button = audio
config = +
end
begin
prog = mythtv
button = mute
config = -
end
Bibliografía:
http://www.linuxtv.org/wiki/index.php/AVerMedia_AVerTV_Digi_Volar_X_(A815)
http://www.math.ucla.edu/~jimc/documents/bugfix/17-ir-keyboard.html
http://www.mythtv.org/wiki/LIRC
http://wiki.xbmc.org/index.php?title=HOW-TO:Setup_Lirc
http://forum.xbmc.org/showthread.php?tid=101151
http://askubuntu.com/questions/277135/ir-remote-button-being-recognised-by-ir-keytable-but-not-by-irw
http://forum.xbmc.org/showthread.php?tid=132160
--