domingo, 17 de enero de 2010

Usando el mando a distancia de la PS3 para el HTPC

Estamos que lo tiramos de hocique ultimamente. Esto es interesantón. Y es que manejar el HTPC con el teclado inalambrico, aunque se hace bien pero no es del todo cómodo. Así que tocaba buscar un mando a distancia. Por lo que veo hay muchos modelos destinados al mundo este de los HTPC. Es más, teniendo un receptor de infrarrojos nos serviría cualquier mando universal porque los botones se pueden mapear a posteriori. Todo es gracias al proyecto lirc que se encarga de detectarlos. Antes de meterse en más complicaciones convendría ver desde su propia página si el que vamos a comprar es uno de los modelos soportados.

Pero como siempre hay que ser un poco tocapelotas, yo he optado por otra solución. Y es que los infrarrojos nunca me han gustado. Así que buscando una opción bluetooth no pude encontrar nada mejor que el mando de PS3. Y es que aparte de que no es necesario apuntar a ningún punto en concreto, el adaptador bluetooth tiene mas uso que el adaptador infrarrojo y si por un casual no fuera capaz de hacerlo funcionar, me valdría para la consola. Pues nada, 21 euritos del mando y un adaptador bluetooth de estos baratos que van de fabula.

El adaptador lo reconoce Ubuntu sin problemas. Bueno, ahora viene lo jodido. Aclaro que he seguido unos 4 manuales distintos por trozos que a veces no me funcionaban hasta conseguir que chute. Todo esto es con la ultima versión de XBMC (esto es lo de menos), BDremote-ng 0.5 y Ubuntu 9.10 Karmic Koala. Que luego no hay mas que manuales de mierda que te pones a seguirlos y son para Ubuntu Dapper.

Instalamos unos cuantos paquetes de los repositorios:
sudo apt-get install lirc bluez-compat bluez-hcidump cmake libbluetooth-dev

Bueno ahora pasamos a emparejar el mando con el bluetooth. Esto le da problemas a mucha gente. Con el interfaz gráfico peta al pedirte que metas un pin. Lo hacemos desde consola. Para que el mando se ponga en modo visible y podamos emparejarlos hay que pulsar y mantener unos 5 segundos el botón Enter y el botón Start a la vez. Metemos primero el comando y acto seguido pulsamos los botones:
hocicon # hcitool scan
Scanning ...
00:19:C1:5A:F1:3F BD Remote Control

De este modo sacamos la dirección del mando a distancia. A continuación emparejamos el mando con nuestro adaptador:
hidd --connect 00:19:C1:5A:F1:3F
Es posible que esto de error. Si nos pasa hay que volver a pulsar Start+Enter como antes mientras lo hacemos, hasta que no muestre ningún mensaje.

Este vinculo se supone que ya queda puesto pa siempre. De hecho no se que carajo habrá que hacer si quiero utilizarlo para manejar la consola.

Ahora nos vamos a bajar y compilar el bdremote-ng. Hay parte sacada de su wiki, pero no me funcionó practicamente nada. Nos creamos una carpeta para meterlo si queremos y nos bajamos la ultima versión que haya de http://code.google.com/p/bdremote-ng/downloads/list , cuando yo lo hice era la 0.5. La descomprimimos y hacemos lo siguiente.

cd bdremote-ng-0.5/build
./gen.sh
cd linux
sudo make
sudo cp bdremoteng /usr/local/bin

Cosas importantes de esto. A mi me petaba el compilador CMake. No estaba usando la 0.5 sino la RC. Al cambiar de versión todo chutó bien. Lo importante es el ejecutable bdremoteng que nos crea y que hemos copiado a /usr/local/bin

Siguiente paso es poner sudo gedit /etc/rc.local para que nos haga unas movidas al arrancar el equipo. Pegamos dentro del archivo (CAMBIA LA MAC POR LA TUYA DE ANTES), antes del exit 0:

