键盘扫描码?

时间:2020-03-06 14:20:18  来源:igfitidea点击:

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上的源代码的链接。