HOWTO: Usar el apple remote en GNU/Linux sin configurar LIRC

De Magarto - Wiki

El artículo lo escribí originalmente aquí.

Este tutorial que, tras varios días, he terminado está pensado para Ubuntu y para Macbooks (al menos los C2D), aunque puede ser funcional para cualquier otra distribución de GNU/Linux como Debian, Gentoo, … cambiando varios códigos en el archivo que adjunto en función de las teclas de vuestro mando a distancia y siempre que la versión del kernel sea menor de la 2.6.21, ya que el módulo appleir está desactivado a posteri. En ese caso debéis usar este otro tutorial: HOWTO: LIRC en macbook, macbook pro, macmini, imac, ...

Para los que no conozcan LIRC (Linux InfraRed Controller), esta utilidad consisten en un demonio que monitoriza un evento de /dev/input/eventX, cierra el acceso a él y ejecuta una serie de utilidades en función de lo que hayamos configurado y del programa que estemos ejecutando. El grave problema de LIRC es que se consigue con muy pocos mandos a distancia en muy pocas capturadoras, y siempre surgen múltiples problemas, de hecho yo nunca lo he conseguido hacer funcionar.

Por estas razones, decidí hacer el tutorial partiendo de otra utilidad que no necesita de los ficheros de configuración de lircd.conf que se las traen, si no simplemente del fichero lircrc donde pones la configuración, ya que monitorea todos los eventos y no necesita un uso exclusivo.

En el caso de los macbooks, macmini… tenemos el grave problema de sólo disponer de 6 botones.

  • Lo primero es instalar el demonio inputlirc, lirc (lo necesitamos aunque no lo usemos).
sudo apt-get install inputlirc lirc lirc-x
  • A continuación añadimos este demonio al arranque. Para ello editamos el fichero /etc/rc.local (como superusuario) y añadimos al principio, la entrada:
/etc/init.d/inputlirc start
  • Ya que aún no hemos reiniciado, haremos que esta función se ejecute ahora. Así que ejecutamos lo anterior en una terminal
  • Ahora copiamos el siguiente fichero en /etc/lirc/lircrc


##################################################
#### Change mode #### IT WORKS! ##################
##################################################

begin
 prog = irexec
 button = KEY_PLAYPAUSE
 mode = amarok
 config = echo "Modo amarok"
end

begin
 prog = irexec
 button = KEY_NEXTSONG
 mode = kaffeine
 config = echo "Modo kaffeine"
end
#begin
# prog = irexec
# button = KEY_PREVIOUSSONG
# mode = kaffeine
# config = echo "Modo kaffeine"
#end


#############
#### VLC ####
#############

begin
 prog = vlc
 button = KEY_PLAYPAUSE
 config = key-play-pause
 repeat = 0
end

begin
 prog = vlc
 button = KEY_MENU
 config = key-stop
 repeat = 0
end

begin
 prog = vlc
 button = KEY_PREVIOUSSONG
 config = key-jump-1min
 repeat = 1
end

begin
 prog = vlc
 button = KEY_NEXTSONG
 config = key-jump+short
 repeat = 1
end

begin
 prog = vlc
 button = KEY_VOLUMEUP
 config = key-vol-short
 repeat = 1
end

begin
 prog = vlc
 button = KEY_VOLUMEDOWN
 config = key-vol-down
 repeat = 1
end


#################
#### MPlayer ####
#################

#begin mplayer
begin
 prog = mplayer
 button = KEY_PLAYPAUSE
 config = pause
 repeat = 15
end

begin
 prog = mplayer
 button = KEY_MENU
 config = stop
 repeat = 15
end

begin
 prog = mplayer
 button = KEY_PREVIOUSSONG
 config = seek -10
 repeat = 10
end

begin
 prog = mplayer
 button = KEY_NEXTSONG
 config = seek +10
 repeat = 10
end

begin
 prog = mplayer
 button = KEY_VOLUMEUP
 config = volume 1
 repeat = 1
end

begin
 prog = mplayer
 button = KEY_VOLUMEDOWN
 config = volume -1
 repeat = 1
end
#end mplayer


##################
#### Kaffeine ####
##################

