jueves, 9 de julio de 2009

Lirc y el control a distancia

Esta entrada tiene algo de especial por varias razones, una es que hacía algún tiempo que no escribía en el blog, y la otra es que (por fin!) me he puesto en serio con la configuración del mando a distancia en mi Linux. Culpa de esto la tiene DuKKon, ya que en su blog leí un post sobre Moovida en la que se hacía referencia a la configuración del mando, lo que me animó a retomar esta deuda pendiente que tenía.

Primero explicaremos cómo funciona el mapeo de teclas para el mando, suponiendo que tenemos a nuestra disposición un mando compatible y que el sistema haya reconocido. Sinceramente no creo que haya problemas con esto, ya que para las pruebas tengo el mando de la Avermedia Studio 203 que configuramos allá por febrero para ver la tele en Linux.

Las aplicaciones en las que nos basaremos para utilizar el mando serán, básicamente, irexec e irxevent. La primera de ellas ejecutará comandos asociados a botones en el mando, y la seguna ejecutará eventos, como por ejemplo cualquiera de las teclas o combinaciones de teclas del teclado.

Para este ejemplo hemos utilizado Ubuntu 9.04 con un mando y receptor que el sistema ya había detectado, concretamente la Avermedia AverTv Studio que utilizamos para ver la tele en Linux.

Utilizaremos Lirc (Linux Infrared Remote Control) el cual podemos instalar desde el gestor de paquetes, o visitanto el sitio web Oficial www.lirc.org.

Para ver las señales que nuestro mando está enviando al sistema podemos utilizar el comando irw, que nos mostrará en la consola las teclas que vayamos pulsando.

Código:

juanma@juanma:~$irw
193 0 KEY_CHANNELDOWN event6
174 0 KEY_ZOOM event6
192 0 KEY_CHANNELUP event6
73 0 KEY_VOLUMEUP event6
72 0 KEY_VOLUMEDOWN event6


Ahora que sabemos que el mando envía señales a nuestro sistema, trataremos que el sistema responda a estas señales de la forma que nosotros queramos, para ello editaremos el archivo .lircrc que se encuentra oculto en nuestro directorio home. Si el archivo no existe, lo crearemos con nuestro editor de textos favorito.

Lirc buscará en este archivo los comandos a realizar para cada tecla que tengamos mapeada del mando. Para convertir las pulsaciones del mando en comandos o en órdenes para nuestro HTPC podemos hacerlo de dos formas diferentes y compatibles, a través de irexec o de irxevent.

Irexec ejecutará el comando que configuremos como si lo hicieramos desde la consola, por el contrario irxevent ejecutará una acción concreto, como por ejemplo pulsaciones en el teclado, que nos serán muy útiles para configurar el comportamiento de nuestro mando en cada programa que vayamos a utilizar. Ambos buscarán en el archivo .lircrc de nuestro directorio home las acciones para cada tecla.

El ejemplo que presentamos está configurado para arrancar y manejar XBMC con el mando, tal vez necesiteis configurar otro programa, pero creo este caso servirá para ver cómo funciona. Y a partir de ahí ajustar la configuración a las necesidades de cada uno.

Para arrancar XBMC con el mando en cualquier momento, utiizaremos una orden para irexec.

Código:

begin
prog = irexec
button = KEY_POWER
config = exec xbmc --fullscreen
end



Como veis el formato del archivo no tiene mucho secreto, sólo tendremos que saber el botón al que queremos relacionar la acción (utilizando irw de nuevo) y el comando a ejecutar. Tendremos en cuenta que cada vez que pulsemos esta tecla estaremos ejecutando el comando, incluso cuando estemos utilizando XBMC, por lo que dejaremos esta tecla sólo para arrancar el programa.

Ahora vamos con un ejemplo para emular las teclas con las que navegaremos por XBMC.

Código:

begin
prog = irxevent
button = KEY_CHANNELUP
config = Key Up CurrentWindow
end

