use*_*941 16 linux kernel keyboard-shortcuts keyboard linux-kernel
我有一个老式的 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)
Run Code Online (Sandbox Code Playgroud)a0是代码值。
创建自定义键码映射文件。示例和帮助位于默认文件中
(/usr/lib/udev/hwdb.d/60-keyboard.hwdb对于 Arch,在其他发行版中可能有所不同)。
通过运行以下命令更新并触发硬件数据库:
> udevadm hwdb --update
> udevadm trigger /dev/input/eventXX
Run Code Online (Sandbox Code Playgroud)其中eventXX对应于您的键盘(您可以通过运行获取它evtest)。您也可以重新启动而不是触发。
查看Arch wiki和默认键码映射文件以获取更详细的描述(如果不是 Arch,则查看您的发行版文档)。
这是可靠且简单的方法,在内核级别进行映射,因此无论显示服务器、DE 等是什么,都可以工作。
| 归档时间: |
|
| 查看次数: |
1673 次 |
| 最近记录: |