为什么这些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序列前释放快捷键修饰符

但是,你无法获得实时动作=)