在 Ubuntu 系统中,自定义系统快捷键最稳妥、也最直接的方法,依然是使用 gsettings 配合图形化设置界面。相比之下,dconf-editor 在 GNOME 42+ 环境下对 keybinding 的写入,经常会被系统忽略,或者随后被自动重置,而且部分相关路径本身已经被设为只读。图形界面的操作方式通常更安全,兼容性也更理想;如果通过 gsettings 命令修改,则需要特别注意引号格式,以及多层配置覆盖带来的影响。

gsettings 与图形设置界面,是 Ubuntu 自定义系统快捷键最可靠、最高效的方式。使用 dconf-editor 或手动修改配置文件不仅容易出错,而且在 GNOME 40+ 版本中,底层 keybinding 路径的写入权限也已逐步受到限制。
在“设置”里添加或修改全局快捷键
这是最安全、兼容性最好的 Ubuntu 快捷键设置方法,适用于绝大多数使用场景,比如绑定 Ctrl+Alt+T 打开终端,或设置 Super+Space 切换输入法。
- 打开「设置」→「键盘」→「快捷键」标签页
- 点击右上角「+」号添加新的快捷键,或点击已有条目右侧的按键区域,重新录制快捷键组合
- 命令栏建议填写完整可执行命令,例如:
gnome-terminal、nautilus、xdotool key Super_L(前提是已安装xdotool) - 尽量避免使用已被系统占用的组合键,比如
Ctrl+Alt+L默认用于锁屏,强行覆盖可能引发冲突或导致失效 - 部分系统快捷键(如窗口管理相关快捷键)只能在「窗口」或「系统」分类中修改,不会显示在「自定义」列表里
用 gsettings 修改输入法切换键
在 GNOME 桌面环境中,默认通过 org.gnome.desktop.wm.keybindings switch-input-source 控制输入法切换快捷键,但 IBus 或 Fcitx 的实际行为还会受到各自输入法框架设置影响,因此通常不能只修改这一处。
- 查看当前配置值:
gsettings get org.gnome.desktop.wm.keybindings switch-input-source - 设置为
Super+space:gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['space']" - 如果使用 IBus,还需要同步设置:
gsettings set org.freedesktop.ibus.general.hotkey triggers "['space']" - 修改完成后,重启 GNOME Shell(
Alt+F2后输入r并回车),或者注销后重新登录,设置才会生效 - 要特别注意大小写与引号格式:
不能写成,而且单引号也不能省略
为什么 dconf-editor 改了没反应?
在 GNOME 42+(如 Ubuntu 22.04 LTS 后期版本及 Ubuntu 24.04 默认环境)中,部分 keybinding 的写入权限已经转移到 gsettings 层级,直接编辑 org.gnome.desktop.wm.keybindings 下的键值,往往可能被忽略或自动恢复。
- 安装并打开
dconf-editor后,路径/org/gnome/desktop/wm/keybindings/依然可以查看,但写入不一定能够真正生效 - 某些键值(例如
panel-main-menu)已被标记为“只读”,双击编辑时会提示“无法写入” - 如果你发现修改
switch-applications后没有任何变化,大概率说明 GNOME 当前读取的是gsettings配置,而不是 dconf 后端 - 当确实需要进行底层快捷键干预时(例如禁用
Super+Tab),应优先尝试gsettings set org.gnome.desktop.wm.keybindings switch-applications []
自定义菜单快捷键(仅限 GTK/GNOME 原生应用)
Nautilus、gedit、GNOME Terminal 等 GTK/GNOME 原生程序支持直接为菜单项重新绑定快捷键,但前提是先启用这一功能。
- 运行命令:
gsettings set org.gnome.settings-daemon.plugins.keyboard attach-to-keyboard true - 重启应用程序(或注销系统)后,再打开菜单,将鼠标悬停到某个菜单项(如「文件 → 新建文档」),直接按下新的快捷键组合即可完成绑定
- 按
Backspace可以清除自定义快捷键并恢复默认设置 - Firefox、VS Code、Chrome 等 Electron 或 Qt 应用并不支持这一机制,因为它们使用的是各自独立的快捷键体系
- 该设置不会影响 Ubuntu 系统级快捷键,只会作用于当前应用的菜单项
gsettings)、窗口管理器层(Mutter)、输入法框架层(IBus/Fcitx)、以及应用自身层(GTK shortcut keys)。如果改错层级,其他层可能会覆盖设置,或者直接拒绝响应。实际操作前,最好先运行 gsettings list-recursively | grep keybinding,确认当前真正生效的是哪一条配置路径。