No entiendo los dispositivos terminales virtuales (por ejemplo /dev/tty1
), pero sé que puedo "cambiar" tty1
si presiono ctrl + alt + f1
.
Tengo una distribución de teclado personalizada, que está disponible /usr/share/X11/xkb/symbols/us
pero sólo "funciona" si X se está ejecutando.
Tanto los terminales virtuales como X parecen gestionar las entradas/salidas del teclado a su manera, pero presumiblemente ambos interactúan con el kernel (Linux) de alguna manera, lo que debe proporcionar algún tipo de abstracción para el hardware del teclado.
¿Cómo maneja el kernel de Linux las entradas/salidas del teclado? ¿Existe algún archivo fuente que pueda ver con una lista de todos los códigos de escaneo/códigos clave/keysims/etc. y, tal vez, con la lógica general de cómo Linux maneja toda la idea de un "teclado"?
(Estoy ejecutando Lubuntu).
Respuesta1
Ver¿Cómo funcionan la entrada y salida de texto por teclado?para una visión general del tema.
Más detalladamente, en Linux, el kernel recibe códigos de escaneo del hardware y los convierte en códigos clave. (Esta terminología no es completamente estándar; es posible que se utilice “código de escaneo” o “código clave” para ambos). El funcionamiento de esta conversión depende del controlador del teclado. Para teclados PS/2, puede configurarlo consetkeycodes
. Para teclados USB, puedes configurarlovía udev. Ver tambiénel arco wiki. Todos los dispositivos de entrada del usuario, incluidos teclados y ratones, se exponen a través de dispositivos de eventos /dev/input/event*
.
En una consola Linux, los códigos clave se asignan a secuencias de escape de acuerdo con el mapa de teclas de la consola. Dado que una consola es una terminal de texto, las aplicaciones ven bytes, con caracteres imprimibles que se representan a sí mismas y teclas de función codificadas mediante caracteres de control o secuencias de escape. Puedes cambiar el mapeo conloadkeys
. El mapeo utiliza dos niveles de direccionamiento indirecto, desde la combinación de código clave+modificador (con tres modificadores: shift
, control
, alt
) hasta símbolo de clave y de símbolo de clave a cadena (carácter o secuencia de escape). El conjunto de símbolos de claves es fijo, por lo que si desea definir combinaciones personalizadas, deberá utilizar símbolos de claves existentes que de otro modo no se usarían, como F13
,, F14
...
Si desea ver el código fuente que implementa estas traducciones, mirecontroladores de tecladoycódigo de entrada genérico, yudevylibudev.
X11 (la GUI) tiene su propia forma de asignar códigos clave a lo que reciben las aplicaciones. Las aplicaciones X11 ven símbolos de claves y modificadores, por lo que no es necesario codificar más las teclas de función. De hecho, hay dos formas de definir mapas de teclas en X: el método clásico xmodmap y el mecanismo más nuevo XKB, que es más potente pero más complejo.