begin
prog = irxevent
button = KEY_CHANNELDOWN
config = Key Down CurrentWindow
end



De esta forma cuando pulsemos las teclas de canal arriba/canal abajo estaremos mandando las teclas de arriba/abajo del teclado, para el programa que estemos utilizando en ese momento. Tendremos en cuenta que estamos mandando estas pulsaciones a irxevent, por lo que esta configuración nos valdrá para otros programas, no sólo para XBMC. Además podemos programar acciones diferentes cuando la pulsación de la tecla se repite, muy útil si queremos que se ejecute una acción diferente cuando detectamos una pulsación larga. Además las pulsaciones pueden enviar acciones diferentes dependiendo del programa que estemos ejecutando.

Para completar la configuración podremos definir las teclas para seleccionar un punto de menú, ir atrás, izquierda, derecha, etc... Podemos ver las teclas que podemos mandar a irxevent en irxevents.keys. Incluso podemos mandar combinaciones de teclas.

Si vamos a configurar más de un programa con irxevent podemos crear un directorio .lirc en nuestro /home donde guardar el archivo de configuración de cada programa e incluir los archivos en .lircrc de esta forma:

Código:

include /home/juanma/.lirc/xmbc


Conclusión

Como pasa siempre en Linux, las opciones de configuración son casi infinitas, por lo que la calidad de nuestra configuración dependerá de cuanto afinemos las acciones del mando. Pero tenemos la posibilidad de controlar al completo nuestro sistema desde el mando a distancia, así como cualquier programa que vayamos a utilizar.

5 comentarios:

  1. Olé!
    No sabía de irxevent, ciertamente útil si.
    Muy buen aporte.

    ResponderEliminar
  2. Recuerdo que irexec e irxevent deben estar funcionando para que lirc les envié los comandos del fichero ~/.lircrc O bien los ejecutas manualnualmente o los añades a "Aplicaciones de inicio"

    Un saludo!

    ResponderEliminar
  3. Hola Dukkon, gracias por los comentarios. Me has pillado fuera de juego por las vacaciones.

    Sobre el tema del mando, creo que con un poco de dedicación en la configuración del mando se pueden obtener resultados muy buenos. Ahora quiero hacer pruebas con una sintonizadora más reciente, espero que lo antes posible.

    Un saludo.

    ResponderEliminar
  4. Genial el tutorial, he conseguido que me funcione un Conceptronic CMMRC con Ubuntu 9.10 pero tengo un problema.

    He instalado el "Infrared Remote Control" de Gnome y allí detecta perfectamente los botones que voy pulsando pero cuando inicio XBMC no responde a ningún botón ¿alguna idea o sugerencia de por donde empezar a mirarlo? (he consultado los foros de XBMC pero no saco mucho en claro)

    Por otra parte me gustaría comentaros una cosa: he puesto el script bash en "Aplicaciones de Inicio" pero no funciona (supongo que es pq para chutar necesitan que se ejecuten con privilegios de root). ¿Esto como se puede solucionar?

    ResponderEliminar
  5. Hola Jordi, no recuerdo bien si se puede hacer desde el entorno gráfico, tal vez si, pero te comento. Hay un bit en los permisos de los archivos de Linux llamado SUID, que permite ejecutar un archivo como root a cualquier. Con esto podrías ejecutar ese script al inicio sin tener problemas de permisos.

    Para activar este bit debes hacer un chmod +s al script. Asegurate de que el archivo pertenece a root y que tiene los permisos correctos (775, por ejemplo).

    Hay que tener cuidado al utilizar este bit en los permisos porque podemos cometer un error que comprometa la seguridad del sistema.

    En cuanto a lo del mando, teniendo en cuenta los datos que das en el comentario, no te puedo dar una solución. Como idea comprueba que estás utilizando irxevent para pasarle las teclas a Xbmc cuando se este ejecutando.

    Saludos.

    ResponderEliminar