X 中“较低层”的键盘重新映射

X 中“较低层”的键盘重新映射

键映射与 OSI 模型具有类似的流程,尽管定义不那么明确。我目前正在以比我想要的更高的级别重新映射。显然,第 1 层对应于物理键盘,第 7 层对应于应用程序,但我不确定还有多少其他层或它们的排列位置。

如果这是一台带有专用可编程物理键盘的台式机,我就可以了,但可惜,这是一台笔记本电脑,我需要在使用内置键盘时维护重新映射。

FWIW,我正在交换以下键对:[Tilde/Esc]、[Caps/LCtrl]、[Back{space,slash}]。我也使用 Dvorak,但它是在操作系统中以标准方式配置的。

目前,我正在修改 /usr/share/X11/xkb/keycodes/evdev 以在 X 中进行更改(并为控制台创建自定义布局文件,但这与此处无关)。我不确定它在“层堆栈”中的位置。

问题:我的键盘映射不会转换为 Proxmox 控制台会话,它使用 Web VNC 客户端。 (布局也不适用,但这是预期的。)问题显然是 VNC 客户端将键盘挂接到尚未应用 evdev 重新映射的较低层。

在 Windows 中,我使用一个名为 KeyTweak 的实用程序来生成注册表的扫描码映射,这似乎基本上是“第 3 层”。我玩过的游戏显然将键盘挂在“第 2 层”,但这几乎不成问题,因为大多数游戏中的输入很少。

综上所述,我不确定 evdev 在我想象的 OSI 键盘模型中的位置,但如何在较低层重新映射?我不需要出于任何原因换出重新映射,因此这种更改基本上可以是永久性的。如果我能在 BIOS 中做到这一点,我会的。

答案1

答案竟然是udev。我基本上是跟着这个帖子,但要点是:

  • 安装evtest
  • 运行evtest并按要重新映射的键即可查看两个都扫描码和键码。
  • /etc/udev/hwdb.d/创建一个名为类似70-keyremap.hwdb以下内容的 新文件
    • 我假设这个数字是文件的顺序,但我没有任何现有文件作为其基础,所以我不确定它的先决条件是什么,它可能需要比它更高的数字。事实上,hwdb.dTumbleweed 上的目录对我来说并不存在,所以我必须创建它,但它仍然有效。
  • 跑步systemd-hwdb update
  • 重启

_

# This is from the brokkr.net post I linked above
# Format can be found on [https://wiki.archlinux.org/title/Map_scancodes_to_keycodes].

$ cat 70-keymap.hwdb
evdev:atkbd:dmi:bvn*:bvr*:bd*:svn*:pn*:pvr*
 KEYBOARD_KEY_01=41     # Remap Tilde to Esc
 KEYBOARD_KEY_29=01     # Remap Esc to Tilde (evtest showed "1" but when I put that without the leading zero, it was interpreted as the literal [1] key.)
 KEYBOARD_KEY_3A=29     # Remap Caps to LCtrl
 KEYBOARD_KEY_1D=58     # Remap LCtrl to Caps
 KEYBOARD_KEY_0E=43     # Remap Backspace to Backslash
 KEYBOARD_KEY_2B=14     # Remap Backslash to Backspace

更新: 上述方法在我的笔记本电脑上效果很好,但是当我连接它时,外部键盘仍然使用默认的键盘映射。事实证明,这是因为内部键盘使用 PS/2 进行通信,PS/2 仍然使用 AT 扫描码(atkbd在设备字符串中),但 USB 完全不同。我最终不得不再次运行 evtest 以从 USB 板上获取扫描码并编写另一张地图。这是我生成的文件:

evdev:atkbd:dmi:*
 KEYBOARD_KEY_01=41
 KEYBOARD_KEY_29=01
 KEYBOARD_KEY_3A=29
 KEYBOARD_KEY_1D=58
 KEYBOARD_KEY_0E=43
 KEYBOARD_KEY_2B=14

evdev:input:b0003v*
 KEYBOARD_KEY_70029=41
 KEYBOARD_KEY_70035=01
 KEYBOARD_KEY_70039=29
 KEYBOARD_KEY_700e0=58
 KEYBOARD_KEY_7002a=43
 KEYBOARD_KEY_70031=14

相关内容