GNU/Linux >> Tutoriales Linux >  >> Linux

¿Relación entre la distribución del teclado y Xmodmap?

Estoy usando Xubuntu. Antes de iniciar sesión, puedo elegir un diseño de teclado. Estoy usando xmodmap para reasignar algunas teclas.

Estoy interesado en dos cosas:

  1. Cómo cambia el estado de la asignación del teclado (a) cuando enciendo la computadora portátil, (b) durante el proceso de arranque y (c) cuando inicia sesión en el sistema (en estas tres fases) y cuando trabaja con el sistema (inicia sesión ).
  2. Qué causa qué símbolos se mostrarán en la pantalla (y se enviarán las teclas de control) durante las fases individuales. Cuando presiono alguna tecla, envía alguna señal al controlador del teclado (?) y luego debe haber algún proceso de decisión (aplicaciones y archivos de configuración) que determine qué símbolos se mostrarán. La respuesta a esta pregunta debería ser la lista de aplicaciones y rutas a esos archivos de configuración (estoy especialmente interesado en Ubuntu (sistema basado en Debian), pero puede describir algún otro sistema, pero se prefiere Ubuntu).

Respuesta aceptada:

Hay dos capas aquí, KEYCODE a mapeo KEYSYM y KEYSYM a mapeo de texto. Hay más capas si cuenta el núcleo, que tiene que asignar códigos de escaneo de teclado AT a un CÓDIGO CLAVE de estilo XT o un código HID de teclado USB a un CÓDIGO CLAVE. Un CÓDIGO CLAVE es simplemente un número entero sin signo de 8 bits que el kernel de un sistema operativo pasa al servidor X11. Puede variar entre sistemas operativos como Linux y Solaris. En Linux, estos CÓDIGOS CLAVE suelen ser el mismo número que se utiliza en los antiguos teclados XT para PC. Las computadoras más nuevas con teclados AT, PS/2 o USB generalmente solo asignan esos teclados al antiguo código XT para que la clave simplifique la vida.

Los códigos de teclado sin procesar, ya sean XT, AT, PS/2 o USB, representan una ubicación física en un teclado. El teclado XT solo envía un único número de 8 bits al presionar o soltar una tecla. La tecla q en un teclado XT estadounidense/británico envía el número 16. En un teclado francés, esa misma tecla física tiene la etiqueta a, pero aún envía 16. Son las capas superiores del sistema operativo las que le asignan un significado real. Cuando se suelta una tecla en un teclado XT, se envía el mismo código de tecla más 128. Para este ejemplo, cuando se presiona q, se envía un 16, pero al soltar, se envía el número 142 (16+128). Los teclados AT usan códigos de escaneo que son una serie de números y pueden ser bastante largos. Los lanzamientos de teclas agregan códigos adicionales. Por ejemplo, el código de escaneo para Pausa es E1, 1D, 45, E1, 9D, C5. La mayoría de los sistemas operativos, incluidos DOS, Windows, Linux, FreeBSD y BIOS, asignan códigos de escaneo a códigos de escaneo de estilo XT mucho más simples. También facilita la compatibilidad con teclados más nuevos que usan códigos diferentes, como los teclados USB que envían códigos HID. El sistema operativo asigna todos los códigos al mismo conjunto coherente de códigos antes de que X11 o la aplicación los vea.

Relacionado:¿Cómo hacer grep para esto o aquello (2 cosas) en un archivo?

X11 ignora esta parte del proceso, solo obtiene el CÓDIGO CLAVE del kernel y aplica su propio mapeo para convertir ese CÓDIGO CLAVE en un KEYSYM. Xmodmap es la herramienta estándar para controlar ese mapeo. Gran parte del comportamiento de la asignación del teclado es configurable, pero hay varios casos especiales como Num Lock, Mode Switch y Caps Lock/Shift Lock que están codificados en X11. Otros aspectos como Shift son configurables. Se puede asignar cualquier tecla para que actúe como shift, a diferencia de Mode Switch o Num Lock.

Los CÓDIGOS CLAVE representan claves físicas enviadas por el kernel del sistema operativo. Cada KEYCODE puede asignarse a 8 KEYSYM posibles. Solo se utilizan 4 y, a veces, se denominan niveles 1-4. El nivel 1 especifica el KEYSYM que se imprime cuando no hay modificadores activos. Suelen ser letras minúsculas y dígitos. Los modificadores son KEYCODE que modifican el KEYSYM generado por otros KEYCODE cuando el modificador está activo (presionado o activado). Los códigos de tecla modificadores también se controlan a través de Xmodmap. El nivel 2 especifica que se envíe un KEYSYM cuando se presiona el modificador shift. El nivel 3 se activa cada vez que se presiona el interruptor de modo KEYSYM. El nivel 4 se activa cuando tanto la tecla de mayúsculas como el interruptor de modo están activos.

Una vez que se ha generado un KEYSYM, este se puede interpretar directamente, pero la mayoría de las veces se convertirá en texto. No todos los KEYSYM se convierten en texto o solo pueden afectar a un futuro KEYSYM. Un ejemplo es Shift_L, por supuesto, que no tiene representación textual, pero también hay una serie de KEYSYM que se utilizan para componer otro carácter. Una lista de ellos en mi sistema está en /usr/share/X11/locale/en_US.UTF-8/Compose . Un ejemplo de ello es el KEYSYM dead_acute que, cuando se presiona, intentará convertir el siguiente KEYSYM en una letra acentuada aguda. Existe una asignación estándar para convertir KEYSYM en Unicode.

Ahora que se ha dicho todo esto, tenga en cuenta que Xmodmap está obsoleto y se reemplaza por XKB, que es mucho más sofisticado. Esto afecta la forma en que los KEYCODE se asignan a KEYSYM, pero no la forma en que el kernel genera los KEYCODE ni cómo los KEYSYM se convierten en texto o se componen, que sigue siendo el mismo. XKB se puede deshabilitar restaurando el comportamiento de Xmodmap. También tiene una capa de compatibilidad para admitir Xmodmap, pero puede tener problemas ya que no es completamente compatible. Las reglas de XKB están en /usr/share/X11/xkb/ y son mucho más sofisticados. Hay una buena documentación en otro lugar sobre cómo genera diseños de teclado para mapear KEYCODEs a KEYSYMs.

En cuanto a la consola de Linux, tiene sus propios diseños de teclado que se almacenan en /usr/share/keymaps y cargado con las loadkeys dominio. Cuando se encuentra en el BIOS y en etapas anteriores del cargador de arranque, incluido GRUB2, la asignación del teclado es cualquiera que sea el número al que el BIOS decida asignar la tecla.

Relacionado:Debian:Openssl actualizado a través de apt-get, ¿`openssl version` muestra la versión anterior?
Linux
  1. Cambiar el idioma y la distribución del teclado en varias distribuciones

  2. ¿Cómo funcionan la entrada de teclado y la salida de texto?

  3. ¿Cambiar la distribución/asignación del teclado tanto en la consola (tty) como en X de una manera agnóstica de X/consola?

  4. Combinación de teclas de mapeo con Xmodmap?

  5. ¿Forzar pantalla en blanco e ignorar entrada?

Cómo agregar y cambiar la distribución del teclado en Ubuntu 22.04 Desktop

Albert:un lanzador de teclado rápido y flexible

Arreglar el diseño de teclado incorrecto en Ubuntu

Secretos de plasma:idiomas adicionales y diseños de teclado

¿Cómo ocultar el indicador de distribución del teclado en Ubuntu 17.10 y versiones posteriores con Gnome 3?

Disposición del teclado Xephyr