Ich werde mit der Frage in umgekehrter Reihenfolge gehen:
- Warum gibt es so viele?
Dies sind Geräte, die für die meisten Eingaben auf einer Maschine stehen (es gibt andere, in denen beispielsweise ein Mikrofon nicht verwaltet wird /dev/input
). Entgegen der Annahme, dass eine Tastatur plus eine Maus 2 Geräte ergeben würde, würden selbst die einfachste Tastatur und die einfachste Maus noch 6 davon ergeben.
Warum 6? Weil Xorg beim Start eine Testeingabetastatur und eine Testeingabemaus (beide virtuell) erstellt. Außerdem wird die Testtastatur mit der tatsächlichen Tastatur zu einem virtuellen Hauptgerät zusammengefasst. dh es wird ein Muxen des Eingangs durchgeführt. Das gleiche passiert mit dem Test und der tatsächlichen Maus.
Außerdem verfügt ein typischer Computer (Desktop oder Laptop) neben der Tastatur über weitere Tasten: Ein- / Aus-Taste, Sleep-Taste.
Die eventN
Geräte dort sind Geräte für die Dinge, die Xorg erstellt, und für das, was der Computer hat. Das N
kommt von sequentiellen IDs und ist analog zu den IDs in xinput
. Zum Beispiel auf meinem Computer habe ich:
[~]# 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
Und xinput
gibt mir analoge IDs:
[~]$ 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)]
(Schauen Sie, das eventN
entspricht id=N
)
Ohne Xorg
1.1 Was ist der Zweck dieser Datei?
Beachten Sie, dass alle zufälligen Eingaben (einschließlich meiner USB-Kamera!) Von Xorg als Teil der virtuellen Tastatur gesehen werden. Dies ermöglicht das Muxen und Demuxen von Eingaben. Zum Beispiel kann ich meine Maus über meine USB-Maus oder mein Trackpad bewegen, und eine Anwendung muss den Unterschied nicht kennen.
(Die Tatsache, dass die USB-Kamera Teil der virtuellen Tastatur ist, liegt daran, dass sie über eine Taste zum Ein- und Ausschalten verfügt. Da es sich um eine Taste handelt, wird sie Teil des Tastatursubsystems. Die eigentliche Videoeingabe wird verarbeitet /sys/class/video4linux
. )
Mit anderen Worten, für eine Anwendung gibt es wirklich nur eine Tastatur und nur eine Maus. Aber sowohl Xorg als auch der Kernel müssen die Unterschiede kennen. Und das führt zum letzten Teil:
1.2 Warum nicht einfach direkt vom Kernel an den X-Server senden?
Weil Xorg den Unterschied kennen muss.
Und es gibt Situationen, in denen es nützlich ist. Sie können die Schlüssel in Xorg jedem Slave-Eingabegerät unterschiedlich zuordnen. Zum Beispiel habe ich ein Spielset mit Pedalen, wenn es in einem Rennspiel verwendet wird, das es ausgibt a, bund cfür jedes seiner Pedale. Doch bei der Programmierung ich diese Tasten neu zuordnen zu Esc, Ctrlund Alt, ohne die Tasten - Remapping auf der Tastatur selbst.
Es ist auch nicht erforderlich, dass auf einem Computer Xorg ausgeführt wird. Auf einem Headless-Server kann ich beispielsweise die folgende Ausgabe erhalten:
[~]$ 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
Wo die Eingabegeräte seriellen Schnittstellen entsprechen (insbesondere in diesem Fall) anstelle von Tastatur oder Maus.