为什么这些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
单击按钮时没有任何反应。 当我按下按钮11时,以下绑定使字母X出现在我的控制台中:
"xte 'key X'" b:11
那么为什么世博会没有约束力呢?
这是单击按钮11时xbindkeys -n -v
的详细输出:
按下按钮! e.xbutton.button = 11 e.xbutton.state = 16 “xte'keydown Super_L''键W''键盘Super_L'” m:0x0 + b:11(鼠标) 获得了窗口2bb的屏幕0 使用fork + exec调用启动程序 按钮发布! e.xbutton.button = 11 e.xbutton.state = 16
没有任何反应。 这与xbindkeys
执行命令的方式有什么关系吗? (fork + exec调用)
尝试二号。
expo.sh:
#!/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.button = 11 e.xbutton.state = 16 “sh~ / expo.sh” m:0x0 + b:11(鼠标) 获得了窗口2bb的屏幕0 使用fork + exec调用启动程序
什么都没发生!
另一个更简单的解决方案:使用“b:11 + release”代替在xbindkeys定义中仅使用“b:11”。 它将一直等到你释放按钮来触发命令。
例:
"sh ~/expo.sh" b:11 + release
这很奇怪。 事实certificate,如果在模拟Super+W
击键时我的鼠标按钮仍然按下(尚未释放),则没有任何反应。 我不知道该为谁负责(也许是肉桂?)。 我通过在xte
命令中添加一个短暂的延迟来解决它:
xte 'usleep 100000' 'keydown Super_L' 'key S' 'keyup Super_L'
现在它在模拟Super+S
之前等待0.1秒。 如果我按住鼠标按钮超过0.1秒,则没有任何反应。
这是一个解决方法的答案。 我更喜欢正确的答案。
我遇到了同样的问题。
"xte 'key b'"
在控制台中工作但不在xbindkeys参数文件中。 我用他的密钥代码更改了b,使用“xev”命令获取它:
"xte 'key Ox62'"
它对我有用
尝试+发布
"xte 'keydown Super_L' 'key S' 'keyup Super_L'" b:11 + Release
这可能有所帮助。
使用sxhkcd keymapper时遇到类似问题。 事实certificate,您的实际快捷键被检测为仍然被按下。
有一些半解决方法:
- 寻找发布活动
- 在命令前添加
sleep 0.2
- 使用带有leader-key的快捷方式
- 在xte序列前释放快捷键修饰符
但是,你无法获得实时动作=)