“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
窗口管理器会先于应用程序获取所有按键事件,因此,如果它想要使用这些事件,它就会这样做,而您的应用程序永远不会收到它们。如果窗口管理器不想自己对按键事件做出反应,它会将它们传递给应用程序。
您可以通过以下方式自行验证:
- 启动终端。
- 启动
xev | grep KeyPress
X 事件查看器。 - 按下
Alt
,注意xev
显示它在其终端窗口中获得了按键事件。 - 按
Ctrl
,再次注意xev
获取事件。记下终端窗口现在的样子。 - 按下
Left arrow
即可转到另一个工作区。(我假设您将其作为窗口管理器的快捷键。) - 按
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 中,在系统配置 -> 键盘 -> 快捷键下,您可以看到一个相当大的快捷键列表。这就是您要找的吗?