为什么这些 xte 命令在终端中有效,但在与 xbindkeys 绑定时无效?

Hub*_*bro 20 xorg shortcut-keys xte xbindkeys

xte当我在终端中运行此命令时,会触发 Expo 模式:

xte 'keydown Super_L' 'key S' 'keyup Super_L'
Run Code Online (Sandbox Code Playgroud)

但是,当我把它放在我的 .xbindkeysrc 文件中时:

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
  b:11
Run Code Online (Sandbox Code Playgroud)

当我单击按钮时没有任何反应。当我按下按钮 11 时,以下绑定使字母 X 出现在我的控制台中:

"xte 'key X'"
  b:11
Run Code Online (Sandbox Code Playgroud)

那么为什么世博绑定不起作用呢?


这是xbindkeys -n -v单击按钮 11 时的详细输出:

按钮按下!
e.xbutton.button=11
e.xbutton.state=16
"xte 'keydown Super_L' 'key W' 'keyup Super_L'"
    m:0x0 + b:11(鼠标)
窗口 2bb 的屏幕为 0
使用 fork+exec 调用启动程序
按钮释放!
e.xbutton.button=11
e.xbutton.state=16

什么也没有发生。这与xbindkeys执行命令的方式有什么关系吗?(fork+exec 调用)


尝试第二个。

博览会.sh:

#!/usr/bin/env bash
export DISPLAY=:0
xte 'keydown Super_L' 'key S' 'keyup Super_L'
Run Code Online (Sandbox Code Playgroud)

从命令行执行此脚本会激活 Expo。在 xbindkeys 中绑定它:

"sh ~/expo.sh"
  b:11
Run Code Online (Sandbox Code Playgroud)

单击鼠标按钮 11:

按钮按下!
e.xbutton.button=11
e.xbutton.state=16
“sh ~/expo.sh”
    m:0x0 + b:11(鼠标)
窗口 2bb 的屏幕为 0
使用 fork+exec 调用启动程序

没发生什么事!

小智 19

另一个更简单的解决方案:不要在 xbindkeys 定义中只使用“b:11”,而是使用“b:11 + release”。它将等到您松开按钮以触发命令。

例子:

"sh ~/expo.sh"
  b:11 + release
Run Code Online (Sandbox Code Playgroud)

  • Hubro 应该回到这里并将其标记为正确答案...... (2认同)

Hub*_*bro 8

这很奇怪。事实证明,如果在Super+W模拟击键时我的鼠标按钮仍被按下(尚未释放),则不会发生任何事情。我不知道该怪谁(也许是 Cinnamon?)。不过,我已经解决了这个问题,在xte命令中添加了一个短暂的延迟:

xte 'usleep 100000' 'keydown Super_L' 'key S' 'keyup Super_L'
Run Code Online (Sandbox Code Playgroud)

它现在等待 0.1 秒才能模拟Super+S. 如果我按住鼠标按钮,小于0.1秒,没有任何反应。

这是一个解决方法的答案。我更喜欢正确的答案。

  • 可以确认user215129的回答确实不正确,没有回答问题。现在对这个问题进行我自己的调查,在我的情况下,将其更改为释放或延迟不是一个选项,因为我需要它在按下按钮时执行操作,在释放时执行不同的操作。请参阅:https://askubuntu.com/questions/984054/how-to-bind-additional-mouse-buttons-to-be-modifiers-shift-control (2认同)