我很想知道带有额外键的键盘是如何工作的。例如,假设我有以下键盘:
你可以看到它有额外的键。现在说我按下了静音键,在这种情况下会发生什么?
这就是我认为会发生的事情:
我对么?
对输入层的非常简要的概述:
您的键盘设备以某种方式连接到 PC,例如通过 USB 或 PS/2 端口。这种机制的内核驱动程序知道在键盘上按下某个键时如何处理通信。
对于 USB 键盘,存在称为HID(人机接口设备)的标准。这不仅适用于键盘,还适用于鼠标、操纵杆和其他输入设备。所以设备会有一个描述符告诉内核它可以发出什么样的信号,包括静音在内的很多键的代码都是标准化的。
尽管如此,有些键盘的按键不是标准化的(例如Fn某些键盘上的按键),这取决于制造商如何向这些按键发出信号。
内核中有一个特殊层用于处理 HID 设备。该层使原始 HID 通信可用/dev/hidrawX,然后继续将 HID 事件转换为内核输入事件。
内核输入层获取扫描码(与物理键对应的数字,对设备而言是唯一的)并将它们转换为键码(与所有设备标准化的逻辑键对应的数字)。两者都作为 上的事件提供/dev/input/eventX。您可以使用evdev来查看这些事件,以及showkey,dumpkeys等看到转换表。
X 服务器(或 Wayland)读取所有这些事件,并将它们转换为关键符号(如等,或特殊符号a,á如AudioMute)。X 应用程序可以接收这个符号,并采取相应的行动。你可以看到使用xev应用程序看到这一层,并与配置它xmodmap和xkbd你的规范xorg.conf。
要对 作出反应AudioMute,需要一些应用程序。通常,这是窗口管理器,但如果您的窗口管理器不这样做,则单独的应用程序也将起作用。
所以没有单一的“键盘驱动程序”,它要复杂得多,并且没有特别要求“静音”。
一般来说,你的理解是正确的。当您按下某个键时,键盘会发送一个扫描码,基本上是识别每个键的数字序列。扫描码映射到键码。每个键码对应一个函数,该函数定义程序应如何对特定按键做出反应。请注意,Xorg 和控制台使用不同的键码集。我对 Wayland 不太了解,但也许它也使用自己的一组键码。键码映射到键符号。键符号允许开发人员在更高的抽象级别上使用键盘。
showkey --scancode您可以通过分别执行和在控制台上看到扫描码和键码showkey --keycode。在 Xorg 中,您应该使用xev后者。
这些抽象级别允许您创建灵活且复杂的映射方案,从而影响 Linux 环境的不同部分。这篇ArchWiki 文章包含大量有关绘图技术的信息,如果您想了解更多信息,请阅读它。
互联网上也有很多文章解释键盘如何在低级别工作。文章是在 1999 年还是 2010 年撰写并不重要 - 从那时起键盘方面并没有发生太多变化,但请记住 USB HID 设备的工作方式与“经典”PS/2 键盘不同。
| 归档时间: |
|
| 查看次数: |
968 次 |
| 最近记录: |