Ubuntu在哪里存储其键盘快捷键配置?


34

在“ Ubuntu”中是否有一个地方可以存储与什么键/组合键/快捷键绑定的完整列表?

Unity的键盘和鼠标快捷键是什么?列出Dash,启动器等的一些“ Unity”快捷方式,以及如何列出正在使用的Compiz键绑定?展示了一种列出compiz绑定的方法,但是我正在寻找更多的东西(不仅仅是一些键绑定仅限于Unity或Compiz),尽管这是一个开始。

是否存在使用中的键绑定/组合键/键盘快捷键的全局列表,该列表存储在Ubuntu的某处,或者有一种编译并列出它们的方法?一种适用于Ubuntu及其中运行的东西(Unity,Compiz,程序快捷方式等)。

当然,Ubuntu必须将其存储在某个位置,以便将键盘上按的组合键定向到与其连接的对象?如果在Ubuntu中没有这样的地方,则发布一个答案,以便将来的用户(进行搜索)知道。


1
好,我改名它是较低的重复-Y
豪尔赫·卡斯特罗

到目前为止,有两个答案提出了两个相互矛盾的事件序列。Lakritsbollar表示,窗口管理器首先获得控制权,然后将其传递给应用程序; nfirvine表示,应用程序首先对其进行破解,然后将其传递给窗口管理器。是哪一种
詹姆斯

Answers:


10

您的窗口管理器会在应用程序执行之前获取所有关键事件,因此,如果窗口管理器要使用这些事件,它就会这样做,并且您的应用程序将永远不会收到它们。如果窗口管理器不想对按键事件本身做出反应,则将其传递给应用程序。

您可以通过以下方式自行验证:

  1. 启动终端。
  2. 启动xev | grep KeyPress,X事件查看器。
  3. Alt,请注意,这xev表明它在其终端窗口中收到了按键事件。
  4. Ctrl再次按,请注意已xev得到该事件。注意终端窗口现在的样子。
  5. 按下Left arrow可转到另一个工作区。(我假设您将其作为窗口管理器的快捷键。)
  6. Right arrow返回您正在跑步的地方xev。请注意,通过左右箭头键切换工作区时,它从未收到任何键事件-输出与步骤4中的输出相同。

因此,您会看到实际上窗口管理器会获取所有关键事件,并且如果不想捕获它们,则会将它们传递给应用程序。然后,该应用程序将对其自己的窗口小部件执行相同的操作(例如,您可以Enter整天在Web浏览器中按一下,但是直到将光标放在地址栏或可以输入文本的某个字段中之前,它什么也不做) 。

由应用程序设置自己的快捷方式,并且应用程序彼此独立配置。

在KDE 3.x中,如果我没记错的话,可以Ctrl-s在KDE Con​​trol Center中设置默认的快捷方式(例如,用于保存),它将应用于用Qt工具箱编写的所有应用程序,但是我不知道这是否仍然可行自从他们切换到KDE 4以来。


这不是100%的答案,但是已经接近尾声了。基本上,没有中央存储键盘绑定/快捷方式的地方。窗口管理器首先在按键时出现裂缝,然后才激活应用程序。焦点也起着作用。
詹姆斯

20

从Ubuntu 17.10开始

在此路径上

dconf dump /org/gnome/desktop/wm/keybindings/
dconf dump /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/  # Custom

您也可以使用dconf-editor(GUI)或gsettings(CLI)。

从Ubuntu 12.10-17.04开始

