Acerca de
Tutoriales
Comunidad
Actualidad
Enlaces





En macprogramadores.org
En Internet

Trucos

Cómo solucionar el problema del teclado con Linux para x86 sobre Virtual PC



Las distribuciones de Linux para x86 se pueden instalar en Virtual PC, pero desgraciadamente algunas teclas no funcionan correctamente con el teclado en español. Si usted ha sufrido este problema aquí le enseñamos como solucionarlo.


Al arrancar Linux uno de los comandos que ejecuta es el comando:

loadkey /usr/share/kbd/keymaps/i386/qwerty/es.map.gz

El cual carga la configuración del teclado que está almacenada en el fichero del idioma para el que está configurado. Por ejemplo en Slackware el script de arranque que ejecuta este comando está en /etc/rc.d/rc.keymap. Por desgracia el fichero es.map.gz tiene algunos problemas con alguna teclas del teclado de Apple que vamos a explicar como solucionar aquí.

Antes de nada conviene saber que cuando se pulsa una tecla se generan uno o más scan codes, los cuales recoge el driver de teclado del kernel de Linux. Una simple pulsación de tecla puede tener hasta 6 scan codes los cuales se suelen escribir en notación hexadecimal, por ejemplo al pulsar y soltar la tecla de tabulador del teclado en español se generan los scancodes 0x0f 0x8f. El controlador de teclado del kernel de Linux puede enviar estos scan codes directamente a un programa cuando el programa pide el modo scan codes (p.e. en el caso de XWindows, este procesa directamente los scan codes de teclado). Aunque en modo consola es mas típico que estos scan codes se conviertan a través de una tabla en key codes, los cuales recibe un programa cuando se encuentra en modo key codes (un modo no muy usado por los programas). Estos key codes se representan con números en decimal que no tienen porque corresponder con sus scan codes, por ejemplo a los scan codes 0x0f, 0x8f les corresponden los keycodes 15, 15. Si el programa no está en modo key codes, estos códigos pasan por la tabla de keymap cargada por loadkeys, en nuestro caso es.map.gz, y se convierten en una cadena con uno o más caracteres que se transmiten a la entrada estándar del programa. Esta cadena puede tener un sólo carácter como por ejemplo "\t", o bien varios caracteres lo cual suele ocurrir con secuencias de escape de la forma "\027rn". También dependiendo de las teclas de control previamente apretadas se producirá una cadena o otra, por ejemplo si estaba pulsada la tecla de mayúsculas cuando pulsamos la a se produce la cadena "A". Este último modo es el modo en el que suelen trabajar la mayoría de los programas de consola.

Podemos ver la asignación de teclas que ha cargado loadkeys usando el comando dumpkeys, o bien descomprimiendo y editando el fichero es.map.gz. Por otro lado podemos conocer el scan code de una tecla del teclado con el comando showkey -s, el key code de una tecla con showkey -k, o su cadena ASCII con showkey -a. Estos comandos nos puede ayudar a identificar los key codes de las teclas que no funcionan bien sobre Virtual PC y modificar el fichero es.map.gz convenientemente. En mi caso he creado el fichero es.virtualpc.map.gz el cual corrige las teclas que no funcionan bien en mi teclado y que puedo cargar con:

$ loadkeys es.virtualpc.map.gz

Lo ideal sería poner este comando en los script de arranque de sus sistema operativo para que ya siempre le arranque correctamente.

También puede cambiar los scan codes que corresponden a un key code con el comando:

$ setkeycodes 0c5b 125

Y los caracteres que genera un key code con:

$ loadkeys
keycode 125 = backslash