我可以在 X11 中重新映射特定键盘的按键吗?

我可以在 X11 中重新映射特定键盘的按键吗?

我有一台绘图板,它在 Ubuntu 20.04 上充当两个 USB 设备。一个指点设备和一个键盘设备用于硬件按钮。 (该平板电脑不使用 wacom 驱动程序,因此我无法使用常用的图形平板电脑实用程序)

键盘驱动程序发送快捷键Ctrl-z,例如,也可能发送自己的键码。我想将按钮重新映射到其他快捷键。有没有办法只从一个特定键盘捕获按键并在 X11 下重新映射它们?

Xmodmap 和类似的配置文件和工具似乎适用于所有键盘,但我想知道是否有针对每个设备的配置选项。对我来说,从键盘设备捕获按键然后将新快捷键发送到活动窗口的工具也是一个可以接受的解决方案。

我正在寻找适用于 USB 键盘的一般建议(并且不需要使用标准 USB 键盘以外的任何设备进行测试)。我将根据自己的使用情况自行调整,以避免使这个问题过于具体。

答案1

你可以看看类似的工具密钥模糊,它将完全满足您的需求。一开始学习起来有点困难,但借助evtest(找到特定键盘的扫描和键代码),您可以设置自定义重新映射只是一个键盘。

笔记:

  • KeyFuzz 的最新版本(撰写本文时为 0.2)于 2006 年 1 月进行了最新更新,但代码在 Ubuntu 20.04 上仍可顺利编译。这是我的经验之谈。

  • evtest工具可以像这样安装:

    $ sudo apt install evtest
    

    从那里,您可以通过以下方式调用该工具来使用它sudo

    $ sudo evtest
    

    这会给你类似这样的结果:

    No device specified, trying to scan all of /dev/input/event*
    Available devices:
    /dev/input/event0:   Sleep Button
    /dev/input/event1:   Lid Switch
    /dev/input/event2:   Power Button
    /dev/input/event3:   AT Translated Set 2 keyboard
    /dev/input/event4:   Video Bus
    /dev/input/event5:   HDA Intel PCH Mic
    /dev/input/event6:   HDA Intel PCH Headphone
    /dev/input/event7:   HDA Intel PCH HDMI/DP,pcm=3
    /dev/input/event8:   HDA Intel PCH HDMI/DP,pcm=7
    /dev/input/event9:   HDA Intel PCH HDMI/DP,pcm=8
    /dev/input/event10:  HDA Intel PCH HDMI/DP,pcm=9
    /dev/input/event11:  HDA Intel PCH HDMI/DP,pcm=10
    /dev/input/event12:  ThinkPad Extra Buttons
    /dev/input/event13:  Integrated IR Camera: Integrate
    /dev/input/event14:  Integrated Camera: Integrated C
    /dev/input/event15:  Synaptics TM3289-002
    /dev/input/event16:  TPPS/2 Elan TrackPoint
    Select the device event number [0-16]:
    

    选择一个设备然后将把键盘映射打印到屏幕上,然后按下按键将显示每次按下的单独详细信息:

    Event: time 1612367786.809999, type 4 (EV_MSC), code 4 (MSC_SCAN), value 21
    Event: time 1612367786.809999, type 1 (EV_KEY), code 33 (KEY_F), value 1
    Event: time 1612367786.809999, -------------- SYN_REPORT ------------
    

    有了它,您可以为 KeyFuzz 创建自定义映射文档。

答案2

以 1:1 方式重新映射键的一种方法是使用 udev hwdb 文件,例如systemd 自带的

这允许匹配设备然后重新映射键。它确实不是允许重新映射序列,因此ctrl-z可以映射到ctrl-a,但不仅仅是a

链接文件中的示例:

evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pn*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnGateway*:pnA0A1*:pvr*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svneMachines:pneMachines*E725:pvr*
 KEYBOARD_KEY_a5=help                                   # Fn+F1
 KEYBOARD_KEY_a6=setup                                  # Fn+F2 Acer eSettings
 KEYBOARD_KEY_a7=battery                                # Fn+F3 Power Management
 KEYBOARD_KEY_a9=switchvideomode                        # Fn+F5
 KEYBOARD_KEY_b2=www
 KEYBOARD_KEY_b3=euro
 KEYBOARD_KEY_b4=dollar

例如,可以使用evtest列出所有输入设备的程序找到设备 ID。然后可以使用evdev:name:My*Keyboard*Manufacturer*Model将输入设备与My Keyboard Manufacturer Model

可以使用命令找到有效的键代码

sed -n '/KEY_/{s/.*KEY_\([A-Za-z0-9_]\+\).*/\L\1/g;p}' /usr/include/linux/input-event-codes.h | less

然后需要将该文件安装到/etc/udev/hwdb.d/myrules.hwdb

因此,这还不是该问题的完整解决方案,但可能已经帮助了有类似问题的人,他们不需要可以重写密钥序列的解决方案。

相关内容