====== Asignar teclas multimedia / de función en GNU/Linux ======
La asignación de teclas multimedia / volumen en Linux depende de los siguientes factores.
- Escritorio / gestor de ventanas: Cada entorno tiene una manera de configurar teclas, algunos de manera gráfica y otros por medio de ficheros de configuración.
- El nombre que X11 asigna a la tecla pulsada.
- Controlador encargado de sacar el audio: Master, Line, PCM, Speaker, etc (En el caso de las teclas de volumen).
===== Identificar nombre de teclas multimedia o de función =====
Con el comando xev que viene incluido en X11 se puede identificar los nombres concretos que las X asignan a una tecla tras pulsarla. Ese nombre será utilizado por cualquier entornos de ventanas que utilice X11 a la hora de configurar una acción, subir volumen, arrancar el cliente de correo o pasar a la pista siguiente en algún programa de reproducción.
**Identificar nombres de teclas multimedia**.
Las teclas pulsadas para el ejemplo fueron anterior (XF86AudioPrev), play/pausa (XF86AudioPlay) y la tecla de pista siguiente (XF86AudioNext).
xev | sed -ne '/^KeyPress/,/^$/p'
KeyPress event, serial 48, synthetic NO, window 0x4800001,
root 0xdf, subw 0x0, time 36275491, (-642,143), root:(477,844),
state 0x0, keycode 173 (keysym 0x1008ff16, XF86AudioPrev), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 49, synthetic NO, window 0x4800001,
root 0xdf, subw 0x0, time 36277699, (-642,143), root:(477,844),
state 0x0, keycode 172 (keysym 0x1008ff14, XF86AudioPlay), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 49, synthetic NO, window 0x4800001,
root 0xdf, subw 0x0, time 36281027, (-642,143), root:(477,844),
state 0x0, keycode 171 (keysym 0x1008ff17, XF86AudioNext), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
**Identificar nombre de teclas de control de volumen**.
Teclas multimedia a pulsar: Mute (XF86AudioMute), bajar (XF86AudioLowerVolume) y subir volumen (XF86AudioRaiseVolume).
xev | sed -ne '/^KeyRelease/,/^$/p'
KeyRelease event, serial 49, synthetic NO, window 0x4800001,
root 0xdf, subw 0x0, time 36615284, (61,-15), root:(1180,686),
state 0x0, keycode 121 (keysym 0x1008ff12, XF86AudioMute), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 49, synthetic NO, window 0x4800001,
root 0xdf, subw 0x0, time 36616180, (61,-15), root:(1180,686),
state 0x0, keycode 122 (keysym 0x1008ff11, XF86AudioLowerVolume), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
KeyRelease event, serial 49, synthetic NO, window 0x4800001,
root 0xdf, subw 0x0, time 36616787, (61,-15), root:(1180,686),
state 0x0, keycode 123 (keysym 0x1008ff13, XF86AudioRaiseVolume), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
===== Identificar el control de sonido para configurar teclas de volumen =====
Si se dispone de alsamixer y este muestra en "Item" (arriba a la izquierda) el controlador sobre el que queremos configurar las teclas de volumen no hace falta seguir buscando. Habitualmente el control principal se denomina "Master" y suele incluir todos los controles (salidas frontales, traseras, etc) pero eso depende del fabricante, el modelo de tarjeta y demás.
Las teclas multimedia se configuran utilizando amixer, que va a ser el encargado de pasar las instrucciones a la tarjeta de sonido. También lo usaremos para identificar la salida de audio sobre la que se quiere operar. Para eso se puede utilizar el comando "amixer scontrols".
Ejemplo de salida de una raspberry. Solo hay un controlador y es PCM
amixer scontrols
Simple mixer control 'PCM',0
Otro ejemplo que salida de "amixer scontrols".
amixer scontrols
Simple mixer control 'Master',0
Simple mixer control 'Headphone',0
Simple mixer control 'PCM',0
Simple mixer control 'Front',0
Simple mixer control 'Front Mic',0
Simple mixer control 'Front Mic Boost',0
Simple mixer control 'Surround',0
Simple mixer control 'Center',0
Simple mixer control 'LFE',0
Simple mixer control 'Side',0
Simple mixer control 'Line',0
Simple mixer control 'Line Boost',0
Simple mixer control 'Capture',0
Simple mixer control 'Capture',1
Simple mixer control 'Auto-Mute Mode',0
Simple mixer control 'Digital',0
Simple mixer control 'Input Source',0
Simple mixer control 'Input Source',1
Simple mixer control 'Loopback Mixing',0
Simple mixer control 'Rear Mic',0
Simple mixer control 'Rear Mic Boost',0
Usando "Master" estos serían los comandos para controlar el volumen, de querer / tener otra simplemente sustituir Master por el nombre que corresponda, PCM, Speaker, Line, etc.
Subir el volumen: amixer sset Master 10%+
Bajar el volumen: amixer sset Master 10%-
Activar/desactivar silencio: amixer sset Master toggle
Activar silencio: amixer sset Master mute
Desactivar silencio: amixer sset Master unmute
NOTA: Normalmente se suele usar la misma tecla para activar desactivar "amixer sset Master toggle".
===== Vincular teclas de función / multimedia =====
Cada entorno de escritorio tiene su manera de facilitar la configuración de teclas y atajos, independientemente si estas son de función o multimedia.
Xfce > Configuration > Keyboard > Application shortcuts > Add .
Gnome y otros entornos GTK: gnome-keybinding-properties.
**Configurar mplayer para usar las teclas multimedia.**
Crear una pila fifo para enviarle a mplayer los comandos pertinentes. Es el mismo sistema que utilizan las interfaces gráficas para mplayer.
mkfifo $HOME/mplayer.pipe
echo "input=file=/home/xx/.mplayer/mplayer.pipe" >> $HOME/.mplayer/config
NOTA: No se puede usar la variable $HOME en el fichero de configuración ~/.mplayer/config.
Documentación mplayer: [[http://www.mplayerhq.hu/DOCS/tech/slave.txt]]
Crear un fichero de ayuda $HOME/.mplayer/cmd y dar permisos de ejecución.
#!/bin/bash
echo "${1/@/ }" > ~/.mplayer/mplayer.pipe
NOTA: para enviar "pt_step -1" a la pila usamos la sustitución "${1/@/ }".
Comandos para la configuración de teclas multimedia.
/home/xx/.mplayer/cmd "pt_step@1"
/home/xx/.mplayer/cmd "pt_step@-1"
/home/xx/.mplayer/cmd "pause"
Configuración de teclas de volumen y multimedia (para mplayer) en LXDE/OpenBox: $HOME/.config/openbox/lxde-rc.xml
...
/home/xx/.mplayer/cmd "pt_step@1"
/home/xx/.mplayer/cmd "pt_step@-1"
/home/xx/.mplayer/cmd "pause"
amixer set Master 10%+ unmute
amixer set Master 10%- unmute
amixer set Master toggle
...
NOTA: No se puede usar $HOME en el archivo lxde-rc.xml.
**Enlaces de interés**: [[https://www.aularon.com/linux/mplayer-multimedia-keyboard-buttons/]]