Vado con la domanda in ordine inverso:
- Perché ce ne sono così tanti?
Questi sono dispositivi che rappresentano la maggior parte degli ingressi presenti su una macchina (ce ne sono altri, ad esempio un microfono non verrà gestito /dev/input
). Contrariamente al presupposto che una tastiera più un mouse darebbero 2 dispositivi, anche la tastiera più semplice e il mouse più semplice ne darebbero ancora 6.
Perché 6? Perché Xorg creerà una tastiera di input di test e un mouse di input di test (entrambi virtuali) durante l'avvio. Inoltre, aggregherà la tastiera di test con la tastiera effettiva in un dispositivo virtuale principale. cioè eseguirà il muxing dell'input. Lo stesso accadrà al test e al mouse attuale.
Inoltre un tipico computer (desktop o laptop) ha altri pulsanti oltre alla tastiera: pulsante di accensione, pulsante di sospensione.
I eventN
dispositivi lì dentro sono dispositivi per le cose che Xorg crea e per ciò che il computer ha. La N
deriva dagli ID sequenziali ed è analogo agli ID di xinput
. Ad esempio sulla mia macchina ho:
[~]# 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
E xinput
mi dà ID analoghi:
[~]$ 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)]
(Guarda che eventN
corrisponde a id=N
)
Senza Xorg
1.1 Qual è lo scopo di questo file?
Nota che tutti gli ingressi casuali (compresa la mia videocamera USB!) Sono visti da Xorg come parte della tastiera virtuale. Ciò consente input di muxing e demuxing. Ad esempio, posso spostare il mouse tramite il mouse USB o il trackpad e un'applicazione non deve conoscere la differenza.
(Il fatto che la videocamera USB faccia parte della tastiera virtuale è perché ha un pulsante per accenderla e spegnerla. E dal momento che è un pulsante, diventa parte del sottosistema tastiera. Viene gestito l'effettivo ingresso video /sys/class/video4linux
. )
In altre parole, per un'applicazione esiste davvero solo una tastiera e un solo mouse. Ma sia Xorg che il kernel devono conoscere le differenze. E questo porta all'ultima parte:
1.2 Perché non inviarlo direttamente dal kernel al server X?
Perché Xorg ha bisogno di sapere la differenza.
E ci sono situazioni in cui è utile. È possibile rimappare le chiavi in Xorg su ciascun dispositivo di input slave in modo diverso. Ad esempio, ho un set di gioco con i pedali, quando viene utilizzato in un gioco di corse in output a, be cper ciascuno dei suoi pedali. Eppure, durante la programmazione sono rimappare queste chiavi Esc, Ctrle Altsenza rimappatura i tasti della tastiera stessa.
Inoltre, non è necessario che una macchina esegua Xorg. Ad esempio, su un server senza testa posso ottenere il seguente output:
[~]$ 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
Laddove i dispositivi di input corrispondono a porte seriali (in particolare in questo caso lo fanno) anziché a tastiera o mouse.