Xbindkeys 无法正常工作

Xbindkeys 无法正常工作

我遇到了一点问题。我想重新映射我以前系统中习惯的一些热键,但我无法让它正常工作xbindkeys

xbindkeys识别组合但不知何故命令没有触发。

如果我使用命令

xdotool key braceleft

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

我想要实现以下目标:

我想使用+或++将字符输入{到活动窗口, 这样我就可以同时使用两者。我知道(AltGr) 是正确的方法,但在德语键盘上,用 (Alt_R) 键输入左括号有点困难,所以我必须改用++ (就像我在以前的系统中习惯的那样)。我不知怎么让它在 12.04 中正常工作,但我无法让它在 14.04 中工作。Alt_R7Alt_LeftCtrl7Alt_RAltGrAlt_LControl7

有什么建议吗?我尝试了几个命令。它们都在控制台中起作用,但在 xbindkeys 执行时都不起作用

xdotool type '{'
xdotool key braceleft
xdotool key ISO_Level3_Shift+7
xvkbd -xsendevent -text '{'
xvkbd -xsendevent -text '\[Alt_R]+7'

这是我的配置,不起作用

"xdotool key braceleft"
Control+Alt + 7

但是,这是有效的:

"firefox"
Control+Alt + 7

解法 編輯

当我尝试其他几种方法时,我注意到 xdotool 似乎触发得太早了。我修改了配置如下:

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

现在它向活动窗口发送了正确的 { 符号。现在唯一剩下的就是将睡眠和延迟减少到可行的值,因为 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

但是,如果你想输入多个 @ 符号(例如),你必须按预期按下 Ctrl+Alt+Q,但释放所有键,然后再次按下。然而,这比没有 Control+Alt 选项代替 AltGr 要好得多,但它并不像我习惯的那样有效。也许我也会找到解决办法。

答案1

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

代替

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

请尝试以下操作:

"xset r off; xdotool keyup --window 0 7 type --clearmodifiers --window 0 '{'; xset r on"
  Control+Alt + 7

答案2

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

"xdotool key braceleft"
   Release+Control+Alt + 7

这样,快捷方式使用的键和发送的键就不会冲突。

答案3

当我尝试其他几种方法时,我注意到 xdotool 似乎触发得太早了。我修改了配置如下:

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

现在它向活动窗口发送了正确的 { 符号。现在唯一剩下的就是将睡眠和延迟减少到可行的值,因为 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

但是,如果你想输入多个 @ 符号(例如),你必须按预期按下 Ctrl+Alt+Q,但释放所有键,然后再次按下。然而,这比没有 Control+Alt 选项代替 AltGr 要好得多,但它并不像我习惯的那样有效。也许我也会找到解决办法。

答案4

不确定为什么它不适用于xbindkeys,我猜你需要指定要写入的窗口。作为一种解决方法,你可以改用xvkbd

  1. 安装xvkbd

    sudo apt-get install xvkbd
    
  2. 将其添加到您的.xbindkeysrc文件中

    "xvkbd -text '{'"
    Control+Alt + 7
    

那应该可行。


笔记

由于某种原因,在我的计算机上,xvkbd使用的是我的辅助布局之一(西班牙语)而不是我的主要布局(美国英语),这导致{实际打印"。如果您也遇到此问题,只需稍微尝试一下即可找出与所用布局相对应的键{。或者,您可以深入挖掘并找出xvkbdlocale设置的来源。

相关内容