重新映射生成多个扫描码的键

moo*_*ker 34 keyboard-shortcuts thinkpad xkb keyboard-layout

我有一台 ThinkPad W540。在它的键盘上,小键盘上方有四个多媒体键。其中两个键生成对应于键组合Win_L+LWin_L+的键码(显然还有扫描码)E。换句话说,对于生成Win_L+的键L
showkey --scancodes返回这个:

0xe0 0x5b 0x26 0xa6 0xe0 0xdb
Run Code Online (Sandbox Code Playgroud)

setkeycodes命令需要未转义的单字节或转义的两字节序列来表示扫描代码,并且showkey给我的方式不止于此,因此我无法使用简单的setkeycodes <scancode> <keycode>.

我真的很感激任何提示,我可以将该键重新映射到其他东西,而不仅仅是复制键盘上现有的组合键之一。

Vol*_*gel 4

您可以分两步执行此操作:

  1. 捕获组合键
  2. 模拟键入不同的键。

您可以xchainkeys用于1.[xdotool][2]2.

要使用 来创建模拟新键xdotool,选项--clearmodifiers可能key对于中和原始模拟修饰键很重要:

xdotool key --clearmodifiers Shift+a
Run Code Online (Sandbox Code Playgroud)

这应该输入大写字母A作为测试。

xchainkeys在in的配置中~/.config/xchainkeys/xchainkeys.conf,我们可以将命令绑定到组合键:

W-l :exec xdotool key --clearmodifiers Shift+a
Run Code Online (Sandbox Code Playgroud)

现在,组合键WinlWin向左或向右执行相同操作)以及生成 Win_L + L 的键应该创建一个大写字母A

(还有许多其他程序可用于这两个部分。对于第一个部分,可以使用桌面环境的热键配置,但我更喜欢使其独立于桌面环境。)

  • 是的,确实如此 - 我不确定你这句话的意思,现在我明白了。但看起来你的按键在硬件中(即在键盘固件中)生成了两个按键代码 - 所以我看不到任何战争,除非你检测到人工按键按下“修改键”、“其他键”的时间, “修改器向上”。嗯...也许涉及焊接的解决方案更简单;) (3认同)
  • 如果我没有记错的话,这个解决方案的问题与简单地使用所述组合键触发一个操作相同 - 该操作不会仅由该键触发,按下生成相同的实际组合键代码也会给出相同的结果。换句话说,它不满足“将该键重新映射到其他不简单地复制现有键组合之一”的条件。但我很欣赏你的努力。 (2认同)