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

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

“Ubuntu”中是否有一个地方存储了哪些键/组合/快捷键绑定到什么的完整列表?

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

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

当然,Ubuntu 必须将其存储在某个地方,以便键盘上按下的组合键能够指向与其连接的内容?如果 Ubuntu 中没有这样的地方,那么请将其作为答案发布,以便未来的用户通过搜索了解情况。

答案1

自 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

答案2

窗口管理器会先于应用程序获取所有按键事件,因此,如果它想要使用这些事件,它就会这样做,而您的应用程序永远不会收到它们。如果窗口管理器不想自己对按键事件做出反应,它会将它们传递给应用程序。

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

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

因此,您会发现窗口管理器实际上会获取所有按键事件,如果它不想捕获这些事件,它会将它们传递给应用程序。然后应用程序会对自己的小部件执行相同的操作(例如,您可以Enter在 Web 浏览器中整天按下 ,但直到您将光标放在地址栏或可以输入文本的某个字段中时,它才会执行任何操作)。

应用程序可以自行设置快捷方式,并且各个应用程序之间的配置都是独立的。

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

答案3

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

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

对于应用程序,您可以粗略地根据其工具包进行划分。也就是说,GTK 应用程序也使用 gconf。

当然,Ubuntu 必须将其存储在某个地方,以便将键盘上按下的组合键定向到与其连接的内容?

不完全是。聚焦的应用程序首先在 X 键盘事件中启动,但如果没有,它会冒泡到其他应用程序,即窗口管理器。因此,您可以拥有一个捕获 Alt+F4 而不关闭窗口的游戏(该死的詹姆斯敦!)。我想您认为它会进入某个中央事件路由器,然后与某个数据库匹配,并路由到其目的地。这更像是传递一瓶饮料:传递,如果您愿意,喝一口,然后传递其余的,或者拿走整个东西并贪婪。

Linux/FOSS 环境(您可能已经注意到)相当民主,让所有应用程序都同意一个中央键盘配置存储库是一件愚蠢的事情。首先,您拥有很久以前编写的未维护应用程序,并且不知道这一点。

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

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

还,

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

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

问题是,你没有告诉 X哪个聆听的钥匙,这样你就永远不会知道先验应用程序监听哪些键(更不用说它们做什么了)或者它们是否真的打算在监听时将其传播出去。因此,在 X 级别上不可能实现中央注册表,因此您必须在工具包级别上执行此操作,这实际上是不可能的。:D

答案4

在 11.10 中,在系统配置 -> 键盘 -> 快捷键下,您可以看到一个相当大的快捷键列表。这就是您要找的吗?

相关内容