下一页 上一页 目录

2. 键盘通用知识

您按下键盘上的一个键,键盘控制器会向内核键盘驱动程序发送扫描码。有些键盘可以编程,但通常与按键对应的扫描码是固定的。当内核键盘驱动程序处于扫描码模式时(例如当 X 运行时),它只是将接收到的任何内容传输到应用程序。否则,它会将扫描码流解析为键码,对应于按键或释放事件。(单次按键最多可以生成 6 个扫描码。)当应用程序处于键码模式时(例如,showkey 和某些 X 服务器使用),这些键码会被传输到应用程序。否则,这些键码会在键盘映射表中查找,并在其中找到的字符或字符串会被传输到应用程序,或者执行其中描述的操作。(例如,如果按下并释放 a 键,则键盘会产生扫描码 0x1e 和 0x9e,这会转换为键码 30 和 158,然后作为 0141 传输,即 a 的 ASCII 或 latin-1 代码;如果按下并释放 Delete 键,则键盘会产生扫描码 0xe0 0x53 0xe0 0xd3,这些会转换为键码 111 和 239,然后作为 4 符号序列 ESC [ 3 ~ 传输,所有这些都假设使用美国键盘和默认键盘映射。分配了操作的按键组合的一个例子是 Ctrl-Alt-Del。)

不常见的扫描码和键码之间的转换可以使用 setkeycodes 实用程序设置 - 只有少数人会需要它。键码与字符或字符串或操作之间的转换,即键盘映射,是使用 loadkeyssetmetamode 实用程序设置的。有关详细信息,请参阅 getkeycodes(8)、setkeycodes(8)、dumpkeys(1)、loadkeys(1)、setmetamode(1)。dumpkeys 输出和 loadkeys 读取的文件的格式在 keymaps(5) 中描述。

在上面的描述中,当提到“传输到应用程序”时,实际上指的是“传输到终端驱动程序”。也就是说,进一步的处理就像通过串行线传入的文本一样。此处理的详细信息由程序 stty 设置。


下一页 上一页 目录