键盘扫描码?
GNU / Linux文本控制台,不涉及X11,甚至不参与
已安装。键盘为美式布局,键盘默认为美式。核心
2.20.x版或者更高版本。
用C编写的应用程序正在获取键盘输入
翻译模式,即" XLATE"或者" UNICODE"。当一个键是
按下,应用程序会收到相应的
钥匙串。例如,我们按F1
读取" \ 033 [[A"
。
在内核将密钥字符串发送到应用程序之前,它
必须知道按下了哪个键,即它必须知道按下了哪个键
扫描码。在上面的F1示例中,密钥的扫描代码
按下是59或者0x3b。
也就是说,即使键盘处于翻译模式,
扫描码保存在内存中的某个位置。怎么能
应用程序无需切换键盘即可访问它们
是RAW模式还是MEDIUMRAW模式?代码段会有所帮助。
解决方案
当然,我们要查看的代码在kbd-1.12.tar.bz2中,这是'kbd'软件包的源包。 " kbd"软件包提供了诸如" dumpkeys"," showkeys"和" loadkeys"之类的工具,这些工具可用于查看当前的键盘映射,检查哪些键发出哪些扫描代码以及加载新的映射。
我们将必须通过ioctls与内核进行通信,这非常复杂,因此,我建议阅读该程序包的源代码以了解其完成方式。
这是指向压缩包的链接:kbd-1.12.tar.bz2(618K)。
在航站楼,我进入
dumpkeys -f > test.txt
并且有大量的详细信息,包括:
keycode 29 = Control ... string F1 = "3[[A" string F2 = "3[[B" string F3 = "3[[C" string F4 = "3[[D" string F5 = "3[[E" string F6 = "3[17~" string F7 = "3[18~" string F8 = "3[19~" ... string Prior = "3[5~" string Next = "3[6~" string Macro = "3[M" string Pause = "3[P"
默认情况下,我的发行版中包含dumpkeys。但是我们应该能够在jerub发布的内容中找到它。我将从查看" kbd-1.12 / src / loadkeys.y"开始。
看起来内核负责保存该数据,并且可以向知道如何询问的人报告。
我们可能需要查看kbdev
或者evdev
(对于启动器来说,请查看内核源目录中的Documentation / input / input.txt
文件)。这对于控制台访问有效。
可能是我们在错误的文件描述符上发出了ioctl命令,请检查是否有来自ioctl和tcsetattr的错误代码。
我们应该打开控制台设备,然后在该设备上发出键盘翻译命令。我们必须基本上模仿X服务器正在做什么。
这是指向codesearch.google.com上的源代码的链接。