Configurando un teclado multimedia en Debian GNU/Linux

Estándar

Es un martes por la mañana, caminas hacia tu pc dispuesto a otro largo día de trabajo, quieres terminar la tésis o redactar el nuevo artículo para la editorial (del que ya te atrasaste un día), o quizá solo quieras seguir ligando a la chica del otro lado del mundo que conociste «por accidente» el otro día en su hi5. Te sientas frente al ordenador con tu taza de café de todos los días, excepto que hoy tienes una extraña sensación…

Es entonces es cuando lo ves y te acuerdas: está allí, sobre tu escritorio, estático, vano, inservible. Sientes esa extraño cosquilleo en la nuca, ese sentimiento mezcla de miedo, enojo y frustración, al recordar que ayer solo dejaste el ordenador porque el teclado que no te acuerdas desde cuando lo tienes ha dejado de responder.Ese al que nunca lo tomaste en serio porque era solo algo más, ahora ya no lo puedes usar. Ese con el que escribiste el mail que te salvo el empleo, o el que solo usas para la mensajería instantánea, ha dejado de ser útil, o al que ya no se le veían las teclas «w a s d» porque todo el día juegas al Alien Arena o al Tremolous… y sin embargo nunca lo tomaste en serio.

Ha llegado el día en que tu teclado ha dejado de funcionar bien, es hora de olvidarte de él, echarlo a la basura (no… mejor reciclarlo 🙂 ) y comprar uno nuevo.

O simplemente y sencillamente te has comprado un nuevo pc, o conocen lo geek que eres y alguien te regala un teclado nuevo.

Ahora todo ha cambiado, ves tu nuevo y flamante teclado, todo lleno de botoncillos que quizá nunca llegues a usar (o que en verdad no sirven de nada :S ). El problema está en que ninguno funciona, por mas que los oprimes no sucede nada, o solo funcionan ciertas teclas y las demás bien gracias. Y lo peor de todo es que tus amigos/familiares/colegas te dicen que en el hasefrochito si funcionan bien todos, que debe ser que tu maravillosa Debian no puede con ese simple teclado, o es que GNU/Linux no es para estas cosas… Pero puedes demostrarles que tu puedes hacer con esas teclas lo que sea, desde abrir el amarok (o el listen), hasta activar el sistema de riego del jardín (eso queda para otra guía 😉 ) y configurar el teclado en menos de 10 minutos.

Bueno, ya estuvo bueno de parloteo, ahora vamos al grano.

Los teclados multimedia a menudo necesitan cds o diskettes de instalación que solo funcionan en hase, pero no quiere decir que el teclado en sí no envíe datos al pc si no ha instalado ese software, ya que lo único que éste hace es decirle al sistema como actuar cuando sean pulsados los botones extra.

En GNU/Linux es solo cuestión de hacerlo manualmente, identificando los botones y dictando las acciones que se realizarán.

Esta guía trata acerca de como configurar estas teclas dentro de una sesión gráfica, para que puedan ser configurados en cualquier escritorio, pensado para usar herramientas comúnes entre distintas distros y sin instalar ningún nuevo demonio (cosa que hacen ciertos programas automatizados)

Primero: Determinando los keycodes.

Los keycodes son la traducción que hace el sistema a los datos enviados por el teclado. Cada tecla genera keycodes distintos pero basados en estándares, (al menos en el caso de 104-105 teclas que posee comúnmente un teclado de escritura occidental) en el caso de los botones multimedia, y ya que no existe un estándar propiamente dicho, los fabricantes les colocan los que les venga en gana a los botones, total si incluyen un sofware que lo configure todo pues….

Para saber que keycode corresponde a cada uno de los botones usamos una aplicación llamada «xev» que se especializa en informar de los eventos que ocurran en X, debemos lanzarla desde un emulador de terminal (por ejemplo konsole, gnome-terminal, xterm, yakuake, etc.) estando en el servidor gráfico (no en las tty):

~$ xev

Luego de esto aparecerá una ventanita llamada «Event Tester» que es la que «siente» todo lo que haga sobre ella el mouse y el teclado, mientras que en en la terminal desde donde la hemos lanzado van apareciendo los eventos.