begin kaffeine
 begin
  prog = irexec
  button =
  config = dcop kaffeine MainApplication-Interface
 end

 begin
  prog = irexec
  button = KEY_PLAYPAUSE
  config = if `dcop kaffeine KaffeineIface isPlaying`; then dcop kaffeine KaffeineIface pause; dcop kaffeine kaffeine_mainview hide; else dcop kaffeine KaffeineIface play; dcop kaffeine kaffeine_mainview hide; fi
 end

 begin
  prog = irexec
  button = KEY_MENU
  repeat = 1
  config = dcop kaffeine KaffeineIface stop
 end

 begin
  prog = irexec
  button = KEY_NEXTSONG
  repeat = 1
  config = dcop kaffeine KaffeineIface posPlus
 end

 begin
  prog = irexec
  button = KEY_PREVIOUSSONG
  repeat = 1
  config = dcop kaffeine KaffeineIface posMinus
 end

 begin
  prog = irexec
  button = KEY_VOLUMEUP
  repeat = 1
  config = dcop kaffeine KaffeineIface volUp
 end

 begin
  prog = irexec
  button = KEY_VOLUMEDOWN
  repeat = 1
  config = dcop kaffeine KaffeineIface volDown
 end

end kaffeine


################
#### Amarok ####
################

begin amarok
 begin
  prog = irexec
  button = KEY_PLAYPAUSE
  config = dcop amarok player playPause
 end
 
 begin
  prog = irexec
  button = KEY_MENU
  config = dcop amarok player stop
 end
 
 begin
  prog = irexec
  button = KEY_NEXTSONG
  config = dcop amarok player next
 end
 
 begin
  prog = irexec
  button = KEY_PREVIOUSSONG
  config = dcop amarok player prev
 end
 
 begin
  prog = irexec
  button = KEY_VOLUMEUP
  repeat = 1
  config = dcop amarok player volumeUp
 end
 
 begin
  prog = irexec
  button = KEY_VOLUMEDOWN
  repeat = 1
  config = dcop amarok player volumeDown
 end
end amarok


###############
#### Totem ####
###############

begin
 prog = irxeveniret
 button = KEY_PLAYPAUSE
 config = Key p Totem
 repeat = 0
end

begin
 prog = irexec
 button = KEY_MENU
 config = stop
 repeat = 0
end

begin
 prog = Totem
 button = KEY_NEXTSONG
 config = seek_forward
 repeat = 0
end

begin
 prog = Totem
 button = KEY_PREVIOUSSONG
 config = seek_backward
 repeat = 0
end

begin
 prog = irexec
 button = KEY_VOLUMEUP
 repeat = 10
 config =
end

begin
 prog = irexec
 button = KEY_VOLUMEDOWN
 repeat = 10
 config =
end



###################
#### Audacious ####
###################

begin
 prog = audacious
 button = KEY_PLAYPAUSE
 config = PAUSE
 repeat = 16
end

begin
 prog = audacious
 button = KEY_MENU
 config = STOP
 repeat = 0
end

begin
 prog = audacious
 button = KEY_NEXTSONG
 config = NEXT
 repeat = 16
end

begin
 prog = audacious
 button = KEY_PREVIOUSSONG
 config = PREV
 repeat = 16
end


##############
#### XMMS ####
##############

begin
 prog = xmms
 button = KEY_PLAYPAUSE
 config = pause
end

begin
 prog = xmms
 button = KEY_MENU
 config = stop
end

begin
 prog = xmms
 button = KEY_NEXTSONG
 config = next
 repeat = 16
end

begin
 prog = xmms
 button = KEY_PREVIOUSSONG
 config = prev
 repeat = 16
end

begin
 prog = xmms
 button = KEY_VOLUMEUP
 config = fwd 5
 repeat = 10
end

begin
 prog = xmms
 button = KEY_VOLUMEDOWN
 config = bwd 5
 repeat = 10
end


###############
##### XdTV ####
###############

begin
prog = irexec
button = KEY_PLAYPAUSE
config = record
repeat = 0
end

begin
prog = irexec
button = KEY_PREVIOUSSONG
config = setstation prev
repeat = 0
end

begin
prog = irexec
button = KEY_NEXTSONG
config = setstation next
repeat = 0
end

################
#### TVtime ####
################

#begin tvtime

begin
prog = irexec
button = KEY_PLAYPAUSE
config = tvtime-command ENTER
end

