Xbindkeys无法正常工作


9

我有点问题。我想从以前的系统中重新映射一些我惯用的热键,但无法使其正常使用xbindkeys

xbindkeys 可以识别组合,但是某种程度上命令不会触发。

如果我使用命令

xdotool key braceleft

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

我要实现以下目标:

我想{使用Alt_R+ 7Alt_Left+ Ctrl+ 在活动窗口中键入字符, 7因此可以同时使用两者。我知道Alt_R(AltGr)是正确的方法,但是在德语键盘上,用AltGr(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'

这是我的配置,不起作用

"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的选项要好得多,但是它并不像我以前使用的那样有效。也许我也会为此找到解决方案。


嗯,这是一个好发现!回答自己的问题没有代表限制,只有时间限制。如果您能在6小时内回来并将其发布为答案,那就太好了。如果您对此有所关心,那还会给您带来一些代表。如果您真的不在乎,几天后我将在您的答案中包含您的解决方案。
terdon 2014年

您是否曾经想过xdotool在按住时如何重复按键?
Farzher 2014年

老实说,我现在还没有尝试过。我成功地使英雄联盟以60fps的速度流畅运行(在12.04中它根本不会启动),这样我在家时就一直在玩。
Ello 2014年

几天来,我没有获得一些捷径。解决方案很简单:我的Ubuntu桌面在xbindkeys之前有快捷方式。只需编辑滑浪板设置,并添加新的自定义快捷键即可操作xdotool getactivewindow key Home
BurninLeo 2014年

看起来您正在尝试模拟德语键盘布局。您为什么不只在系统设置中切换键盘布局?
Rapti 2015年

Answers:


4

问题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

感谢您的答复,但是我现在将Manjaro与XFCE一起使用,并且可以立即使用,因此无需睡眠。
Ello

@Ello,这些答案不仅适合您,因此非常感谢您提供最通用的解决方案。
Midenok

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的选项要好得多,但是它并不像我以前使用的那样有效。也许我也会为此找到解决方案。


这很奇怪,很高兴您解决了这个问题,但是我真的不知道为什么会这样。无论如何,感谢您抽出宝贵的时间发布此信息,它可能会对下一个遇到相同问题的人有所帮助。
terdon

代替sleep,我想您想添加+ release到键组合中。这将告诉xbindkeys您等到释放键后再触发命令。
wjandrea


2

我最近遇到了这个问题,我尝试使用Ctrl + G模拟媒体播放/暂停(XF86AudioPlay)键。经过一些研究,看来我不仅需要取消Control,还需要取消g键(这是sleep 0.1首先需要什么延迟)。如果我通过keyup在xdotool和--clearmodifiers开关中同时使用取消了这两个键,那么它将起作用。这是我的.xbindkeys.rc文件中的新命令:

"xdotool keyup g key --clearmodifiers XF86AudioPlay"
Control + g

1

不知道为什么它不能使用xbindkeys,我猜测您需要指定要写入的窗口。作为解决方法,您可以xvkbd改用。

  1. 安装 xvkbd

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

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

那应该工作。


笔记

由于某种原因,在我的机器xvkbd上使用的是我的辅助布局之一(西班牙语)而不是我的主要布局(美国英语),这{实际上导致print "。如果您也遇到此问题,只需稍作练习,找出哪个键对应于所{使用的布局。另外,您可以更深入地研究并确定从何处xvkbd获取其locale设置。


仍然无法正常工作。即使字符正确。如果我在控制台中编写xvkbd -text'apple',它会打印出苹果,如果我通过xbindkeys执行它,则什么也不会发生。如果我看xbindkeys -v,它会看到它识别出按下的命令
Ello 2014年

我可以使用它,但还有其他功能
Ello 2014年

@Ello太好了!你用了什么 对我来说很好。您能张贴一个答案来解释您的解决方案并接受吗?
terdon 2014年

我更改了帖子,由于缺乏声誉,无法回答自己的问题。抱歉
Ello 2014年
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.