Teniendo seleccionado el Event Tester vamos presionando los botones multimedia uno a uno y viendo lo que sale en la terminal. En mi caso al presionar el boton «Play»:
KeyRelease event, serial 31, synthetic NO, window 0x2e00001,
root 0x63, subw 0x0, time 1412932703, (92,-5), root:(163,415),
state 0x10, keycode 162 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False

Como ven aparece el keycode 162 y además NoSymbol, esto significa que no se ha definido ninguna acción o caractér para el botón. Ahora lo que falta hacer es que el sistema interprete de alguna forma estos códigos.

Segundo: Definiendo los símbolos para los keycodes usando xmodmap.

xmodmap es una sencilla aplicacion de consola que permite modificar ‘al vuelo’ el mapa de caracteres del teclado para las X (agregando, eliminando o intercambiando símbolos).

Primero creamos un fichero de texto sin formato que contenga los keycodes y sus respectivos símbolos, uno por línea, de la siguiente forma:

keycode N = símbolo

Donde N es el número de keycode que obtuvimos con xev, y símbolo es cualquier nombre con el que querramos identificar al botón en cuestión.

Ojo que debe ser un fichero de texto plano sin formato, no vale hacerlos con opeoffice, koffice y demás editores que insertan formatos raros a los documentos, debe ser texto puro y sin formatos especiales (pueden hacerse por ejemplo con kate, gedit, vi, etc.).

El fichero lo guardamos con el nombre .xmodmap o .xmodmaprc en nuestro directorio home, en realidad el nombre puede ser cualquiera que se os antoje, pero si lleva alguno de estos es posible que los entornos de escritorio y/o dependiendo de la distro que usemos, sea detectado y aplicado automáticamente al próximo inicio de sesión.

Noten que el nombre del fichero comienza con un punto, esto significa que estará oculto y no nos estorbará al ver los archivos guardados en nuestro home.

Como ejemplo les dejo mi .xmodmaprc:

keycode 144 = XF86AudioPrev
keycode 153 = XF86AudioNext
keycode 160 = XF86AudioMute
keycode 161 = XF86Calculator
keycode 162 = XF86AudioPlay
keycode 164 = XF86AudioStop
keycode 174 = XF86AudioLowerVolume
keycode 176 = XF86AudioRaiseVolume
keycode 178 = XF86HomePage
keycode 222 = XF86PowerDown
keycode 223 = XF86Sleep
keycode 227 = XF86WakeUp
keycode 229 = XF86Search
keycode 230 = XF86Favorites
keycode 231 = XF86Refresh
keycode 232 = XF86Stop
keycode 233 = XF86Forward
keycode 234 = XF86Back
keycode 235 = XF86MyComputer
keycode 236 = XF86Mail
keycode 237 = XF86AudioMedia

Si se preguntan de donde saqué esos nombres para los botones …¡que tan raros que se ven!, …. bueno pues están definidos en el fichero /usr/include/X11/XF86keysym.h y si utilizamos estos pues tenemos la ventaja de que muchas aplicaciones traen predefinidos los atajos de teclas con estos nombres, por lo que no tenderemos que configurarlas después de terminar con esta guía ;).

Aplicando las configuraciones

Para terminar y ver los resultados de todo lo que hemos hecho hasta ahora pues es tiempo de aplicar los cambios:
~$ xmodmap .xmodmaprc (sustituyan el .xmodmap por el nombre de su fichero en caso de haberle puesto otro)
Ahora solo falta probar las teclas de nuevo con el xev, despues de aplicar los cambios con xmodmap el resultado de presionar alguna tecla especial (en mi caso):

KeyRelease event, serial 31, synthetic NO, window 0x2e00001,
root 0x63, subw 0x0, time 1418716437, (102,-28), root:(106,413),
state 0x0, keycode 174 (keysym 0x1008ff11, XF86AudioLowerVolume), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False

Como ven ahora aparece que el símbolo XF86AudioLowerVolume está asignado al keycode 174, muy bien, ¿no creen? :).

Haciendo que se apliquen los cambios al iniciar sesión.

