3

GNU/Linux 文本控制台,不涉及 X11,甚至没有安装。键盘是美国布局,键盘映射美国默认。内核版本 2.20.x 或更高版本。

用 C 语言编写的应用程序在翻译模式下获取键盘输入,即XLATEUNICODE. 当一个键被按下时,应用程序接收到相应的键串。例如,您按 F1,应用程序读取"\033[[A".

在内核向应用程序发送密钥字符串之前,它必须知道哪个键被按下,即它必须知道它的扫描码。在上面的 F1 示例中,按下的键的扫描码是 59 或 0x3b。

也就是说,即使键盘处于翻译模式,扫描码也会保存在内存中的某个位置。应用程序如何在不切换键盘 RAWMEDIUMRAW模式的情况下访问它们?一个代码片段会有所帮助。

4

4 回答 4

2

可能是您在错误的文件描述符上发出 ioctl 命令,检查从 ioctl 和 tcsetattr 返回的错误代码。

您应该打开控制台设备,然后在该设备上发出键盘翻译命令。您必须基本上模仿 X 服务器在做什么。

这是codesearch.google.com上源代码的链接。

于 2008-09-19T15:44:56.860 回答
1

当然,您要查看的代码位于 kbd-1.12.tar.bz2 中,它是“kbd”包的源包。'kbd' 包提供了诸如 'dumpkeys'、'showkeys' 和 'loadkeys' 之类的工具,它们对于查看当前键盘映射、检查哪些键发出哪些扫描码以及加载新映射很有用。

您将不得不通过 ioctls 与内核进行通信,这非常复杂,因此我建议您阅读该软件包的源代码以了解它是如何完成的。

这是 tarball 的链接:kbd-1.12.tar.bz2 (618K)

于 2008-09-18T07:46:51.240 回答
0

您可能想查看kbdevevdev(查看Documentation/input/input.txt内核源代码目录中的文件以获取初学者。)这将适用于控制台访问。

于 2008-09-18T12:50:23.180 回答
0

在我进入的终端

dumpkeys -f > test.txt

并且有大量详细信息,包括:

键码 29 = 控制
...
字符串 F1 = "\033[[A"
字符串 F2 = "\033[[B"
字符串 F3 = "\033[[C"
字符串 F4 = "\033[[D"
字符串 F5 = "\033[[E"
字符串 F6 = "\033[17~"
字符串 F7 = "\033[18~"
字符串 F8 = "\033[19~"
...
字符串先验 = "\033[5~"
string Next = "\033[6~"
string Macro = "\033[M"
string Pause = "\033[P"

我的发行版中默认包含了 dumpkeys。但是您应该能够在jerub发布的内容中找到它。我会先看kbd-1.12/src/loadkeys.y

看起来内核负责保存这些数据,并且可以向知道如何询问的人报告。

于 2008-09-18T08:02:34.977 回答