Xbindkeys 无法正常工作

Ell*_*llo 10 xdotool xbindkeys

我有点问题。我想从我以前的系统中重新映射一些我习惯的热键,但我无法让它与xbindkeys.

xbindkeys 识别组合但不知何故该命令不会触发。

如果我使用命令

xdotool key braceleft
Run Code Online (Sandbox Code Playgroud)

{在控制台中向我输出正确的符号。但是,如果我在 xbindkeys 中使用相同的命令,则不会发生任何事情。如果我用firefox它替换命令,它可以正常工作并打开 Firefox,所以我猜是xbindkeys可行的。

我想实现以下目标:

我要键入的字符{与任一活动窗口 Alt_R+7Alt_Left+ Ctrl+ 7,所以我可以同时使用。我知道Alt_R(AltGr键)是正确的方式,但对德国的键盘它是某种难以与键入braceleftAltGr所以我必须使用(Alt_R)键Alt_L+ Control+ 7,而不是(像我是在我以前的系统使用)。我以某种方式让它在 12.04 中正常工作,但我无法让它在 14.04 中工作。

有什么建议?我尝试了几个命令。所有这些都在控制台中工作,但在 xbindkeys 执行时没有一个工作

xdotool type '{'
xdotool key braceleft
xdotool key ISO_Level3_Shift+7
xvkbd -xsendevent -text '{'
xvkbd -xsendevent -text '\[Alt_R]+7'
Run Code Online (Sandbox Code Playgroud)

这是我的配置,不起作用

"xdotool key braceleft"
Control+Alt + 7
Run Code Online (Sandbox Code Playgroud)

但是,这有效:

"firefox"
Control+Alt + 7
Run Code Online (Sandbox Code Playgroud)

解决方案编辑

当我尝试另外几件事时,我注意到 xdotool 似乎触发得太快了。我改变了这样的配置:

"sleep 1 && xdotool type --delay 15 '{'"
Control+Alt + 7
Run Code Online (Sandbox Code Playgroud)

现在它将正确的 { 符号发送到活动窗口。现在唯一剩下的就是将睡眠和延迟减少到一个可行的值,因为 1 秒似乎有点太长了 :)

** 添加信息 ** 好吧,现在我设法找到了合适的值。但是,这仅在您释放按键直到睡眠持续时间结束时才有效。如果你太慢的话就不行了。

这是我当前所有不方便的德国 AltGr 字符的配置

"sleep 0.2 && xdotool type --delay 15 '{'"
Control+Alt + 7

"sleep 0.2 && xdotool key --delay 15 at"
Control+Alt + q

"sleep 0.2 && xdotool type --delay 15 '€'"
Control+Alt + e

"sleep 0.2 && xdotool type --delay 15 '['"
Control+Alt + 8

"sleep 0.2 && xdotool type --delay 15 ']'"
Control+Alt + 9

"sleep 0.2 && xdotool type --delay 15 '}'"
Control+Alt + 0

"sleep 0.2 && xdotool type --delay 15 '~'"
Control+Alt + plus
Run Code Online (Sandbox Code Playgroud)

但是,如果您想输入多个 @ 符号(例如),您必须按预期按 Ctrl+Alt+Q,但松开所有键,然后再次按下。然而,这比没有 Control+Alt 而不是 AltGr 选项要好得多,但它并不像我使用的那样有效。也许我也会为此找到解决方案。

小智 7

正如在类似问题中所记录的(为什么这些 xte 命令在终端中有效,但在与 xbindkeys 绑定时无效?),您可以要求在发布时xbindkeys触发事件(在按键时):

"xdotool key braceleft"
   Release+Control+Alt + 7
Run Code Online (Sandbox Code Playgroud)

这样,用于快捷方式的键和发送的键之间就没有冲突。


mid*_*nok 5

问题xdotool在于按下实际按键时 Xorg 会反复发送按键事件(查看xev输出)。为了克服这个问题,您需要暂时关闭重复功能,然后在关闭的键上生成 KeyRelease 事件。

代替

"sleep 0.2 && xdotool type --delay 15 '{'"
  Control+Alt + 7
Run Code Online (Sandbox Code Playgroud)

尝试以下操作:

"xset r off; xdotool keyup --window 0 7 type --clearmodifiers --window 0 '{'; xset r on"
  Control+Alt + 7
Run Code Online (Sandbox Code Playgroud)