/etc/init.d/bluetooth stop
sleep 1
/usr/local/bin/bdremoteng -a 00:1E:3D:1A:E0:21 -p 8888 -t 20 &
sleep 1
# only required on Ubuntu 9.10, no /var/run/lirc directory on reboot
mkdir /var/run/lirc
/usr/sbin/lircd -H null --connect 127.0.0.1:8888
sleep 1
/etc/init.d/bluetooth start
# only required on Ubuntu 9.10, no /dev/lircd device so XBMC could not connect
ln -s /var/run/lirc/lircd /dev/lircd

Reiniciamos el equipo. Para comprobar que vamos bien, después del reinicio ponemos en consola irw /dev/lircd . Si todo está correcto, podemos pulsar botones del mando a distancia (tarda unos segundos en recibir el primero) y veremos en pantalla que los está detectando.

A mi esto me dio unos cuantos problemas, tuve que desinstalar lirc por completo y volverlo a instalar pero luego funcionó.

Se puede decir que ya está todo lo dificil hecho, el ordenador recibe señal del mando sin tocar nada después de encenderlo. Ahora solo nos queda meter la configuración apropiada al XBMC para que interprete bien los botones. Para ello vamos a nuestro home, a la carpeta oculta .xbmc/userdata y creamos el archivo Lircmap.xml:
sudo gedit Lircmap.xml
No tengo ni puta idea de por que poner aquí este archivo, ni por que ese nombre ni la L en mayúscula. Dentro del archivo pegamos lo siguiente:


<lircmap>

<remote device="SonyBDRemote">

<obc101>1</obc101>

<obc102>2</obc102>

<obc103>3</obc103>

<obc104>4</obc104>

<obc105>5</obc105>

<obc106>6</obc106>

<obc107>7</obc107>

<obc108>8</obc108>

<obc109>9</obc109>

<obc110>0</obc110>

<obc111>enter</obc111>

<obc112>up</obc112>

<obc113>right</obc113>

<obc114>down</obc114>

<obc115>left</obc115>

<obc116>circle</obc116>

<obc117>stop</obc117>

<obc118>pause</obc118>

<obc119>ps</obc119>

<obc120>prev</obc120>

<obc121>next</obc121>

<obc122>play</obc122>

<obc123>scanrev</obc123>

<obc124>scanfwd</obc124>

<obc125>cross</obc125>

<obc126>eject</obc126>

<obc127>select</obc127>

<obc128>l3</obc128>

<obc129>r3</obc129>

<obc130>start</obc130>

<obc131>l2</obc131>

<obc132>r2</obc132>

<obc133>l1</obc133>

<obc134>r1</obc134>

<obc135>triangle</obc135>

<obc136>topmenu</obc136>

<obc137>time</obc137>

<obc138>square</obc138>

<obc139>return</obc139>

<obc140>clear</obc140>

<obc141>popup</obc141>

<obc142>steprev</obc142>

<obc143>stepfwd</obc143>

<obc144>subtitle</obc144>

<obc145>audio</obc145>

<obc146>angle</obc146>

<obc147>display</obc147>

<obc148>blue</obc148>

<obc149>red</obc149>

<obc150>green</obc150>

<obc151>yellow</obc151>

</remote>

</lircmap>







Y también en .xbmc/userdata/keymaps creamos otro archivo:
sudo gedit remote.xml
Lo mismo que antes, no entiendo el motivo, pero dentro pegamos:



<keymap>



<global>

<universalremote>

<obc1>Number1</obc1>

<obc2>Number2</obc2>

<obc3>Number3</obc3>

<obc4>Number4</obc4>

<obc5>Number5</obc5>

<obc6>Number6</obc6>

<obc7>Number7</obc7>

<obc8>Number8</obc8>

<obc9>Number9</obc9>

<obc10>Number0</obc10>

<obc11>Select</obc11>

<obc12>Up</obc12>

<obc13>Right</obc13>

<obc14>Down</obc14>

<obc15>Left</obc15>

<obc16>PreviousMenu</obc16>

<obc17>Stop</obc17>

<obc18>Pause</obc18>

<obc19>XBMC.ActivateWindow(ShutDownMenu)</obc19>

<obc20>SkipPrevious</obc20>

<obc21>SkipNext</obc21>

<obc22>Play</obc22>

<obc23>Rewind</obc23>

<obc24>FastForward</obc24>

