因此,我花了整整几个小时试图弄清楚如何重新映射联想 ThinkPad T440p 笔记本电脑上的几个键。这2020 年文章让我非常接近了。它使用xmodmap
命令生成一个文本文件来简单地交换一些键代码。以下是我遵循的过程的摘要:
使用命令
xev -event keyboard
获取我想要交换的键的键代码。- 对于
Fn
钥匙,它给了keycode 151 (keysym 0x1008ff2b, XF86WakeUp)
- 对于左键
Ctrl
,它给出了keycode 37 (keysym 0xffe3, Control_L)
- 对于
xmodmap -pke > .Xmodmap
使用我的根目录中的命令生成当前键码图并将其存储到名为“.Xmodmap”的文本文件中。使用文本编辑器打开“.Xmodmap”文件
- 使用 VS Code 使用
code .Xmodmap
命令。
- 使用 VS Code 使用
交换适当的线。
- 原本是
keycode 37 = Control_L NoSymbol Control_L keycode 151 = XF86WakeUp NoSymbol XF86WakeUp
- 改为
keycode 37 = XF86WakeUp NoSymbol XF86WakeUp keycode 151 = Control_L NoSymbol Control_L
- 原本是
保存“.Xmodmap”文件。
使用命令“xmodmap .Xmodmap”重新映射按键。
奇怪的是,它对于作者的测试用例来说工作得很好(即分别将左箭头和右箭头键映射到PgUp
&PgDn
键)。此外,当我运行命令xev -event keyboard
并测试按键时,它们确实显示了正确的更改:
- 对于左键
Ctrl
,它给出KeyRelease event, serial 28, synthetic NO, window 0x4400001, root 0x175, subw 0x0, time 12122767, (136,230), root:(253,339), state 0x4, keycode 37 (keysym 0x1008ff2b, XF86WakeUp), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False
- 对于
Fn
密钥,它给出KeyRelease event, serial 28, synthetic NO, window 0x4400001, root 0x175, subw 0x0, time 12190541, (377,341), root:(494,450), state 0x0, keycode 151 (keysym 0xffe3, Control_L), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False
对于这里发生的事情有什么建议吗?