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

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

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

xte 'keydown Super_L' 'key S' 'keyup Super_L'

但是,当我将其放入 .xbindkeysrc 文件中时:

"xte 'keydown Super_L' 'key S' 'keyup Super_L'"
  b:11

单击按钮时什么也没有发生。以下绑定使字母 X 出现在我按下按钮 11 时的控制台中:

"xte 'key X'"
  b:11

那么,为什么 Expo 绑定不起作用呢?


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

按下按钮!
e.xbutton.按钮=11
e.xbutton.状态=16
“xte‘keydown Super_L’‘key W’‘keyup Super_L’”
    m:0x0 + b:11(鼠标)
获取窗口 2bb 的屏幕 0
使用 fork+exec 调用启动程序
松开按钮!
e.xbutton.按钮=11
e.xbutton.状态=16

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


第二次尝试。

世博网:

#!/usr/bin/env bash
export DISPLAY=:0
xte 'keydown Super_L' 'key S' 'keyup Super_L'

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

"sh ~/expo.sh"
  b:11

单击鼠标第 11 个按钮:

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

什么都没发生!

答案1

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

例子:

"sh ~/expo.sh"
  b:11 + release

答案2

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

xte 'usleep 100000' 'keydown Super_L' 'key S' 'keyup Super_L'

现在它要等待 0.1 秒才能进行模拟Super+S。如果我按住鼠标按钮更多的超过 0.1 秒,什么也没有发生。

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

答案3

我遇到了同样的问题。

"xte 'key b'"

在控制台中工作,但在 xbindkeys 参数文件中不工作。我使用“xev”命令通过其 keysym 代码更改了 b,以获取它:

"xte 'key Ox62'"

它对我有用

答案4

使用 sxhkcd 键盘映射器时遇到类似问题。结果发现您的实际快捷键仍被检测到被按下。

有一些半解决办法:

  • 寻找发布活动
  • sleep 0.2在命令前面 添加
  • 使用带有 leader-key 的快捷方式
  • 释放 xte 序列前面的快捷键修饰符

但是你不能通过它获得实时动作=)

相关内容