GNU/Linux >> Tutoriales Linux >  >> Linux

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

Supongamos que presiono A tecla en un editor de texto y esto inserta el carácter a en el documento y lo muestra en la pantalla. Sé que la aplicación del editor no se comunica directamente con el hardware (hay un núcleo y otras cosas en el medio), entonces, ¿qué está pasando dentro de mi computadora?

Respuesta aceptada:

Hay varios escenarios diferentes; Voy a describir los más comunes. Los eventos macroscópicos sucesivos son:

  1. Entrada:el evento de pulsación de tecla se transmite desde el hardware del teclado a la aplicación.
  2. Procesamiento:la aplicación decide que porque la clave A fue presionado, debe mostrar el carácter a .
  3. Salida:la aplicación da la orden de mostrar a en la pantalla.

Aplicaciones GUI

La interfaz gráfica de usuario estándar de facto de los sistemas Unix es el sistema X Window, a menudo llamado X11 porque se estabilizó en la undécima versión de su protocolo central entre las aplicaciones y el servidor de visualización. Un programa llamado servidor X se encuentra entre el kernel del sistema operativo y las aplicaciones; proporciona servicios que incluyen la visualización de ventanas en la pantalla y la transmisión de pulsaciones de teclas a la ventana que tiene el foco.

Entrada

+----------+              +-------------+         +-----+
| keyboard |------------->| motherboard |-------->| CPU |
+----------+              +-------------+         +-----+
             USB, PS/2, …                 PCI, …
             key down/up

Primero, la información sobre la pulsación y liberación de teclas se transmite desde el teclado a la computadora y dentro de la computadora. Los detalles dependen del tipo de hardware. No me detendré más en esta parte porque la información sigue siendo la misma a lo largo de esta parte de la cadena:se presionó o soltó una determinada tecla.

         +--------+        +----------+          +-------------+
-------->| kernel |------->| X server |--------->| application |
         +--------+        +----------+          +-------------+
interrupt          scancode             keysym
                   =keycode            +modifiers

Cuando ocurre un evento de hardware, la CPU activa una interrupción, lo que hace que se ejecute algún código en el kernel. Este código detecta que el evento de hardware es una pulsación o liberación de tecla procedente de un teclado y registra el código de exploración que identifica la clave.

El servidor X lee eventos de entrada a través de un archivo de dispositivo, por ejemplo /dev/input/eventNNN en Linux (donde NNN es un número). Cada vez que hay un evento, el kernel indica que hay datos para leer desde ese dispositivo. El archivo del dispositivo transmite eventos de tecla arriba/abajo con un código de exploración, que puede o no ser idéntico al valor transmitido por el hardware (el núcleo puede traducir el código de exploración de un valor dependiente del teclado a un valor común, y Linux no lo hace). no retransmitirá los códigos de escaneo que no conoce).

X llama al código de escaneo que lee un código clave . El servidor X mantiene una tabla que traduce los códigos clave en keysyms (abreviatura de "símbolo de llave"). Los códigos clave son numéricos, mientras que los símbolos clave son nombres como A , aacute , F1 , KP_Add , Control_L , … El keysym puede diferir según las teclas modificadoras que se presionen (Shift , Ctrl , …).

Existen dos mecanismos para configurar la asignación de códigos clave a símbolos clave:

  • xmodmap es el mecanismo tradicional. Es una tabla simple que asigna códigos clave a una lista de símbolos clave (no modificados, desplazados, …).
  • XKB es un mecanismo más poderoso, pero más complejo, con mejor soporte para más modificadores, en particular para la configuración de dos idiomas, entre otros.

Las aplicaciones se conectan al servidor X y reciben una notificación cuando se presiona una tecla mientras una ventana de esa aplicación tiene el foco. La notificación indica que se presionó o soltó cierta tecla simbólica, así como qué modificadores se presionaron actualmente. Puede ver keysyms ejecutando el programa xev desde una terminal. Lo que la aplicación haga con la información depende de ella; algunas aplicaciones tienen combinaciones de teclas configurables.

En una configuración típica, cuando presiona la tecla etiquetada A sin modificadores, esto envía el keysym a a la aplicación; si la aplicación está en un modo en el que está escribiendo texto, esto inserta el carácter a .

