Iré con la pregunta en orden inverso:
- ¿Por qué hay tantos?
Esos son dispositivos que representan la mayoría de las entradas presentes en una máquina (hay otros, por ejemplo, no se administrará un micrófono /dev/input
). Contrariamente a la suposición de que un teclado más un mouse darían 2 dispositivos, incluso el teclado más simple y el mouse más simple aún darían 6 de ellos.
¿Por qué 6? Porque Xorg creará un teclado de entrada de prueba y un mouse de entrada de prueba (ambos virtuales) durante su inicio. Además, agregará el teclado de prueba con el teclado real en un dispositivo virtual principal. es decir, realizará muxing de la entrada. Lo mismo sucederá con la prueba y el mouse real.
Además, una computadora típica (computadora de escritorio o portátil) tiene otros botones además del teclado: botón de encendido, botón de suspensión.
Los eventN
dispositivos allí son dispositivos para las cosas que Xorg crea y para lo que tiene la computadora. El N
proviene de ID secuenciales y es análoga a la ID en xinput
. Por ejemplo, en mi máquina tengo:
[~]# ls -l /dev/input/
total 0
drwxr-xr-x 2 root root 100 Jan 26 16:01 by-id
drwxr-xr-x 2 root root 140 Jan 26 16:01 by-path
crw-rw---- 1 root input 13, 64 Jan 26 16:01 event0
crw-rw---- 1 root input 13, 65 Jan 26 16:01 event1
crw-rw---- 1 root input 13, 74 Jan 26 16:01 event10
crw-rw---- 1 root input 13, 75 Jan 26 16:01 event11
crw-rw---- 1 root input 13, 76 Jan 26 16:01 event12
crw-rw---- 1 root input 13, 77 Jan 26 16:01 event13
crw-rw---- 1 root input 13, 66 Jan 26 16:01 event2
crw-rw---- 1 root input 13, 67 Jan 26 16:01 event3
crw-rw---- 1 root input 13, 68 Jan 26 16:01 event4
crw-rw---- 1 root input 13, 69 Jan 26 16:01 event5
crw-rw---- 1 root input 13, 70 Jan 26 16:01 event6
crw-rw---- 1 root input 13, 71 Jan 26 16:01 event7
crw-rw---- 1 root input 13, 72 Jan 26 16:01 event8
crw-rw---- 1 root input 13, 73 Jan 26 16:01 event9
crw-rw---- 1 root input 13, 63 Jan 26 16:01 mice
crw-rw---- 1 root input 13, 32 Jan 26 16:01 mouse0
crw-rw---- 1 root input 13, 33 Jan 26 16:01 mouse1
Y xinput
me da identificaciones análogas:
[~]$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Optical Mouse id=10 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ USB 2.0 Camera id=11 [slave keyboard (3)]
↳ Asus Laptop extra buttons id=12 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=13 [slave keyboard (3)]
(Mira que eventN
corresponde a id=N
)
Sin Xorg
1.1 ¿Cuál es el propósito de este archivo?
Tenga en cuenta que todas las entradas aleatorias (incluida mi cámara USB) son vistas por Xorg como parte del teclado virtual. Esto permite la entrada de muxing y demuxing. Por ejemplo, puedo mover mi mouse a través de mi mouse USB o mi trackpad y una aplicación no necesita saber la diferencia.
(El hecho de que la cámara USB sea parte del teclado virtual se debe a que tiene un botón para encenderla y apagarla. Y como es un botón, se convierte en parte del subsistema del teclado. La entrada de video real se maneja /sys/class/video4linux
. )
En otras palabras, para una aplicación realmente solo hay un teclado y un solo mouse. Pero tanto Xorg como el núcleo necesitan saber las diferencias. Y esto lleva a la última parte:
1.2 ¿Por qué no simplemente enviarlo directamente desde el kernel al servidor X?
Porque Xorg necesita saber la diferencia.
Y hay situaciones en las que es útil. Puede reasignar claves en Xorg a cada dispositivo de entrada esclavo de manera diferente. Por ejemplo, tengo un juego de juego con pedales, cuando se usa en un juego de carreras a, by cpara cada uno de sus pedales. Sin embargo, cuando programo reasignar estas teclas a Esc, Ctrly Alt, sin reasignar las teclas en el teclado mismo.
Además, no es necesario que una máquina ejecute Xorg. Por ejemplo, en un servidor sin cabeza puedo obtener el siguiente resultado:
[~]$ ls -l /dev/input/
total 0
drwxr-xr-x 2 root root 80 Nov 8 02:36 by-path
crw-rw---- 1 root input 13, 64 Nov 8 02:36 event0
crw-rw---- 1 root input 13, 65 Nov 8 02:36 event1
crw-rw---- 1 root input 13, 66 Nov 8 02:36 event2
Donde los dispositivos de entrada corresponden a puertos serie (especialmente en este caso, lo hacen) en lugar de teclado o mouse.
gpm
).gpm
demonio o GTK2 en framebuffer.No existe tal cosa como "enviarlo directamente". Las aplicaciones deben tener algún método para leer los datos, y en Unix se hace de la misma manera que leen los archivos normales creando un nodo de dispositivo que funciona con las llamadas normales del sistema de archivos IO para permitir que las aplicaciones los abran y los lean.
Hay otras fuentes de entrada además del mouse y el teclado. Puede averiguar qué es cada uno mirando
/sys/class/input
. Allí podrá ajustar archivos con esos mismos nombres inputNN que son enlaces simbólicos a otro nodo en el sysfs que describe el dispositivo que representan. Otras fuentes comunes incluyen tarjetas de sonido (que señalan cuando las cosas están conectadas y desconectadas) y el botón de encendido físico en la computadora.fuente