xbindkeys 重复计算按键次数(不区分按下和释放)

xbindkeys 重复计算按键次数(不区分按下和释放)

我有一把 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显示了一种不寻常的行为,即当我按下鼠标按钮时,尽管我没有释放按下的鼠标按钮,但 apressrelease都被记录下来。以下看起来像是我按下并释放了按钮两次,但实际上只有一次:

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在一台电脑上使用鼠标侧键切换工作区的方法与此类似。查看我的配置,我发现配置行&末尾有,我相信它在后台运行。也许你需要它?我不在那台电脑上,无法检查如果我从配置中删除它会发生什么:xtexte&

        # 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 事件发送了两次

因此看起来似乎没有简单的解决办法,这很不幸。

相关内容