为什么这些xte命令在终端中起作用,但在与xbindkeys绑定时却不能起作用?


18

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

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


这是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调用)


尝试第二。

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调用启动程序

什么都没发生!


1
您要按<Super> <S>吗?我知道xbindkeys + xte有时会很挑剔。
赛斯

@Seth:正确。有什么方法可以解决挑剔吗?
Hubro 2014年

1
尝试'keydown Super_L' 'keydown S' 'keyup S' 'keyup Super_L'
赛斯2014年

@Seth:恐怕
没什么大不了

进行更改后,您是否重新启动了xbindkeys?有时这是必要的。您的最终目标是打开工作区概述,我猜?
赛斯2014年

Answers:


17

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

例:

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

2
Hubro应该回到这里并将其标记为正确的答案……
David Ljung Madison Stellar

7

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

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

现在它等待0.1秒,然后进行仿真Super+S。如果我按住鼠标按钮,小于0.1秒,没有任何反应。

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


Hubro,请查看由user215129评分较高的答案并将其标记为正确
David Ljung Madison Stellar

1
@DavidLjungMadison不。这甚至不是我的问题的答案,而只是解决方法的建议。
Hubro'2

1
我想知道你是否理解答案。问题是您正在尝试在按钮仍处于按下状态时发送密钥。等待按钮释放意味着它不会在释放按钮之前发送钥匙,从而解决了您的问题。这不是解决方法,而是对问题的说明以及解决方法。
David Ljung Madison Stellar

1
那你还是不明白。该问题是,你试图输入键,而按键时,不管推出世博会正在寻找超级-S,不BTN-2 +超级-S。您的修复一种解决方法,因为它不能通过保证按钮处于打开状态来解决问题,并且在许多情况下都无法正常工作。解决方案是(在处理鼠标事件时通常是这种情况)在触发任何命令之前先等待按钮松开,这样可以确保按钮不与按键混合。
David Ljung Madison Stellar

2
可以确认user215129的回答确实不正确并且没有回答问题。现在就无法对此问题进行我自己的调查,在我的情况下,将其更改为释放或延迟是不可行的,因为我需要它在按下按钮时执行操作,释放时执行不同的操作。请参阅:askubuntu.com/questions/984054/...
Ethuil UI

2

我遇到了同样的问题。

"xte 'key b'"

在控制台中工作,但在xbindkeys参数文件中却没有。我通过他的键盘代码更改了b,使用“ xev”命令获取它:

"xte 'key Ox62'"

对我有用



1

使用sxhkcd keymapper时有类似的问题。原来您的实际快捷键被检测为仍在被按下。

有一些半解决方法:

  • 寻找释放事件
  • sleep 0.2在命令前 添加
  • 通过快捷键使用快捷方式
  • 在xte序列之前释放快捷方式修饰符

但是,您无法使用==进行实时操作

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.