我有一把 Logitech g502 Proteus 鼠标,想使用“后退”和“前进”鼠标按钮(通常与浏览器一起使用)。
我验证了xev
鼠标按钮按下是否被检测到。我安装xbindkeys
并使用各种在线参考设置.xbindkeysrc
来映射鼠标按钮(6 和 7)以按下一系列键来模拟正确的行为。
"xte 'key t'"
b:6 + Release
"xte 'keydown Alt_L' 'keydown Right' 'keyup Right' 'keyup Alt_L'"
b:7 + Release
问题是,重映射执行了两次,一次是在按下时,一次是在释放时。我以为“释放”修饰符可以解决这个问题,但它仍在进行中。我通过将虚拟重映射放入字母 来验证这一点't'
,按住鼠标按钮,然后看到一个重't'
映射插入,然后't'
在我松开鼠标时释放另一个重映射。
我在测试之前也确实终止了所有 xbindkeys 进程。运行xbindkeys --verbose --nodaemon
显示了一种不寻常的行为,即当我按下鼠标按钮时,尽管我没有释放按下的鼠标按钮,但 apress
和release
都被记录下来。以下看起来像是我按下并释放了按钮两次,但实际上只有一次:
starting loop...
Button press !
e.xbutton.button=6
e.xbutton.state=16
Button release !
e.xbutton.button=6
e.xbutton.state=16
"xte 'key t' "
Release + m:0x0 + b:6 (mouse)
got screen 0 for window 510
Start program with fork+exec call
Button press !
e.xbutton.button=6
e.xbutton.state=16
Button release !
e.xbutton.button=6
e.xbutton.state=16
"xte 'key t' "
Release + m:0x0 + b:6 (mouse)
got screen 0 for window 510
命令行上的 xte 行本身仅打印一个“t”。关于如何修复/解决这个问题,有什么想法吗?
答案1
我xbindkeys
在一台电脑上使用鼠标侧键切换工作区的方法与此类似。查看我的配置,我发现配置行&
末尾有,我相信它在后台运行。也许你需要它?我不在那台电脑上,无法检查如果我从配置中删除它会发生什么:xte
xte
&
# Mouse button 8 (the "back" side button)
# Re-map to super+page-down (move to workspace down)
"xte 'keydown Super_L' 'key Page_Down' 'keyup Super_L' &"
b:8
# Mouse button 9 (the "forward" side button)
# Re-map to super+page-up (move to workspace up)
"xte 'keydown Super_L' 'key Page_Up' 'keyup Super_L' &"
b:9
答案2
好吧,这似乎不是 Ubuntu 或 xbindkeys 的问题,而是 xrdp 鼠标驱动程序的问题。我正在使用运行 Ubuntu 20.04.2 的 MS Hyper-V VM,我在 github 上遇到了以下问题,有人准确地报告了我的问题,“单击(按下+释放)Logitech MX Vertical 鼠标的按钮 6 和 7(前进/后退按钮)会发送两个 ButtonPress 和 ButtonRelease 事件。”
xrdpmouse:ButtonPress/ButtonRelease 事件发送了两次
因此看起来似乎没有简单的解决办法,这很不幸。