将鼠标按钮重新映射到键盘按键

将鼠标按钮重新映射到键盘按键

我正在尝试将鼠标按钮(两个侧键和中键)重新映射到键盘上的 4、5、6 键,找到了一些指南,但我对 Ubuntu 和 Linux 还很陌生,我尝试了几天,但无济于事。有人可以指导我吗,或者给我一些新手可以遵循的综合指南?任何帮助都将不胜感激。

答案1

解决这个问题基本上有两种方法:

  • 将动作绑定到鼠标按钮并模拟按键操作

或者

  • 将鼠标按钮的扫描码映射到不同的键码

后者仅在输入驱动程序报告特定按钮的扫描码时才有效。我拥有的所有鼠标都会报告除滚轮之外的所有按钮的扫描码。

我个人更喜欢重新映射扫描码,因此我只会解释该方法。

将鼠标按钮的扫描码重新映射到不同的键码

这和我描述的差不多这里

运行sudo evtest(您可能需要evtest先安装)并选择您的鼠标。按下您想要重新映射的按钮(如果您没有看到任何输出,请按Ctrl+C并重复该过程,直到找到您的鼠标)。输出应包含如下行:

Event: time 1558613958.149431, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90004
Event: time 1558613958.149431, type 1 (EV_KEY), code 275 (BTN_SIDE), value 1
Event: time 1558613958.149431, -------------- SYN_REPORT ------------

第一行告诉我们扫描码(在我的情况下是90004),第二行报告当前映射的键码(在我的情况下是BTN_SIDE)。写下您要重新映射的所有鼠标按钮的扫描码。

现在运行以下命令,其中 eventX 是您使用时选择的命令evtest

grep "" /sys/class/input/eventX/device/id/*

这会告诉您鼠标的总线类型、供应商、产品和版本。 在我的例子中,输出为:

/sys/class/input/event7/device/id/bustype:0003
/sys/class/input/event7/device/id/product:4102
/sys/class/input/event7/device/id/vendor:062a
/sys/class/input/event7/device/id/version:0110

现在创建以下文件:

/etc/udev/hwdb.d/99-鼠标重新映射.hwdb

evdev:input:b[bustype]v[vendor]p[product]e[version]*
 ID_INPUT_KEY=1
 KEYBOARD_KEY_[scancode]=[desired-key]
 KEYBOARD_KEY_[scancode]=[desired-key]
 KEYBOARD_KEY_[scancode]=[desired-key]

...在哪里

  • [bustype]、[vendor]、[product] 和 [version] 是上一步得到的字母转换为大写
  • [scancode] 是第一步中字母转换为小写
  • [desired-key] 是您想要触发的键,例如 4、5 和 6
  • evdev:...生产线没有前导空格
  • 线条KEYBOARD_KEY...恰好一个前导空格
  • ID_INPUT_KEY=1保持不变

对于我的鼠标来说,该文件看起来是这样的:

evdev:input:b0003v062Ap4102e0110*
 ID_INPUT_KEY=1
 KEYBOARD_KEY_90003=4
 KEYBOARD_KEY_90004=5
 KEYBOARD_KEY_90005=6

现在运行sudo systemd-hwdb update并重新启动(或运行sudo udevadm control --reload-rules && sudo udevadm trigger)。

答案2

我不明白。我重新映射了鼠标键绑定,使鼠标上有 ctrl 和 shift。工作正常,但是,当我按下 M1 和 shift 时,shift 被忽略。但按下 ctrl 和 M1 时不会有 ctrl。可能出了什么问题?

相关内容