在 Ubuntu 里,要自定义系统快捷键,最稳妥、也最直接的办法,还是 gsettings 和图形设置界面。相比之下,dconf-editor 在 GNOME 42+ 环境中对 keybinding 的写入,常常会被系统忽略,或者随后又被重置,而且部分路径本身已经被设成只读。图形界面的操作方式相对更安全、兼容性也更好;如果使用 gsettings 命令,则需要格外留意引号格式,以及多层覆盖带来的影响。

gsettings 和图形设置界面是 Ubuntu 自定义系统快捷键最可靠、最直接的途径。用 dconf-editor 或手动改配置文件容易出错,且 GNOME 40+ 版本已逐步限制底层 keybinding 路径的写入权限。
在“设置”里添加或修改全局快捷键
这是最安全、兼容性最好的方式,适用于绝大多数用户场景(比如绑定 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 后期及 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 等程序支持在菜单项上直接重绑快捷键,但必须先启用该功能。
- 运行命令:
gsettings set org.gnome.settings-daemon.plugins.keyboard attach-to-keyboard true - 重启应用(或注销),再打开菜单,鼠标悬停到某项(如「文件 → 新建文档」),直接按新组合键即可绑定
- 按
Backspace可清除自定义,恢复默认 - Firefox、VS Code、Chrome 等 Electron 或 Qt 应用不支持此机制,它们走自己的快捷键体系
- 该设置不会影响系统级快捷键,只作用于当前应用的菜单项
gsettings)、WM 层(Mutter)、输入法框架层(IBus/Fcitx)、应用自身层(GTK shortcut keys)。改错一层,其他层可能覆盖或拒绝响应。动手前最好先用 gsettings list-recursively | grep keybinding 看清当前实际生效的是哪条路径。