我有一个老式 IBM 122 键 M 型键盘,我正在对其进行改造,以便在现代计算机上使用。我正在使用 Teensy 2.0 进行编码并处理 USB 端的事情。我从 Humble Hacker 键盘项目借用了固件(https://github.com/humblehacker/keyboard),我在构建配置中添加了额外的键。到目前为止,一切都很好。
所有“常规”键都可以工作,但内核似乎正在删除额外的键(F13-F24等)。
运行/lib/udev/keymap -i input/event0
显示所有正常按键的扫描码,但没有显示额外按键的扫描码。
运行wireshark
USB端口抓包显示键盘正在发送扫描代码,但看起来内核只是原则上丢弃它们。
我觉得这是内核驱动程序中的某些内容根本没有提供它不期望的扫描代码。
我认为内核源代码中某个文件中会有某种“主”键映射.h
,但到目前为止,我还没有成功地找到它。
值得强调的是,我并不是像我之前的许多人那样询问如何映射 X 中的额外键。这是一个低级的、显然与内核相关的问题。暂时假设我根本不会使用 X。我需要的是在运行时显示扫描代码/lib/udev/keymap -i
,我可以从那里完成剩下的事情。
答案1
内核看到奇怪的扫描代码并丢弃它们。我会尝试获取这些扫描代码值,然后更新硬件数据库索引。简而言之,计划是这样的:
从 dmesg 输出获取代码 - 当按下未知的键码时,dmesg 应该输出类似这样的内容:
Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0)
a0
是代码值。
创建自定义键码映射文件。示例和帮助位于默认文件中
(/usr/lib/udev/hwdb.d/60-keyboard.hwdb
对于 Arch,在其他发行版中可能有所不同)。通过运行以下命令更新并触发硬件数据库:
> udevadm hwdb --update > udevadm trigger /dev/input/eventXX
其中eventXX
对应于您的键盘(您可以通过运行获取它evtest
)。您也可以重新启动而不是触发。
在看拱门维基以及默认键码映射文件以获取更详细的描述(如果不是 Arch,则在您的发行版文档中)。
这是可靠且简单的方法,在内核级别进行映射,因此无论显示服务器、DE 等是什么,都可以工作。