我最近得到了罗技 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)