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 序列前面的快捷键修饰符
但是你不能通过它获得实时动作=)