El problema ahora es que los cambios solo se mantienen mientras no salgan de la sesión, en algunos casos (como he escrito arriba) se autodetectará el fichero de configuración y se aplicará sin problemas, si esto no ocurre tenemos la opción de hacerlo a mano todas las veces (con una simple llamada a xmodmap y pasándole como argumento el fichero que hemos creado), o incluír el comando de llamada a xmodmap en el autoarranque del escritorio que utilicemos (KDE, GNOME, Xfce, Fluxbox, Blackbox, etc.) …en esta guía solo diere cómo hacerlo para KDE:

Creamos otro fichero de texto en el directorio ~/.kde/Autostart/ que contenga el comando hemos utilizado para aplicar los cambios.

Si al fichero de los keycodes le han puesto el nombre que sugería (.xmodmaprc) el contenido de este otro fichero sería:

#!/bin/bash
xmodmap .xmodmaprc
exit

Nota: Este fichero debe escribirse en texto plano y tener la extensión .sh (script para sh/bash), un ejemplo de nombre para este archivo podría ser Script_teclas.sh. Además este fichero ha de tener permisos de ejecución, para dar permisos de ejecución a cualquier fichero se puede usar el comando $ chmod +x Fichero.

Luego ya solo queda configurar las aplicaciones que querramos lanzar con con los botones, en kde se puede hacer desde Centro de Control –> Regionalidad y accesibilidad –> Accesos rápidos de teclado.
Para controlar aplicaciones como amarok, las configuraciones se hacen en el mismo programa, donde se le puedan indicar accesos rápidos globales de teclado.

Si se quiere controlar algún programa que no posea accesos globales se puede optar por realizar un script (cosa que va mas allá de los alcances de esta guía) y configurar un acceso rápido desde el Centro de control para lanzarlo.

Espero que esta guía le sirva a alguien (si es que alguien la lee 😀 ) y que comenten acerca de como les ha parecido y también si tienen alguna sugerencia para mejorarla.
Saludos.

