如何使用 setkeycodes 更改键码

ean*_*ang 5 xorg keyboard thinkpad

我有一台运行 Sabayon(基于 Gentoo 的发行版)的 Thinkpad Edge E130,我正在与众所周知的错误Xorg 255 keycodes limit 作斗争。

我的笔记本电脑有Mic Mute/Unmute的 Fn+F4 热键。这就是问题:

  • showkey -k在 Fn+F4 按键上显示键码248
  • showkey -s 按键上不显示任何内容
  • xev 按键上不显示任何内容(因为 248+8 [由内核添加] 大于 255)

如果一个键有一个键码,它也必须有一个扫描码。使用getscancodes程序确实我得到了 26 作为扫描码:

# ./Sabayon/getscancodes/getscancodes /dev/input/event6 
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x17aa product 0x5054 version 0x4101
Input device name: "ThinkPad Extra Buttons"
26 (0x1a)
26 (0x1a)
Run Code Online (Sandbox Code Playgroud)

根据线程,我的猜测只是将热键的键码更改为较小的、未使用的键码。例如,根据我的说法,120 似乎未使用$ xmodmap -pke

我试过

# setkeycodes 0x1a 120
Run Code Online (Sandbox Code Playgroud)

但没有成功,密钥代码始终为 248 检查showkey

更改键码的正确方法是什么?

小智 4

  1. 用于showkey了解您的按键扫描码:

    $ sudo showkey -s
    0xe0 0xXX
    
    Run Code Online (Sandbox Code Playgroud)
  2. 内核将在您的代码中添加 8,请112改为使用120

    $ sudo setkeycodes e0XX 112
    
    Run Code Online (Sandbox Code Playgroud)
  3. 用于xmodmap制作您的密钥报告XF86AudioMutekeysym:

    $ xmodmap -e "keycode 120 = XF86AudioMute"
    
    Run Code Online (Sandbox Code Playgroud)
  4. 选修的。在 DE 设置中创建您想要的快捷方式时按您的键。

  • 这不适用于 USB 键盘,因为 `setkeycodes` 不支持它们。如果系统有 udev,则可以通过向硬件数据库添加自定义条目来重新映射键。这里的例子:https://unix.stackexchange.com/a/384566/245377 (2认同)