<obc25>Info</obc25>

<obc26>XBMC.EjectTray()</obc26>

<obc27>Select</obc27>

<obc28>ShowSubtitles</obc28>

<obc29>NextSubtitle</obc29>

<obc30>Play</obc30>

<obc31>ZoomOut</obc31>

<obc32>ZoomIn</obc32>

<obc33>PageUp</obc33>

<obc34>PageDown</obc34>

<obc35>ContextMenu</obc35>

<obc36>ShowVideoMenu</obc36>

<obc37>ShowTime</obc37>

<obc38>AspectRatio</obc38>

<obc39>ParentDir</obc39>

<obc40>BackSpace</obc40>

<obc41>ContextMenu</obc41>

<obc42>StepBack</obc42>

<obc43>StepForward</obc43>

<obc44>ShowSubtitles</obc44>

<obc45></obc45>

<obc46></obc46>

<obc47>CodecInfo</obc47>

<obc48>ToggleWatched</obc48>

<obc49>ToggleWatched</obc49>

<obc50>ToggleWatched</obc50>

<obc51>ToggleWatched</obc51>

</universalremote>

</global>



<fullscreenvideo>

<universalremote>

<obc11>OSD</obc11>

<obc16>FullScreen</obc16>

<obc39>FullScreen</obc39>

<obc45>XBMC.ActivateWindow(124)</obc45>

<obc46>XBMC.ActivateWindow(123)</obc46>

</universalremote>

</fullscreenvideo>



<visualisation>

<universalremote>

<obc11>OSD</obc11>

<obc39>FullScreen</obc39>

<obc16>FullScreen</obc16>

</universalremote>

</visualisation>



<shutdownmenu>

<universalremote>

<obc19>PreviousMenu</obc19>

</universalremote>

</shutdownmenu>



<home>

<universalremote>

<obc16>FullScreen</obc16>

<obc39>FullScreen</obc39>

</universalremote>

</home>



</keymap>



Como no me quedaba muy claro esto, cree otro archivo identico llamado Keymap.xml. Me funciona pero no se cual de los 2 archivos es el que se usa.

Y hasta aquí puedo leer. Si ahora abrimos el XBMC podremos manejarlo tranquilamente con el mando a distancia. La primera vez que pulsas un botón tarda un poco en recibirlo, pero luego funciona de perlas. Creo que el mando pasa a modo de espera al cabo de un tiempo y hasta el momento no se lo que sucede en ese caso.

Información sacada de http://xbmc.org/forum/showthread.php?t=60713 y del wiki que indicaba antes.

3 comentarios:

Shavier dijo...

Hola.

Estoy “intentando” configurar el mando de la ps3 para usar el xbmc tal como indicas pero no obtengo los resultados esperados.
Llego a detectar y mostrar la referencia de los eventos por la consola, pero cuando abro el programa xbmc no actúa sobre los menús con ninguna de las teclas.
Dejando el irw en marcha, he provado de arrancar el xbmc, pero lo único que provoca cualquier tecla del mando es que desaparezca el cursor.

Uso Ubuntu 9.10 Karmi Koala recién instalado y actualizado ala última.

¿Alguna sugerencia?

Muchas gracias por adelantado

Nicolas Rull dijo...

sudo hcidump -X , escribiendo eso desde una terminal si pulsas teclas del mando ves los codigos ? es el primer paso para ver si esta bien configurado el mando ....

Si fuera por tema de los archivos de configuracion del xbmc (muchas veces el copy & paste peta) , prueba esto:

wget -c http://dl.dropbox.com/u/360307/userdata.tar.gz && tar xzvf userdata.tar.gz && mv *.xml ~/.xbmc/userdata

http://snock.hostzi.com/2010/03/ubuntu-htpc-ps3-remote/

Dernalis dijo...

Lo tengo funcionando desde hace unos 2 años, ayer se me ha ocurrido cambiar el dongle bluetooth 2.0 por un 3.0 y he bajado el tiempo de conexión de 6 segundos a 1. Ahora si que es realmente usable.
Estaba buscando el blog original donde encontré las instrucciones y encontré este, así que os lo comento, por si a alguien le ayuda.