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

Joh*_*ohn 5 drivers keyboard

我很想知道带有额外键的键盘是如何工作的。例如,假设我有以下键盘:

在此处输入图片说明

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

这就是我认为会发生的事情:

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

我对么?

dir*_*rkt 5

对输入层的非常简要的概述:

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

对于 USB 键盘,存在称为HID(人机接口设备)的标准。这不仅适用于键盘,还适用于鼠标、操纵杆和其他输入设备。所以设备会有一个描述符告诉内核它可以发出什么样的信号,包括静音在内的很多键的代码都是标准化的。

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

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

内核输入层获取扫描码(与物理键对应的数字,对设备而言是唯一的)并将它们转换为键码(与所有设备标准化的逻辑键对应的数字)。两者都作为 上的事件提供/dev/input/eventX。您可以使用evdev来查看这些事件,以及showkeydumpkeys等看到转换表。

X 服务器(或 Wayland)读取所有这些事件,并将它们转换为关键符号(如等,或特殊符号aáAudioMute)。X 应用程序可以接收这个符号,并采取相应的行动。你可以看到使用xev应用程序看到这一层,并与配置它xmodmapxkbd你的规范xorg.conf

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

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


use*_*253 1

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

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

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

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