~/.config/dconf/user(在dconf-editor中:(org.gnome.settings-daemon.plugins.media-keys.custom-keybindings自定义快捷方式)

~/.config/compiz-1/compizconfig

直到Ubuntu 12.04

快捷方式的位置根据您所使用的女巫桌面的不同而不同(gnome / unity,kde,xfce,lxde等)。

对于gnome,它们位于
~/.gconf/desktop/gnome/keybindings(自定义快捷方式)下

和下
~/.gconf/apps/metacity


11.10不使用GNOME或Metacity。
nfirvine

但是当我使用快捷方式时,它的路径仍然有效。
desgua 2012年

当在Macbook pro上吃了非常新鲜的ubuntu 11.10安装时,第一个位置没有键盘绑定文件,但是第二个位置具有以下内容:general/ global_keybindings/ window_keybindings/
Victor S

1
第一个位置用于自定义快捷方式。
desgua 2012年

1
@AnonymousPlatypus参见此处gsettings说明
wjandrea

4

不,没有一个地方可以存储所有快捷方式。应用程序可以选择在任何地方存储其配置。

就是说,您主要关注的是两个级别:应用程序级别(例如Ctrl-C用于Firefox中的复制)和窗口管理器级别(例如Win + D以显示桌面)。 Compiz使用gconf来存储其配置

对于应用程序,可以将它们按工具箱大致划分。即,GTK应用程序也使用gconf。

当然,Ubuntu必须将其存储在某个位置,以便将键盘上按的组合键定向到与其连接的对象?

不完全的。重点关注的应用程序在X键盘事件中获得先发优势,但如果没有,它将冒充其他应用程序,即窗口管理器。因此,您可以拥有一款可以捕获Alt + F4且不会关闭窗口的游戏(该死的Jamestown!)。我认为您正在考虑将其发送到某个中央事件路由器,然后与某个数据库进行匹配,然后路由到其目的地。这更像是传递一瓶饮料:传递,如果愿意的话喝一口酒,传递其余的东西,或者吸收整个事物并保持贪婪。

Linux / FOSS环境(您可能已经注意到)非常民主,而让所有应用程序在单个中央键盘配置存储库上达成一致是愚蠢的。一方面,您有很早以前就编写的不维护的应用程序,对此一无所知。

更新:根据关于该主题的Xlib文档

从源窗口开始,X服务器将搜索窗口层次结构,直到找到客户端指定的对这些事件感兴趣的第一个窗口为止。如果其中一个窗口的禁止传播掩码设置为禁止生成事件类型,则将抑制这些类型的事件。

也,

要接收KeyPress,KeyRelease,ButtonPress和ButtonRelease事件,请在窗口的事件掩码属性中设置KeyPressMask,KeyReleaseMask,ButtonPressMask和ButtonReleaseMask位。

而且你可以设置为禁用传播的属性

问题是,您不会告诉X 要监听哪些键,因此您永远无法告诉先验应用程序要监听的键(更不用说它们在做什么),或者如果实际上它们实际上是否打算将其传播出去听它。因此,在X级别上不可能有中央注册表,因此您必须在工具箱级别上做到这一点,但这实际上是不可能的。:D


我得出的结论几乎相同,即焦点决定了处理输入的内容。可以通过打开浏览器窗口,然后打开现在变为活动窗口的终端窗口来观察这种情况。如果将鼠标悬停在浏览器窗口上,则使用滚轮,即使终端窗口是活动窗口,它也会滚动浏览器窗口。
詹姆斯

我曾希望对我的问题有一个简单的答案,或者至少希望有一个简便的方法来编译和列出快捷方式,但是鉴于按键最终到达定义它们的方式,这似乎是不可能的。键盘快捷键/快捷键似乎遍布各地,其使用往往取决于活动内容和当前焦点。
詹姆斯

1
但是,我不支持您在窗口管理器之前获取键事件的应用程序。我认为Window Manager首先破解了活动,然后又激活了应用程序。
詹姆斯

1

应用程序独立存储它们的快捷方式,因此没有中央位置存储它们。

我不了解交互键盘的整个过程-操作系统-内核-X11-窗口管理器-桌面环境-应用程序,但是如果某个窗口(例如Gedit)具有键盘焦点,则可以处理输入本身就可以了。


-1

在11.10中,在“系统配置”->“键盘”->“快捷方式”下,您会看到很大的列表。那是您要找的东西吗?


他正在寻找包含所有快捷方式的文件,而不仅仅是它们的列表。
Mark O'Sullivan
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.