我将以相反的顺序回答这个问题:
- 为什么这么多?
这些是代表机器上大多数输入的设备(还有其他设备,例如,将不会在中管理麦克风/dev/input
)。与一个键盘加一个鼠标可以提供2个设备的假设相反,即使最简单的键盘和最简单的鼠标也仍然可以提供6个设备。
为什么是6?因为Xorg在启动期间会创建一个测试输入键盘和一个测试输入鼠标(均为虚拟)。同样,它将把测试键盘和实际键盘聚合到一个主虚拟设备中。即它将执行输入的多路复用。测试鼠标和实际鼠标也会发生相同的情况。
另外,典型的计算机(台式机或笔记本电脑)除键盘外还具有其他按钮:电源按钮,睡眠按钮。
其中的eventN
设备用于Xorg创建的东西以及计算机所拥有的设备。在N
来自顺序ID和类似于在的ID xinput
。例如,在我的机器上,我有:
[~]# 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
并xinput
给我类似的ID:
[~]$ 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)]
(eventN
与对应的外观id=N
)
没有Xorg
1.1该文件的目的是什么?
请注意,Xorg将所有随机输入(包括我的USB摄像头!)视为虚拟键盘的一部分。这允许输入的混合和解复用。例如,我可以通过USB鼠标或触控板移动鼠标,而应用程序不需要知道它们之间的区别。
(USB摄像头是虚拟键盘的一部分,这是因为它具有用于打开和关闭它的按钮。由于a是按钮,因此它成为键盘子系统的一部分。实际的视频输入在中处理/sys/class/video4linux
。 )
换句话说,对于一个应用程序来说,实际上只有一个键盘和只有一个鼠标。但是Xorg和内核都需要知道它们之间的差异。这导致了最后一部分:
1.2为什么不直接将其从内核发送到X服务器?
因为Xorg需要知道区别。
在某些情况下它很有用。您可以将Xorg中的键重新映射到每个从属输入设备。例如,我有一个带踏板的游戏机,在赛车游戏中使用时,会输出a,b并c为其每个踏板输出。然而,编程时我重新映射这些键Esc,Ctrl并且Alt,不重新映射键盘本身上的按键。
另外,机器也不必运行Xorg。例如,在无头服务器上,我可以得到以下输出:
[~]$ 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
输入设备对应于串行端口(在这种情况下,它们对应)而不是键盘或鼠标。