jueves, 10 de septiembre de 2009

Bluetooth y Linux se llama BlueProximity

Antes de empezar nos aseguraremos de que tenemos el material necesario, que no es más que un dispositivo Bluetooth (por ejemplo uno USB), un teléfono móvil, y nuestra distribución Linux preferida, en este caso Ubuntu 9.04.

El primer paso será comprobar que nuestro adaptador Bluetooth funciona correctamente, tan fácil como conectarlo y ver que en la barra de tareas de nuestro Ubuntu aparece el logo del Bluetooth.

Instalación

Como es la primera vez que oimos hablar de BlueProximity, lo más probable es que no tengamos instalados ni la aplicación ni los paquetes que se necesitan para que funcione. Para instalar abriremos el gestor de Paquetes Synaptic que nos facilitará el trabajo, de paso que resolverá las dependencias con otros paquetes que se necesiten.

Tan sólo buscando por blueproximity nos aparecerá la aplicación a instalar y el sistema se encargará de instalar también todo lo necesario para que funcione al 100%.

Configuración

Después de instalar ejecutaremos BlueProximity, lo que nos mostrará otro icono de Bluetooth en la barra de tareas, pero este con una llave, que en principio será de color rojo.

Abrimos la aplicación y nos encontramos con una ventana como ésta.



Para emparejar el adaptador USB con nuestro móvil exploraremos en busca de dispositivos con el Bluetooth conectado y seleccionaremos el que se corresponda con el nuestro.



Ahora que tenemos seleccionado el móvil con el que queremos relacionar nuestro equipo, lo seleccionamos y pulsamos Usar el dispositivo seleccionado.

Si en el móvil no notamos ningún tipo de reacción, podemos buscar canales en el dispositivo, lo que irá por cada uno de los puertos del móvil para encontrar un canal disponible. En este paso seleccionaremos un canal y tendremos que configurar una clave de paso para emparejar los dispositivos. Ahora si, nuestro móvil nos preguntará por esa clave, y al confirmarla ya podremos utilizar BlueProximity con normalidad.

Ahora tenemos que configurar las distancias, tanto para el bloqueo como para el desbloqueo. Esto se llama así por la finalidad inical de BlueProximity que os contaba antes, que era la de bloquear/desbloquear el PC. Como es normal, podemos decidir estos parámetros, aquí tenemos la pantalla para hacerlo:



Todavía más importante que las distancias en las que reaccionará nuestro HTPC a la presencia de nuestro móvil, es que hará cuando lo detecte o deje de detectar. Podremos configurar un comando que queramos para cada una de las acciones.



Para hacer una prueba rápida podemos escribir firefox www.todohtpc.com en el comando de desbloqueo, y ver como se abre un navegador con nuestra página preferida al acercarnos al adaptador Bluetooth. Ya tenemos BlueProximity funcionando al 100% !!

Descomprimir video por hardware en Linux: VDPAU

Una de las finalidades de nuestro HTPC Linux será la de poder ver videos en alta definición. Hace tiempo que oimos que las tarjetas gráficas pueden descomprimir el video liberando al procesador de tanta carga. Si tenemos un procesador lo suficientemente potente como para hacer el trabajo él sólo, tal vez no nos hayamos parado a pensar en utilizar esta característica de la tarjeta gráfica. Si lo que tenemos es un equipo con una gráfica capaz de descomprimir el vídeo y un procesador no tan potente, el hecho de utilizar la descompresión por hardware puede ser la diferencia entre poder y no poder ver una película en alta definición. Sea cual sea el caso, vamos a ver como se hace.

Lo primero que tenemos que saber es que tenemos entre manos, y se trata de VDPAU (Video Decode and Presentation API for Unix), un API desarrollada por Nvidia para decodificar el video en las tarjetas de la marca. En este enlace se pueden ver las características de VDPAU y las tarjetas gráficas y aplicaciones compatibles.

Entorno de pruebas

Para hacer las pruebas hemos utilizado una instalación básica de Ubuntu 9.04 en un equipo con un procesador de doble núcleo 5200+ de AMD, 2GB de RAM y una tarjeta gráfica 8600GT de Nvidia. La película elegida es Transformers en una resolución 1080p en formato H.264 (.mkv).

Instalación

Como vamos a trabajar sobre una versión recien instalada de Ubuntu en principio no estaremos utilizando los drivers de la tarjeta gráfica, ya que no son software libre, por lo que tendremos que autorizar al sitema a ello. En la sección de Administración podemos activar los controladores. Tendremos que reiniciar para que se apliquen los cambios. Tras el reinicio podremos ver en Administración como han cambiado los drivers de video y son ahora de Nvidia. Probablemente tengamos disponible también el panel de control de Nvidia.

Ahora pasamos a instalar el API de VDPAU, dirigiéndonos al gestor de paquetes (Administración/Gestor de paquetes Synaptic) y buscando en el campo de texto por VDPAU. Obtendremos resultados del estilo nvidia-180-libvdpau-dev. Instalamos el paquete y pasamos a la instalación de un reproductor compatible con VDPAU: Mplayer.

Para instalar Mplayer de forma más sencilla abriremos una consola e iremos ejecutando los siguientes comandos de uno en uno. Cada uno de ellos puede tardar algo de tiempo en terminar, por lo que tendremos que tener algo de paciencia. El último de los comandos tendremos que ejecutarlo como root, por lo que nos pedirá la contraseña de superusuario del sistema.

$sudo apt-get install build-essential subversion
$sudo apt-get build-dep mplayer
$svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
$ cd $HOME/mplayer
$ ./configure
$ make
$ sudo make install

En el momento en que tengamos instalado Mplayer ya podremos utilizar VDPAU en la visualización a través del reproductor. Calculamos que todo el proceso de instalación puede tardar entre 20-30 minutos, por lo que además de fácil es bastante rápido empezar a ver videos en alta definición en nuestro Linux. Pero ¿Habrá valido la pena tanto esfuerzo? Vamos a ver los resultados.

Pruebas realizadas

Las dos primera imágenes muestran la llamada a Mplayer sin utilizar VDPAU en dos escenas diferentes de la película. Podemos observar en el rendimiento del procesador que siempre almenos uno de los dos núcleos sobrepasa el 50% en el mejor de los casos. Vemos ahora las ventajas que nos ofrece VDPAU.





En estas dos capturas de las mismas escenas que las anteriores, podemos ver que el rendimiento necesario para reproducir el archivo es muy inferior. Salvo algunos picos en la carga, ambos núcleos del procesador se mantienen siempre por debajo del 50%, incluso llegando a quedarse en algún momento en el 0% uno de ellos.





Las ventajas son muy importantes utilizando VDPAU, por lo que es muy recomendable si disponemos de una gráfica compatible.

Xbmc y VDPAU

Como nuestro equipo es un HTPC, no podemos pasar por alto que los archivos de video no se ejecutarán directamente a través del reproductor, sino de un mediacenter. Dado que Xbmc es compatible con VDPAU, vamos a ver como configurarlo para que haga uso del API y la mejora en el rendimiento también a través de este famoso mediacenter.

Para utilizar VDPAU tan sólo tenemos que dirigirnos a la sección de ajustes de reproductor de Xbmc (Settings/Video/Player) y seleccionar Render method como VDPAU. Así de fácil.



Las mejoras siguen siendo notables reproduciendo desde Xbmc.

Sin VDPAU:



Con VDPAU:



Conclusión

Para terminar decir simplemente que, teniendo en cuenta lo que ganamos y que no hace falta entrar en configuraciones complejas para obtener resultados... ¿Que haces que no aceleras el video por hardware?.

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.