当您按下键盘上的额外键时会发生什么?

当您按下键盘上的额外键时会发生什么?

我有兴趣了解带有额外按键的键盘如何工作。例如,假设我有以下键盘:

在此输入图像描述

您可以看到它有额外的键。现在说我按下了沉默的关键,这种情况下会发生什么?

这就是我认为发生的情况:

  • 信号将被发送到计算机。
  • 键盘设备驱动程序将接收该信号。
  • 键盘设备驱动程序将看到该信号是静音信号,因此它不会将其传递给操作系统,而是调用操作系统函数/系统调用来使计算机上的声音静音。

我对么?

答案1

输入层的非常简短的概述:

您的键盘设备以某种方式连接到 PC,例如通过 USB 或 PS/2 端口。此机制的内核驱动程序知道如何在按下键盘上的键时处理通信。

对于 USB 键盘,有一个标准称为高压气体放电管(人机接口设备)存在。这不仅适用于键盘,还适用于鼠标、操纵杆和其他输入设备。所以该设备将有一个描述符告诉内核它可以发出什么样的信号,以及许多按键的代码,包括沉默的是标准化的。

尽管如此,某些键盘的按键并未标准化(例如Fn某些键盘上的按键),这取决于制造商如何向这些按键发出信号。

内核中有一个特殊层用于处理 HID 设备。该层使原始 HID 通信在 处可用/dev/hidrawX,然后继续将 HID 事件转换为内核输入事件。

内核输入层采用扫码(与物理密钥相对应的数字,该设备唯一)并将它们转换为关键代码(与所有设备上标准化的逻辑键相对应的数字)。两者都作为事件提供/dev/input/eventX。您可以使用evdev查看这些事件, 和showkeydumpkeys查看转换表。

X 服务器(或 Wayland)读取所有这些事件,并将它们转换为关键符号(如 等aá或特殊的,如AudioMute)。 X 应用程序可以接收此符号,并采取相应的行动。您可以使用 see application来查看该层,并xev使用.xmodmapxkbdxorg.conf

为了对 做出反应AudioMute,需要一些应用程序。通常,这是窗口管理器,但如果您的窗口管理器不这样做,单独的应用程序也可以工作。

所以没有单一的“键盘驱动程序”,它要复杂得多,并且没有特别要求“静音”。

答案2

一般来说,你的理解是正确的。当您按下某个键时,键盘会发送一个扫描码,基本上是识别每个键的数字序列。扫描码映射到键码。每个键码对应一个函数,该函数定义程序应如何对特定按键做出反应。请注意,Xorg 和控制台使用不同的键码集。我对 Wayland 不太了解,但也许它也使用自己的一组键码。键码映射到键符号。键符号允许开发人员在更高的抽象级别上使用键盘。

showkey --scancode您可以通过分别执行和在控制台上看到扫描码和键码showkey --keycode。在 Xorg 中,您应该使用xev后者。

这些抽象级别允许您创建灵活且复杂的映射方案,从而影响 Linux 环境的不同部分。这ArchWiki 文章包含大量有关绘图技术的信息,如果您想了解更多信息,请阅读它。

还有很多文章互联网上解释键盘如何在底层工作的。文章是在 1999 年还是 2010 年撰写并不重要 - 从那时起键盘方面并没有发生太多变化,但请记住 USB HID 设备的工作方式与“经典”PS/2 键盘不同。

相关内容