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

“Ubuntu”中是否存在一个存储键/组合/快捷键的完整列表?

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

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

当然,Ubuntu必须将这个存储在某个地方,以便按键盘上的按键组合指向它所连接的内容? 如果在Ubuntu中没有这样的地方,那么发布以作为答案,以便搜索的未来用户知道。

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

您可以通过以下方式自行validation:

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

所以你看到窗口管理器在实践中获取所有关键事件,如果它不想捕获它们,它会将它们传递给应用程序。 然后,应用程序可以为自己的小部件执行相同的操作(例如,如何在Web浏览器中全天按Enter ,但在将光标放在地址栏或可以输入文本的字段之前,它将不会执行任何操作)。

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

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

直到Ubuntu 12.04

快捷方式的位置取决于您使用的桌面桌面(gnome / unity,kde,xfce,lxde等)。

对于侏儒,他们是在
~/.gconf/desktop/gnome/keybindings (自定义快捷方式)

和下
~/.gconf/apps/metacity

自Ubuntu 12.10起

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

~/.config/compiz-1/compizconfig

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

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

对于应用程序,您可以通过工具包粗略划分它们。 也就是说,GTK应用程序也使用gconf。

当然,Ubuntu必须将这个存储在某个地方,以便按键盘上的按键组合指向它所连接的内容?

不完全的。 专注的应用程序在X键盘事件中获得第一次启动,但如果没有,则它会冒泡到其他应用程序,即窗口管理器。 因此,你可以拥有一个捕获Alt + F4并且不关闭窗口的游戏(该死的,Jamestown!)。 我认为你认为它会进入一些中央事件路由器,然后匹配某个数据库,然后路由到它的目的地。 这更像是传递一瓶饮料:通过,如果你想要通过一个swig,并通过其余的,或采取整个事情,并贪婪。

Linux / FOSS环境(您可能已经注意到)非常民主,让所有应用程序在单个中央键盘配置存储库上达成一致是一个愚蠢的错误。 首先,你已经有了很久以前编写的无法维护的应用程序而且不会知道它。

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

从源窗口开始,X服务器搜索窗口层次结构,直到它将客户端指定的第一个窗口定位为对这些事件感兴趣。 如果其中一个介入窗口设置了do-not-propagate-mask以禁止生成事件类型,则将抑制这些类型的事件。

也,

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

您可以设置属性以禁用传播 。

问题是,你不告诉X要监听哪些密钥,所以你永远不能告诉先前应用程序监听哪些密钥(更不用说他们做了什么),或者实际上他们是否打算将它传播到实际上听着它。 因此,中央注册表在X级别是不可能的,因此您必须在工具包级别执行此操作,这实际上是不可能的。 :d

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

我不明白交互键盘的整个过程 – 操作系统 – 内核 – X11 – 窗口管理器 – 桌面环境 – 应用程序,但如果某个窗口,如Gedit,有键盘焦点,它可以处理输入本身,它就是这样。

在11.10中,在系统配置 – >键盘 – >快捷方式下,您可以获得相当大的列表。 这是你在找什么?