![如何找到*为什么*我无法绑定某些键盘快捷键(或者哪个应用程序占用了它)?](https://linux22.com/image/832397/%E5%A6%82%E4%BD%95%E6%89%BE%E5%88%B0*%E4%B8%BA%E4%BB%80%E4%B9%88*%E6%88%91%E6%97%A0%E6%B3%95%E7%BB%91%E5%AE%9A%E6%9F%90%E4%BA%9B%E9%94%AE%E7%9B%98%E5%BF%AB%E6%8D%B7%E9%94%AE%EF%BC%88%E6%88%96%E8%80%85%E5%93%AA%E4%B8%AA%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%8D%A0%E7%94%A8%E4%BA%86%E5%AE%83%EF%BC%89%EF%BC%9F.png)
简而言之:在 Unity 下,是否有任何方法可以找出哪个应用程序获取了某些全局快捷方式?我并不是要求“标准快捷方式”,而是要求某种方式来获取有关实际的捷径(在我当前的配置中哪个应用程序实际上刚刚保存了给定的密钥)
更长的故事:
我在管理键盘快捷键方面反复遇到问题。目前:
Synapse 有时 (*) 无法将 Win-Space 绑定为其激活快捷方式,报告“无法使用签名‘space’注册热键‘activate’”(通常意味着此快捷方式已被占用)
(*) 一次登录后可以正常工作,另一次登录后则不行。我怀疑两个应用程序之间存在竞争……
由于某种原因,F9 会使我的屏幕稍微变暗(并且 F9 无法到达应用程序级快捷方式,因此例如我的 byobu 菜单不起作用)
我尝试查看各个地方,并且:
我不要在键盘设置/快捷方式中查看任何这些快捷方式
我在 gconf-editor 中找不到它们(我尝试在值中搜索 F9,但没有找到任何内容)
我在 dconf-editor 中找不到它们(没有搜索所以我点击了一些最明显的路径)
所以我的问题是:有没有办法询问 unity/dconf/gconf/d-bus/whatever 有关当前全局热键分配(哪个进程保留哪个键)。或者强制将这些分配记录到某个日志文件中。或者从某个地方 grep 它们。或者……
答案1
在 12.10 和 17.04 之间,Ubuntu 桌面实际上Compiz 和 Unity 本身只是一个 Compiz 插件。
如果您设置并启用 Compiz“命令”插件并使用 CCSS 设置键盘快捷键而存在冲突,则 CCSM 应该会提醒您哪个插件导致了冲突,并且还应该提供在应用您的设置之前禁用冲突的插件或冲突的键绑定的选项。
就我个人而言,我在 14.04+ 中设置键盘快捷键时也遇到了困难,但自从我决定开始使用 CCSM 插件而不是 Unity 中的键盘快捷键设置后,我没有遇到任何问题,并且我的所有快捷键都可以正常工作,因此强烈建议您至少将其作为一种选项进行检查。
答案2
现在我了解你需要什么……
sudo apt-get install evtest
享受拆开 Ubuntu USB HID 事件的乐趣吧!
警告这在 PS2/style 键盘上不起作用...(但无论如何谁还会使用它们呢?):-)
答案3
从我的一个较早的回答s:
首先你必须安装xdotool
:
sudo apt-get install xdotool
我编写了一系列命令来展示按键的被动抓取。例如,要查看是什么抓取了 Shift+PrintScreen 组合键,您可以使用以下“脚本”:
xdotool keydown "shift+Print"; xdotool key "XF86LogGrabInfo"; xdotool keyup "Print"; sleep 1; xdotool keyup "shift"; tail /var/log/Xorg.0.log
这将触发 Shift+PrtSc 键事件,在默认的 Ubuntu 安装中将显示 gnome-settings-daemon 抓取键盘。至少这在我较旧的 12.04 安装上有效,但看起来在 14.04 上我必须使用这个:
xdotool key "shift+Print"; sleep 1; xdotool key "XF86LogGrabInfo"; xdotool keyup "Print"; sleep 1; xdotool keyup "shift"; tail /var/log/Xorg.0.log
但
xdotool keydown "F12"; xdotool key "XF86LogGrabInfo"; xdotool keyup "F12"; tail /var/log/Xorg.0.log
有时仍然有效,有时无效。不知道为什么。
您只需通过更改需要模拟的键来修改上述“脚本”。