begin
prog = irexec
button = KEY_MENU
config = tvtime-command TOGGLE_FULLSCREEN
end

begin
prog = irexec
button = KEY_NEXTSONG
config = tvtime-command UP
repeat = 1
end

begin
prog = irexec
button = KEY_PREVIOUSSONG
config = tvtime-command DOWN
repeat = 1
end

begin
prog = irexec
button = KEY_VOLUMEUP
config = tvtime-command RIGHT
repeat = 2
end

begin
prog = irexec
button = KEY_VOLUMEDOWN
config = tvtime-command LEFT
repeat = 2
end

#begin
# prog = irexec
# button = middle
# config = tvtime-command CHANNEL_JUMP
# repeat = 1
#end

#end tvtime


################################################## ##############################
#### Turn up and down the volume (Working by default on Feisty) ####
################################################## ##############################

#begin
#prog = irexec
#button = KEY_VOLUMEUP
#config = amixer set PCM 9+ & #amixer set PCM 3%+ &
#repeat = 2
#end

#begin
#prog = irexec
#button = KEY_VOLUMEDOWN
#config = amixer set PCM 9- & #amixer set PCM 3%- &
#repeat = 2
#end

##############################################
#### Evince y OpenOffice (Presentations) ####
##############################################

begin
prog = irxevent
button = KEY_PLAYPAUSE
config = Key F11 CurrentWindow
config = Key F5 CurrentWindow
repeat = 0
end

begin
prog = irxevent
button = KEY_MENU
config = Key Escape CurrentWindow
repeat = 0
end

begin
prog = irxevent
button = KEY_PREVIOUSSONG
config = Key Prior CurrentWindow
repeat = 1
end

begin
prog = irxevent
button = KEY_NEXTSONG
config = Key Next CurrentWindow
repeat = 1
end

begin
prog = irxevent
button = KEY_VOLUMEUP
config = Key ctrl-plus CurrentWindow
repeat = 0
end

begin
prog = irxevent
button = KEY_VOLUMEDOWN
config = Key ctrl-minus CurrentWindow
repeat = 0
end


  • En Sistema/Preferencias/Sesión añadimos los siguientes comandos:
irexec -d
irxevent -d

Reiniciamos y listo


NOTAS IMPORTANTES:

- Sólo he añadido soporte para VLC, Mplayer, Kaffeine, Amarok, Totem, Audacious, XMMS, TVtime, XdTV, Evince y Presentaciones de OpenOffice.. Si queréis otros, es cuestión de tocar el archivo /etc/lircrc añadiendo el código de vuestro programa.

- Leed el archivo /etc/lircrc para más información.

- Todos los comandos se ejecutan a la vez, es decir, que si tenéis varias programas soportados abiertos simultáneamente, todos realizarán la función que ejecutemos. Para solucionar esto, habría que descomentar ciertas cosas que os he dejado preparado en el archivo, y necesitáis también reservar varios botones para elegir las aplicaciones que sólo funcionarán para eso. También se pueden modificar todos los comandos para que detecte si la aplicación tal está en ejecución sino que busque otra, sino otra... (con comandos if/case x) y en ese caso que ejecute una acción. Es más complicado pero sólo harían falta varios líneas de lircrc.

- Si vuestro mando no está soportado o no funciona todo lo descrito, podéis comprobar cual es vuestro código para cada botón, haciendo uso de: a) El comando xev b) De la aplicación de GNOME /Sistema/Preferencias/Combinaciones de teclas y ahí buscad algún atajo de teclado que no esté soportado y grabar ese botón del mando a distancia. Una vez tengáis el código de ese botón. Una vez tengáis el código HEXADECIMAL de ese botón (y no el del mapeo para xmodmap porque lirc e inputlirc trabajan en una capa por encima de xmodmap) váis al archivo /usr/include/linux/input.h y ahí buscáis ese código. Cuando le tengáis, el nombre que os aparecerá será vuestro código que es con el que manejaréis el evento en el archivo /etc/lircrc.


Con todo esto, ya tenéis todo lo necesario, ahora sólo queda que alguien consiga hacer funcionar el botón menu del apple remote (y no como tecla dentro de xmodmap que eso es sencillo pero no muy útil).