La relación entre la distribución del teclado y xmodmap entra en más detalles sobre la entrada del teclado. ¿Cómo funcionan los eventos del mouse en Linux? ofrece una descripción general de la entrada del mouse en los niveles inferiores.

Salida

+-------------+        +----------+          +-----+         +---------+
| application |------->| X server |---····-->| GPU |-------->| monitor |
+-------------+        +----------+          +-----+         +---------+
               text or              varies          VGA, DVI,
               image                                HDMI, …

Hay dos formas de mostrar un carácter.

  • Representación del lado del servidor :la aplicación le dice al servidor X "dibuje esta cadena en esta fuente en esta posición". La fuente reside en el servidor X.
  • Representación del lado del cliente :la aplicación crea una imagen que representa el carácter en una fuente que elige, luego le dice al servidor X que muestre esa imagen.
Relacionado:¿Usar una contraseña para proteger un archivo de texto?

Consulte ¿Cuáles son los propósitos de los diferentes tipos de fuentes XWindows? para una discusión sobre la representación de texto del lado del cliente y del lado del servidor en X11.

Lo que sucede entre el servidor X y la Unidad de procesamiento de gráficos (el procesador en la tarjeta de video) depende mucho del hardware. Los sistemas simples hacen que el servidor X dibuje en una región de memoria llamada framebuffer, que la GPU recoge para mostrar. Los sistemas avanzados, como los que se encuentran en cualquier PC o teléfono inteligente del siglo XXI, permiten que la GPU realice algunas operaciones directamente para un mejor rendimiento. En última instancia, la GPU transmite el contenido de la pantalla píxel por píxel cada fracción de segundo al monitor.

Aplicación en modo texto, ejecutándose en una terminal

Si su editor de texto es una aplicación en modo texto que se ejecuta en una terminal, entonces es la terminal la que es la aplicación a los efectos de la sección anterior. En esta sección, explico la interfaz entre la aplicación de modo texto y la terminal. Primero describo el caso de un emulador de terminal corriendo bajo X11. ¿Cuál es la diferencia exacta entre un 'terminal', un 'shell', un 'tty' y una 'consola'? puede ser útil antecedentes aquí. Después de leer esto, es posible que desee leer mucho más detalladamente ¿Cuáles son las responsabilidades de cada componente Pseudo-Terminal (PTY) (software, lado maestro, lado esclavo)?

Entrada

      +-------------------+               +-------------+
----->| terminal emulator |-------------->| application |
      +-------------------+               +-------------+
keysym                     character or
                           escape sequence

El emulador de terminal recibe eventos como “Left fue presionado mientras Shift Estaba abajo". La interfaz entre el emulador de terminal y la aplicación en modo texto es un pseudo-terminal (pty) , un dispositivo de caracteres que transmite bytes. Cuando el emulador de terminal recibe un evento de pulsación de tecla, lo transforma en uno o más bytes que la aplicación puede leer desde el dispositivo pty.

Los caracteres imprimibles fuera del rango ASCII se transmiten como uno o más bytes según el carácter y la codificación. Por ejemplo, en la codificación UTF-8 del conjunto de caracteres Unicode, los caracteres del rango ASCII se codifican como un solo byte, mientras que los caracteres fuera de ese rango se codifican como varios bytes.

Pulsaciones de teclas que corresponden a una tecla de función o un carácter imprimible con modificadores como Ctrl o Alt se envían como una secuencia de escape . Las secuencias de escape normalmente constan del carácter de escape (valor de byte 27 =0x1B =

Linux
  1. ¿Qué es un Makefile y cómo funciona?

  2. ¿Cómo obtener la entrada y la salida en una terminal a un archivo de texto?

  3. ¿Qué es el DNS y cómo funciona?

  4. Cómo redirigir la salida a un archivo y stdout

  5. ¿Cómo funcionan las opciones '-s', '-t' y '-c' del comando tr en Unix?

Cómo comparar y fusionar archivos de texto en Linux (parte 2)

Cómo guardar la salida del comando de Linux en una imagen o un archivo de texto

Bash scripting:cómo escribir datos en archivos de texto

Cómo encontrar y reemplazar texto en Vim

Bash Scripting:cómo generar y formatear texto en Linux Shell

Cómo grabar screencast en Linux con clics del mouse y pulsaciones de teclas mostradas