28 comentarios en “Configurando un teclado multimedia en Debian GNU/Linux

  1. Ruben

    Hola,
    sinceramente me ha parecido bastante interesante tu manual.
    Pero en mi caso yo andaba buscando otro tipo de información
    que también tiene que ver con el teclado. El problema que yo
    tengo es que me faltan en mi teclado algunos caracteres como
    la almohadilla, la arroba, la barra vertical…(todos los que se
    activan con el ALT_R en mi teclado). Podrías ayudarme a
    solucionar el problema?

    Muchas gracias!

  2. denjohx

    Hola Ruben, gracias por tu comentario.

    Por tu problema, tengo entendido (que conste que no soy ninguna clase de gurú de GNU/Linux 😛 ) los caracteres escritos por el teclado dentro de las Xs son definidos por la configuración del teclado en el servidor gráfico, que comúnmente es X.org, que puede que no lo tengas bien configurado.

    «Así a bote pronto» (como dicen en España) te recomendaría que revises tu /etc/X11/xorg.conf para ver si no tienes algúna mala configuración en la distribución de teclas (secction «InputDevice» ).
    O si usas Debian y derivadas que hagas un # dpkg-reconfigure xserver-xorg para reconfigurar la manera en que X.org interpreta a tu teclado.

  3. Francisco

    hola como estas… me gusto mucho el tutorial pero tengo porblemas con la parte del fichero de texto yo lo creo con el nombre de teclado y tipo txt pero cuando inicio sesión lo que hace es abrirme el archivo texto y no carga la configuración de teclas

  4. denjohx

    Francisco: Te refieres al fichero que se coloca en ~/.kde/Autostart/ ¿cierto?, el asunto es que no debe tener extensión «.txt» sino .sh, además de tener permisos de ejecución.

    Gracias por tu pregunta, ahora edito la guía para aclarar esto.

  5. Hola, gracias por el tuto, pero me temo que me fue de poca ayuda.
    Lo que pasa simplemente es que al lanzar el xev desde la consola, me aparece la ventana y todo eso, pero en el momento de presionar la tecla, nada aparece. Sin embargo, al presionar las teclas que sí me funcionan, si que aparece en la terminal loque debería o se supone que tendría que aparecer.

    ¿algúna idea?

  6. denjohx

    hola toxm, ¿es un portátil?, en los portátiles (y algunos singulares teclados) xorg o hasta el kernel no detectan bien los botones especiales.

    Si es un portátil es posible que debas instalar algún paquete especial que cargue los módulos correspondientes a tu modelo se laptop.

    Si no es un portátil, lamentablemente no hay mucho que se pueda hacer, a no ser que tu mismo te hagas un driver por supuesto ;-).

  7. nelson

    buenas buenas gente como me les va?.
    Miren es que tengo una preguntica….como hago para guardar el texto en en la extension .sh ya que utilizando el kate y no lo encuentro…….no se si es porque tengo el Kde-core…..o soy un bruto y no se como guardarlo en ese formato, LOL…
    les agradeceria a todos que me dieran una manito con este problemita tan tonto (soy nuevo en debian y con el kde mas!)..

    saludos y feliz 2009

  8. denjohx

    @nelson, lo único que tienes que hacer es ponerle de nombre script.sh, las opciones que te da kate son sólo meras sugerencias, no quiere decir que sean las únicas existentes.

    kate, como cualquier editor de de texto para GNU/LInux, no es como el block de notas de windows. Kate puede o no poner extensión a un fichero (en *nix no es tan necesaria la extensión como en win), si en el nombre del fichero ya especificas la extensión, kate obedece y lo guarda así.

  9. Yasmani

    muy bueno todas las funciones me funcionaron perfectamente menos las de control de reproduccion play/pause, stop, next, previos me pueden ayudar

  10. Jesuz

    Hola excelente tutorial, pero lamentablemente no me funcionan las teclas, tienes idea de por que, configura las teclas según lo explicas edito el archivo .Xmodmap despues escribo en terminal xmodmap .Xmodmap verifico en terminal con xev y me muestra que ya estan asignadas las teclas.

    KeyRelease event, serial 34, synthetic NO, window 0x2c00001,
    root 0x83, subw 0x0, time 461913, (-4,207), root:(419,498),
    state 0x0, keycode 162 (keysym 0x1008ff14, XF86AudioPlay), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

    KeyPress event, serial 34, synthetic NO, window 0x2c00001,
    root 0x83, subw 0x0, time 462420, (-4,207), root:(419,498),
    state 0x0, keycode 153 (keysym 0x1008ff17, XF86AudioNext), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

    KeyRelease event, serial 34, synthetic NO, window 0x2c00001,
    root 0x83, subw 0x0, time 462577, (-4,207), root:(419,498),
    state 0x0, keycode 153 (keysym 0x1008ff17, XF86AudioNext), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

    asigno el comando a los programas que inician con el sistema y me sigue sin funcionar.

    Uso Debian 5 Lenny con xfce4.

    Saludos Gracias

  11. miguel

    hola gracias a todos por la informacion.
    yo tengo un problema.
    tengo un hp portatil, exactamente un hp hdx 16
    Instale jaunty y todo bien menos el sonido y el micro digital.
    pense que podia ser alsa y actualice a la ultima version.
    entretanto logre arrrgla sonido y micro. Era tan facil como añadir esta linea
    options snd-hda-intel model=hp-hdx
    al archivo: /etc/modprobe.d/alsa-base.conf.

    Pero no se que paso que los controles de volumen y mute no funcionan correctamente. si que veo que sube y baja el volumen pero no hace nada.
    Me fijo en los controles de volumen y actua sobre el volumen de los auriculares.
    Como hago para que actue sobre el master?
    saludos y muchas gracias si me pueden ayudar.

  12. Emiliano

    Hola. Me funciona todo perfecto, excepto por la parte de la ejecucion del Script. Lo llame Script_teclas.sh igual que vos, y tambien le di los permisos de ejecucion. Probe mandando tambien el .xmodmaprc a la misma carpeta /.kde/Autostart/ aunque no se si eso tenia algun sentido; pero tampoco funciono. ¿Alguna idea de que puedo llegar a hacer para no tener que andar usando la consola cada vez?

  13. Alexis

    Gracias amigo, aunque es un Tuto de hace 2 años.

    Lo probaré no para activar esas teclas, sino para desactivarlas.

    Cuando juego al FOF por error presiono esas teclas y solo me molestan.

  14. Simply desire to say your article is as astounding. The clarity in your
    publish is simply cool and i can suppose you’re a professional on this subject.
    Fine along with your permission allow me to seize your RSS feed to
    stay updated with impending post. Thanks 1,000,000 and please
    continue the gratifying work.

Deja un comentario