如何重新映射(仅)鼠标键?(特殊情况)

如何重新映射(仅)鼠标键?(特殊情况)

我重新映射了一些鼠标键来帮助我在 Firefox 中导航,稍后我会将其用途扩展到其他应用程序。

具体来说,我重新映射了鼠标的第 4 个按钮,以便活动网页在开始时向上滚动,即按下键盘上的“Home”键时发生的情况。

问题是,现在如果我按下键盘上的按钮 4,就会发生与按下鼠标上的按钮 4 相同的事情,即就像按下“Home”键一样。 数字键盘上不会发生这种情况。

例如,如果我在文本框中输入数字“4”来写“连续 44 只猫,余数为 2”,那么只要我按下 4,光标就会返回到行首。

我不明白为什么,鼠标按钮 4 与键盘上的字符 4 相同,并且 xev 为我确认了这一点:

鼠标键4键:

KeyPress event, serial 49, synthetic NO, window 0x4200001,
root 0x78a, subw 0x0, time 2402842, (93,102), root:(964,583),
state 0x10, keycode 13 (keysym 0x34, 4), same_screen YES,
XLookupString gives 1 bytes: (34) "4"
XmbLookupString gives 1 bytes: (34) "4"
XFilterEvent returns: False

键盘4键按钮:

KeyRelease event, serial 40, synthetic NO, window 0x3200001,
root 0x78a, subw 0x0, time 11553777, (170,-9), root:(1041,472),
state 0x10, keycode 13 (keysym 0x34, 4), same_screen YES,
XLookupString gives 1 bytes: (34) "4"
XFilterEvent returns: False

以下是 xbindkeys 配置代码和将页面滚动到顶部的脚本:

;; mouse #4
(xbindkey '("c:13") "/home/andrea/programmazione/bash-scripts/script-mouse-binding-scroll-up.sh")
;; mouse #7
(xbindkey '("c:16") "/home/andrea/programmazione/bash-scripts/script-mouse-binding-scroll-down.sh")
;; mouse #6
(xbindkey '("c:15") "/home/andrea/programmazione/bash-scripts/script-mouse-key6-binding.sh")

基本上,所有附加鼠标键 4、5、6、7、8、9 都分配给了各自的数字。

所以我的问题很直观,我该如何避免这种行为?我想过从源更改鼠标按钮映射,即不给它分配字符“4”,但我不知道从哪里开始。

谢谢

沸石 C-13

答案1

我用以下方法解决了xkb 实用程序, 实际上xkb 甚至可以为一个设备重新映射按键,就我而言是鼠标键盘。
是的,基本上我发现鼠标数字键盘实际上是一个迷你键盘. 这解释了上面描述的行为。

下面是我用来重新映射鼠标键盘键的脚本。

#!/bin/bash
remote_id=18 #device code

mkdir -p /tmp/xkb/symbols
cat >/tmp/xkb/symbols/custom <<\EOF

xkb_symbols "remote" {
    key <AE04> { [ Home ] }; #Keycodes, see the link below
    key <AE07> { [ End ] };
    key <AE05> { [ Prior ] };
    key <AE08> { [ Next ] };
};
EOF

setxkbmap -device $remote_id -print \
 | sed 's/\(xkb_symbols.*\)"/\1+custom(remote)"/' \
 | xkbcomp -I/tmp/xkb -i $remote_id -synch - $DISPLAY 2>/dev/null

xinput list我通过终端找到了设备代码。

Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SOAI USB Gaming Mouse                     id=9    [slave  pointer  (2)]
⎜   ↳ SOAI USB Gaming Mouse Keyboard            id=10   [slave  pointer  (2)]
⎜   ↳ ELAN0709:00 04F3:30A0 Mouse               id=12   [slave  pointer  (2)]
⎜   ↳ ELAN0709:00 04F3:30A0 Touchpad            id=13   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ HP TrueVision HD Camera: HP Tru           id=11   [slave  keyboard (3)]
    ↳ Intel HID events                          id=14   [slave  keyboard (3)]
    ↳ Intel HID 5 button array                  id=15   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=16   [slave  keyboard (3)]
    ↳ HP WMI hotkeys                            id=17   [slave  keyboard (3)]
    ↳ SOAI USB Gaming Mouse Keyboard            id=18   [slave  keyboard (3)]

xbindkeys --key了解我从终端使用的按键相关的代码。

"(Scheme function)"
m:0x10 + c:13
Mod2 + Home

为了找出系统的哪个代码对应于鼠标键盘上的键的代码,我查看了此关联
为了找到我想要分配的键的代码,我点击了相同的链接,但在本节

key <AE04> { [ Home ] }; #Keycodes

每次系统重启时我都会运行这个脚本

相关内容