Inicialmente la configuración de las pantallas iMon requería la aplicación de parches a las fuentes de lirc y de lcdproc. Posteriormente los parches se incluyeron en lirc, pero a la fecha de redacción de esta guía dichos drivers para iMon no están actualizados. Por el contrario, existen unos drivers actualizados en el propio kernel de Linux, por lo que la configuración es más sencilla que antes, ya que no necesitamos instalar lirc.
En primer lugar nos aseguraremos de no tener sinstalado lirc ni lcdproc, para evitar duplicidades
Compilar kernel con módulo imon y cargar módulo en memoria:
modprobe imon |
Instalar lcdproc 0.5.4 o superior: (A Octubre de 2011, en Debian inestable ya se puede instalar desde repositorios)
./configure --enable-drivers=imonlcd && make && make install |
Editar /usr/local/etc/LCDd.conf
Especificar el driver imonlcd y la carpeta donde están los drivers:
Driver=imonlcd DriverPath=/usr/local/lib/lcdproc/ |
Indicar que no queremos alternar la información del servidor LCDd con la del resto de clientes. Esto evitará que información interna de LCDproc aparezca en la pantalla alternativamente junto con la de XBMC
ServerScreen=no |
Especificar que nuestra pantalla es LCD (identificador USB 15c2:0038 ) en lugar de VFD (identificador 15c2:ffdc) cambiando el parámetro "protocol" en la sección [imonlcd]. En esta sección también podemos ajustar el contraste y el comportamiento de LCDproc cuando se cierre (poner un reloj en la pantalla LCD o apagarla):
[imonlcd] # Specify which iMon protocol should be used [legal: 0=15c2:ffdc device, # 1=15c2:0038 device; default: 0] Protocol=1 # Set the exit behavior [legal: 0=leave shutdown message, 1=show the big clock, # 2=blank device; default: 1] OnExit=2 # Select the displays contrast [default: 200; legal: 0-1000] Contrast=150 |
En las fuentes de lcdproc, carpeta scripts/debian tenemos el script de inicio que debemos copiar en /etc/init.d/. Lo editaremos y cambiaremos el nombre del ejecutable de LCDproc (por defecto está en /usr/sbin, pero nosotros lo tenemos en /usr/local/sbin) y habilitaremos el script para los runlevel que utilicemos (por comodidad lo haremos con el comando rcconf)
En primer lugar editaremos el fichero advancedsettings.xml:
<advancedsettings> <lcd> <rows>2</rows> <!-- Number of rows to use for the LCD. --> <columns>20</columns> <!-- Number of columns to use for the LCD. --> <scrolldelay>3</scrolldelay> <!-- Delay of the scroller widget. Defaults to 1. --> <dimonscreensave>true</dimonscreensave> <!-- Turns of the LCD/VFD backlight while screensaving. Defaults to false. --> </lcd> </advancedsettings> |
Posteriormente editaremos guisettings.xml y pondremos el valor true a la línea <haslcd> de la sección <videoscreen>
Finalmente podemos modificar el fichero LCD.xml para que la información sea más clara que en la versión por defecto. Eliminaremos la visualización de datos referentes a memoria libre y desactivaremos la pantalla durante la visualización de vídeos, entre otras cosas, de modo que el fichero queda así:
<lcd> <!-- set this to video,music to disable the LCD on playback of music and video--> <disableonplay>video</disableonplay> <navigation> <line>$INFO[System.CurrentWindow]</line> <line>$INFO[System.CurrentControl]</line> <line>$INFO[System.ScreenWidth]x$INFO[System.ScreenHeight] $INFO[System.ScreenMode]</line> </navigation> <music> <line>$INFO[LCD.PlayIcon] $INFO[Player.Time]/$INFO[Player.Duration]</line> <line>$INFO[MusicPlayer.Title]</line> <line>$INFO[MusicPlayer.Artist]</line> <line>$INFO[MusicPlayer.Album] ($INFO[MusicPlayer.Year])</line> </music> <video> <line>$INFO[LCD.PlayIcon] $INFO[Player.Time]/$INFO[Player.Duration]</line> <line>$INFO[VideoPlayer.Title]</line> <line>$INFO[VideoPlayer.Genre]</line> <line>$INFO[LCD.ProgressBar]</line> </video> <general> <line>XBMC running...</line> <line>$INFO[System.Time] $INFO[LCD.Date]</line> <line>$INFO[System.ScreenWidth]x$INFO[System.ScreenHeight] $INFO[System.ScreenMode]</line> </general> <screensaver> <!-- Comment out the next line if backlight is set to off while screensaver active --> <line>$INFO[System.Time] $INFO[LCD.Date]</line> </screensaver> <xbelaunch> <line></line> <line>Playing</line> <line>$INFO[System.LaunchXBE]</line> </xbelaunch> </lcd> |
La mayoría de botones del mando a distancia funcionarán perfectamente en XBMC, pero es posible que queramos dar alguna función concreta a botones que no funcionan con la configuración por defecto.
El driver imon del kernel Linux interpreta las pulsaciones del mando a distancia como códigos de teclado (keycodes). Hemos de averiguar los códigos correspondientes a los botones que queremos configurar. Para ello activaremos el registro en advancedsettings.xml:
<loglevel>2</loglevel> |
Ahora ejecutaremos XBMC y comprobaremos en otra consola el archivo de registro cuando pulsemos los botones en el mando a distancia
En mi caso, los dos botones que quiero configurar se corresponden con los keycodes 156 y 182 del teclado. Como solo quiero asignar funciones simples a dichos botones, lo más sencillo es remapear con Xmodmap. Para ello editamos el fichero ~/.Xmodmap
keycode 182 = Tab Tab keycode 156 = Escape |
Algunas distribuciones no cargan automáticamente el fichero ~/.Xmodmap al iniciar X-Window. Si éste es nuestro caso, pondremos lo siguiente en el fichero ~/.xsession:
if [ -f $HOME/.Xmodmap ]; then /usr/bin/xmodmap $HOME/.Xmodmap fi |
Podemos apagar la pantalla LCD haciendo telnet a localhost en el puerto 1366 y ejecutando los siguientes comandos
hello screen_add myscreen screen_set myscreen backlight on/off |
La pantalla LCD se enciende sola cada X tiempo
En ocasiones sucede lo anterior a pesar de estar el protector de pantalla de XBMC activo. Si observamos los registros del sistema podremos comprobar un error de comunicación del demonio LCDd. No he conseguido averiguar si el problema es de LCDd o de XBMC, pero he creado un pequeño script que lleva control de los errores, y cuando éstos se producen le manda el comando "LCD.Resume" a XBMC. Esto causa que XBMC salga del modo reposo y encienda la pantalla LCD. Al cabo de un minuto se vuelve a apagar dicha pantalla al entrar XBMC nuevamente en reposo.
Para poder enviarle comandos a XBMC, lo más cómodo es mediante otro script que viene con la suite de XBMC llamado xbmc-send. Podemos instalarlo o sacarlo del árbol git de XBMC. Posteriormente hay que definir su ubicación en una variable de mi script.
Una vez configurada esa variable, en mi caso ejecuto el script cada 15 minutos mediante una tarea cron, de modo que la pantalla nunca está más tiempo encendida en caso de error. No obstante solo suele ocurrir una vez al día.
El script puede descargarse de aqui.