禁用滚轮水平按钮(后退/前进)

Jon*_*eim 4 linux mouse

我最近得到了罗技 M500:

总线 002 设备 004:ID 046d:c069 Logitech, Inc. M500 激光鼠标

它有九个我可以识别的按钮:

  • 左边两个
  • 左右
  • 轮压机
  • 滚轮向上滚动,滚轮向下滚动
  • 左轮压轮,右轮压轮

最后两个快把我逼疯了。每次我尝试单击滚轮时,我不小心点击了“滚轮向左”按钮,Firefox 会转到上次访问的页面。这很烦人。

够简单了吧?只需找出 xev 显示的按钮并禁用它们即可。错误的!xev 不会生成“ButtonPress/ButtonRelease”事件,而是奇怪的“LeaveNotify/EnterNotify/KeymapNotify”对:

 LeaveNotify 事件,序列号 40,合成 NO,窗口 0x4a00001,
    根 0x94, subw 0x0, 时间 2344319, (104,86), 根:(113,207),
    模式 NotifyGrab, 详细 NotifyAncestor, same_screen 是,
    焦点是,状态 0

EnterNotify 事件,序列号 40,合成 NO,窗口 0x4a00001,
    根 0x94, subw 0x0, 时间 2344319, (104,86), 根:(113,207),
    模式 NotifyUngrab,详细 NotifyAncestor,same_screen 是,
    焦点是,状态 0

KeymapNotify 事件,串行 40,合成 NO,窗口 0x0,
    键:4294967188 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   
           0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   

现在可以肯定,4294967188(如果有帮助的话,-108 二进制补码作为 32 位整数)将是键码,对吧?又错了!水平轮左/右和侧后/前按钮的编号相同。

这是我的设备的 xinput 列表:

罗技USB激光鼠标id=15【从指针(2)】
    报告7类:
        类起源于:15。类型:XIButtonClass
        支持的按钮:16
        按钮标签:“按钮左”“按钮中间”“按钮右”“按钮滚轮向上”“按钮滚轮向下”“按钮水平轮左”“按钮水平轮右”“按钮侧”“按钮额外”“按钮前进”“按钮返回”“按钮任务”“按钮未知”“按钮未知”“按钮未知”“按钮未知”
        按钮状态:
        类起源于:15。类型:XIValuatorClass
        评估者 0 的详细信息:
          标签:Rel X
          范围:-1.000000 - -1.000000
          分辨率:1个单位/米
          模式:相对
        类起源于:15。类型:XIValuatorClass
        评估员 1 的详细信息:
          标签:Rel Y
          范围:-1.000000 - -1.000000
          分辨率:1个单位/米
          模式:相对
        类起源于:15。类型:XIValuatorClass
        评估员 2 的详细信息:
          标签:Rel Horiz Wheel
          范围:-1.000000 - -1.000000
          分辨率:1个单位/米
          模式:相对
        类起源于:15。类型:XIValuatorClass
        评估员 3 的详细信息:
          标签:Rel Vert Wheel
          范围:-1.000000 - -1.000000
          分辨率:1个单位/米
          模式:相对
        类起源于:15。类型:XIScrollClass
        Valuator 2 的滚动信息
          类型:2(水平)
          增量:1.000000
          标志:0x0
        类起源于:15。类型:XIScrollClass
        Valuator 3 的滚动信息
          类型:1(垂直)
          增量:-1.000000
          标志:0x2(首选)

它似乎像往常一样映射按钮。那么当我编写一个循环调用“xinput query-state $DEVNO”的小脚本并按下可怕的按钮时会发生什么?你猜到了:

2个班级:
按钮类
    按钮[1]=向上
    按钮[2]=向上
    按钮[3]=向上
    按钮[4]=向上
    按钮[5]=向上
    按钮[6]=向上
    按钮[7]=向上
    按钮[8]=向上
    按钮[9]=向上
    按钮[10]=向上
    按钮[11]=向上
    按钮[12]=向上
    按钮[13]=向上
    按钮[14]=向上
    按钮[15]=向上
    按钮[16]=向上
ValuatorClass 模式=Relative Proximity=In
    估价员[0]=538
    估价员[1]=456
    估价员[2]=-2
    估值器[3]=-464

它们总是显示为“向上”,尽管它们显然是“向下”的。确实生成正确的 ButtonPress 事件(例如向左/向右)的鼠标按钮确实像它们应该的那样“向下”显示广告。

小智 6

我有一个罗技 M325,它也使用按钮 8 和 9 来左右倾斜滚轮。我使用这个脚本来禁用它们:

#!/bin/bash

set -eu

MOUSE_ID=$(xinput --list | grep Logitech | sed -r 's/.*id=([0-9]+).*/\1/')

if [ -n "$MOUSE_ID" ]; then
    xinput set-button-map $MOUSE_ID 1 2 3 4 5 6 7 0 0
fi
Run Code Online (Sandbox Code Playgroud)