我的鼠标有一个不幸的特性。在左侧,就在我使用它时拇指轻轻坐的地方,有两个按钮非常敏感,只需用刷子轻轻一按就会发出咔哒声。
当然,我说的是讨厌的前进/后退按钮,如果在浏览器中按下这些按钮,可能会使观看长达一小时的 YouTube 视频变得更加困难。我有办法禁用它们吗?这件事会由 X 处理吗?
答案1
xev
在终端中启动程序。将鼠标移动到xev
窗口内;你会看到很多东西滚动过去。依次按下每个按钮。然后切换回终端窗口并按Ctrl+ C。xev
显示每个输入事件的描述,特别ButtonPress
是ButtonRelease
鼠标单击事件的描述(您还将看到一些MotionNotify
有关鼠标移动和其他事件的描述)。
您的前进和后退按钮可能映射到鼠标按钮,可能是按钮 8 和 9:
ButtonPress event, serial 29, synthetic NO, window 0x2e00001,
root 0x105, subw 0x0, time 2889100159, (166,67), root:(1769,98),
state 0x0, button 8, same_screen YES
如果是这种情况,请尽可能将这些按钮重新映射到浏览器中的其他操作。或者,您可以将按钮重新映射到浏览器不会做出反应的不同按钮编号,或者在系统级别完全禁用这些按钮。为此,请将这些行放入名为的文件中~/.Xmodmap
:
! Remap button 8 to 10 and disable button 9.
pointer = 1 2 3 4 5 6 7 10 0
使用命令测试它xmodmap ~/.Xmodmap
。大多数桌面环境和窗口管理器在您登录时会自动运行此命令;如果您的没有,请安排它在 X 启动时运行。
当您按下这些按钮时,鼠标也可能发送键盘事件:
KeyPress event, serial 32, synthetic NO, window 0x2e00001,
root 0x105, subw 0x0, time 2889100963, (957,357), root:(2560,388),
state 0x0, keycode 166 (keysym 0x1008ff26, XF86Back), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
在这种情况下,请将如下行放入~/.Xmodmap
:
keycode 166 = NoSymbol
keycode 167 = NoSymbol
答案2
只是一个快速命令来修复它,与其他答案没有什么不同:
xmodmap -e "pointer = 1 2 3 4 5 6 7 0 0 0 0 0 0" #the fix
测试
xmodmap -pp # check the changes
xterm -e xev # test the nullified buttons
# to restore in case you are going to play some game that uses them
xmodmap -e "pointer = 1 2 3 4 5 6 7 8 9 10 11 12 13"
您可以将修复cmd放在启动应用程序中。
更好的方法是使用 xdotool 检查活动窗口是否是您的任何浏览器,并根据需要调用 xmodmap 来禁用/启用它,但这需要一些脚本编写:>
我认为没有理由让 7 以上的按钮保持启用状态,有什么原因吗?
答案3
您可以使用xev
查找按钮映射到哪个键,并使用下面的代码(在 $HOME/.xsessionrc 中)将其映射到您不使用的东西。
xmodmap -e 'keycode THE_CODE_HERE = XF86Launch1'
或者,您应该能够从使用 Gnome/KDE 或任何其他现代桌面的 GUI 中执行此操作。
另一种选择是破解 xorg.conf 以删除按钮定义。
答案4
可以使用 xorg 配置文件来完成
这是禁用水平滚动的示例(保存新文件并重新启动)
纳米 /etc/X11/xorg.conf.d/40-libinput-mouse-left-right.conf
Section "InputClass"
Identifier "Logitech catchall"
MatchIsPointer "on"
Driver "libinput"
Option "HorizontalScrolling" "false"
EndSection
其他有用的命令
xinput list
xinput list-props 15
现在,对于这个问题,xorg 配置文件可用于重新映射按钮,这里是一个示例
Section "InputClass"
# ...
Option "ButtonMapping" "1 9 3 4 5 6 7 8 2"
# ...
EndSection