fcitx5-rime(万象输入法)Shift/CapsLock 中英文切换失效 — 修复说明
1. 原因(Root Cause)
问题不在 rime 的配置,而在 Omarchy/Hyprland 的键盘层把 CapsLock 和 Shift 截胡了。
Omarchy 默认的 Hyprland 配置(/usr/share/omarchy/default/hypr/input.lua)里设置了:
local kb_options = "compose:caps,shift:both_capslock_cancel"
它在合成器/XKB 层面(比 fcitx5 更底层)改键:
compose:caps
把 CapsLock 键改成了 Compose 键(Multi_key)。按 CapsLock 时,Hyprland 发给
fcitx5 的不是 Caps_Lock,而是 Multi_key。fcitx5-rime 会把它当作组合键
(compose 序列)吞掉,根本不会转发给 rime,所以 rime 里的 Caps_Lock: clear
(切换中英)永远收不到这个键。
shift:both_capslock_cancel
双 Shift 组合触发 CapsLock、单 Shift 取消它,干扰了 rime 的“单击 Shift 切换中英” 逻辑。
rime 配置本身是对的(
~/.local/share/fcitx5/rime/default.yaml里ascii_composer/switch_key的Caps_Lock: clear、Shift_L/R: commit_code都在,且已正确部署到build/),问题就出在这一层键位重映射上。
2. 修复(What I did)
在用户覆盖文件 ~/.config/hypr/input.lua(原文件已备份)里加了覆盖,清空
kb_options:
hl.config({
input = {
kb_options = "",
},
})
应用并验证:
hyprctl reload # → ok
hyprctl configerrors # → 无错误
hyprctl getoption input:kb_options # → str: (空) set: true
现在 CapsLock 和 Shift 都是标准键了。
3. 使用说明(How to use now)
- CapsLock:直接按一下即可切换中/英文状态(它不再是大写锁定,也不再是 Compose 键)。
- Shift:需要快速点按(按下后 500ms 内松开)才会切换;按住 Shift 仍然是 输入大写字母。这是 librime 的设计,用来区分“点按切换”和“按住打大写”。
- 若改完立刻测试没反应:重新聚焦输入框,或重启输入法:
fcitx5-remote -r(或fcitx5 -r -d)。
4. 副作用(Compose key lost)
compose:caps 是 Omarchy 特意把 CapsLock 设成 Compose 键来打特殊字符(如 é、
™)的。清空后这个 Compose 键功能就没了。
如果想继续保留 Compose 键,可以把它换绑到别的键上(例如右 Alt):
hl.config({
input = {
kb_options = "compose:ralt",
},
})