joh*_*und 5 linux xorg keyboard x11 keyboard-layout
我将尝试详细描述问题。我经常在上网本上使用外接键盘。键盘是“TK Stealth”:
您可以看到,小键盘与经典的小键盘非常相似,但实际上箭头键的映射方式不同 - 作为宽键盘上的附加箭头键。
我想让它们像数字键盘一样映射,即“8”==“向上”、“2”==“向下”、“4”==“左”、“6”==“右”和很快。
只有在连接了这种类型的键盘时,这些设置才能起作用。
我尝试使用xmodmap /home/johnfound/TKStelth以下地图文件“TKStelth”来实现这一点:
keycode 79 = KP_Home KP_Home KP_Home KP_Home
keycode 80 = KP_Up KP_Up KP_Up KP_Up
keycode 81 = KP_Prior KP_Prior KP_Prior KP_Prior
keycode 83 = KP_Left KP_Left KP_Left KP_Left
keycode 84 = KP_Begin KP_Begin KP_Begin KP_Begin
keycode 85 = KP_Right KP_Right KP_Right KP_Right
keycode 87 = KP_End KP_End KP_End KP_End
keycode 88 = KP_Down KP_Down KP_Down KP_Down
keycode 89 = KP_Next KP_Next KP_Next KP_Next
keycode 90 = KP_Insert KP_Insert KP_Insert KP_Insert
keycode 91 = KP_Delete KP_Delete KP_Delete KP_Delete
Run Code Online (Sandbox Code Playgroud)
它实际上有效,但有丑陋的副作用。例如,有时布局恢复为默认值,我必须手动运行上述脚本。将脚本包含在初始化脚本中会导致一些冲突/锁定,从而使操作系统在从挂起状态恢复和更改屏幕分辨率后挂起几分钟。这样,我被迫从初始化脚本中删除脚本。
我在某处读到 xmodmap 实际上是处理键盘布局的旧方法。
所以,问题是:如何配置 Linux 来正确处理这个键盘?
附加信息:带有 XFCE 的 Manjaro Linux。键盘配置有两种布局 - 美式和保加利亚语,在上述配置更改后它们必须保留。
只要我找到正确的解决方案,我就会回答我自己的问题。
有一个名为keyfuzz的程序,它可以根据输入设备更改内核使用的键盘映射 - 即分别针对连接到计算机的每个键盘。
该程序有两个问题在文档中没有正确描述:
/dev/console发出“标准”扫描码的表单,而与键盘无关。为了根据键盘的地址测试键盘的扫描码,您需要使用名为getscancodes/dev/input/KEYBOARD的程序。请注意,从上述链接下载的文件未正确压缩。它被命名为,但采用 ZIP 算法压缩。该包包含源代码以及预编译的二进制文件。getscancodes.tar.gz
就我而言,keyfuzz 配置文件如下所示:
### evdev 1.0.0., driver 'TK Stealth keyboard'
### Proper old-style numpad handling
0x70059 107
0x7005A 108
0x7005B 109
0x7005C 105
0x7005D 108
0x7005E 106
0x7005F 102
0x70060 103
0x70061 104
0x70062 110
0x70063 111
Run Code Online (Sandbox Code Playgroud)
解决方案是使用udev规则文件并在添加所需键盘时启动 keyfuzz。
为此,您需要添加一个文件/etc/udev/rules.d/mykeyboard.rules,其中包含(在我的例子中):
ACTION=="add", ATTRS{idVendor}=="2516", RUN+="/usr/lib/systemd/scripts/keyfuzz start"
Run Code Online (Sandbox Code Playgroud)
现在,插入键盘后,keyfuzz 启动脚本将启动并修补键盘解码表。