适用环境:Ubuntu 20.04 Focal + GNOME + X11。文中第三方 PPA 仅用于 Focal;更新的 Ubuntu 版本应优先使用发行版官方仓库。

Ubuntu 默认集成 IBus,部署简单,但在中文拼音场景中,候选词联想偏弱,偶尔还会出现切换或输入异常。为改善日常中文输入体验,先通过 DeepSeek 比较 IBus、Fcitx5、Rime 等方案,再由 Codex 在 Ubuntu 20.04 Focal + GNOME + X11 环境中完成实际安装和调试。

相关项目:

1. 为什么选择 Fcitx5

DeepSeek 的讨论主要完成了方案筛选:

  • IBus 与 Ubuntu/GNOME 集成最深,适合不想配置的用户。
  • Fcitx5 响应快、主题和按键可定制,中文插件较完整。
  • Rime 自定义能力更强,但维护词库和方案的成本也更高。
  • 搜狗等依赖旧框架的方案不适合作为新安装首选。

本次目标不是追求最多插件,而是解决三个实际问题:

  1. 拼音候选和联想体验弱。
  2. 中英文切换偶发异常。
  3. 希望候选框可换主题,并让所有窗口共享中英文状态。

GitHub Star 只能反映一部分热度。输入法属于桌面基础设施,用户规模和 Star 数不能直接代表可用性。

2. Ubuntu 20.04 的版本陷阱

Ubuntu 20.04 官方仓库提供的是较早的 Fcitx5 预发布快照,运行时版本为 4.99.0。它可以输入中文,但缺少后续稳定版中的部分配置,例如:

1
2
[Behavior]
ShareInputState=All

没有这个选项时,每个窗口维护自己的输入状态:一个终端切到中文,另一个终端仍可能是英文。

若系统较新,应优先使用发行版官方仓库。本文后续使用的第三方 PPA 仅针对 Ubuntu 20.04 Focal,不应直接套用到其他 Ubuntu 版本。

3. 初始安装

先备份配置:

1
cp -a ~/.config/fcitx5 ~/.config/fcitx5.backup-YYYYMMDD

安装核心、中文插件和应用前端:

1
2
3
4
5
6
7
sudo apt update
sudo apt install \
fcitx5 \
fcitx5-chinese-addons \
fcitx5-frontend-gtk2 \
fcitx5-frontend-gtk3 \
fcitx5-frontend-qt5

选择 Fcitx5:

1
im-config -n fcitx5

注销并重新登录后,预期环境为:

1
2
3
GTK_IM_MODULE=fcitx5
QT_IM_MODULE=fcitx5
XMODIFIERS=@im=fcitx

注意:XMODIFIERS 使用 @im=fcitx,不是 @im=fcitx5。

4. 第一个故障:Fcitx5 没启动,IBus 仍在工作

最初同时存在两套互相矛盾的配置:

  • ~/.xinputrc 通过 im-config 选择 Fcitx5。
  • ~/.config/environment.d/input-method.conf 又手工设置了旧值 fcitx。

Ubuntu 20.04 的 Xsession 启动脚本检测到输入法变量已被手工设置后,会跳过 im-config 的自动初始化。结果是应用尝试连接 Fcitx,但 Fcitx5 守护进程没有启动;GNOME 则继续运行 IBus。

解决方法是只保留一个配置入口。本次删除手工 environment.d 覆盖,让 im-config 接管,然后重新登录。

检查方法:

1
2
3
env | grep -E 'GTK_IM_MODULE|QT_IM_MODULE|XMODIFIERS'
pgrep -a fcitx5
fcitx5-remote

fcitx5-remote 常见返回值:

  • 1:英文/未激活
  • 2:中文输入法已激活

5. GNOME 与 IBus 快捷键冲突

GNOME 原来保留了 IBus 的 libpinyin 输入源,并占用 Super+Space。应用实际由 Fcitx5 接管时,这个快捷键只切换 GNOME 输入源,看起来像“按了没反应”。

确认 Fcitx5 正常后,可让 GNOME 只保留普通键盘:

1
2
3
4
gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us')]"
gsettings set org.gnome.desktop.input-sources mru-sources "[('xkb', 'us')]"
gsettings set org.gnome.desktop.wm.keybindings switch-input-source "[]"
gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward "[]"

Fcitx5 全局配置:

1
2
3
4
5
6
[Hotkey/TriggerKeys]
0=Control+space
1=Super+space

[Behavior]
ShareInputState=All

配置文件位置:

1
~/.config/fcitx5/config

6. 升级到支持全局状态的版本

Fcitx5 5.0.5 已支持 ShareInputState=All。Ubuntu 20.04 可使用专为 Focal 构建的第三方 PPA:

先添加软件源,再做模拟安装:

1
2
3
4
5
6
7
8
9
sudo add-apt-repository ppa:zhsj/fcitx5
sudo apt update

apt-get -s install \
fcitx5 \
fcitx5-chinese-addons \
fcitx5-frontend-gtk2 \
fcitx5-frontend-gtk3 \
fcitx5-frontend-qt5

模拟结果需要检查:

  • 是否降级软件包。
  • 是否删除无关应用。
  • 是否出现未满足依赖。
  • 所有 Fcitx5 核心、前端和中文插件是否来自同一套仓库。

确认后再执行正式安装。

7. 第二个故障:升级后启动即崩溃

第一次只升级核心和前端后,Fcitx5 启动出现 SIGSEGV。堆栈同时出现:

1
2
libFcitx5Core.so.5
libFcitx5Core.so.7

根因不是配置文件,而是 ABI 混用:新核心加载了仍链接旧 .so.5 的 xcb.so、拼音等插件。

检查旧 ABI 插件:

1
2
3
for file in /usr/lib/x86_64-linux-gnu/fcitx5/*.so; do
ldd "$file" 2>/dev/null | grep -q 'libFcitx5Core.so.5' && echo "$file"
done

修复原则:Fcitx5 核心、X11/Wayland 前端、拼音、表格和已启用插件必须作为一组升级,不能只升级主程序。

本次补齐了:

  • fcitx5-module-xorg
  • fcitx5-module-wayland
  • fcitx5-pinyin
  • fcitx5-table
  • fcitx5-module-punctuation
  • fcitx5-module-pinyinhelper
  • fcitx5-module-cloudpinyin
  • fcitx5-module-fullwidth
  • fcitx5-module-quickphrase

升级 chttrans 会替换 OpenCC,并导致现有 GoldenDict 被卸载。因此本次移除旧 chttrans,保留 GoldenDict。代价是暂时没有 Fcitx5 的一键简繁转换,拼音输入不受影响。

8. 安装 macOS 风格主题

使用 Candlelight 的 macOS-dark:

1
2
3
4
5
6
7
8
git clone --depth 1 \
https://github.com/thep0y/fcitx5-themes-candlelight.git \
/tmp/fcitx5-themes-candlelight

mkdir -p ~/.local/share/fcitx5/themes
cp -a \
/tmp/fcitx5-themes-candlelight/macOS-dark \
~/.local/share/fcitx5/themes/macOS-dark

Classic UI 配置:

1
2
3
4
Vertical Candidate List=False
PerScreenDPI=True
Font="Sans 13"
Theme=macOS-dark

保存到:

1
~/.config/fcitx5/conf/classicui.conf

9. 修改候选词方向键行为

默认拼音配置把 Up/Down 放在 PrevPage/NextPage,因此方向键会整页翻动。改为逐个候选词移动:

1
2
3
4
5
6
7
8
9
10
11
12
13
[PrevPage]
0=minus

[NextPage]
0=equal

[PrevCandidate]
0=Shift+Tab
1=Up

[NextCandidate]
0=Tab
1=Down

保存到:

1
~/.config/fcitx5/conf/pinyin.conf

最终行为:

  • Up/Down:逐个选择候选词。
  • -/=:上一页/下一页。
  • Shift+Tab/Tab:保留逐个选择。

10. 最终验证

1
2
3
4
fcitx5 --version
fcitx5-remote
pgrep -a -x fcitx5
dpkg --audit

本次最终状态:

1
2
3
4
5
6
Fcitx5: 5.0.5
Input method: pinyin
ShareInputState: All
Theme: macOS-dark
Plugin ABI: clean
dpkg: clean

11. AI 协作中的经验

这次过程适合拆成两个阶段:

  1. DeepSeek 用于搜索候选方案、比较输入法框架和收集公开项目。
  2. Codex 读取真实进程、环境变量、APT 依赖和 DBus 配置,逐层定位故障并实施修复。

AI 给出的通用安装命令不能直接替代环境诊断。尤其是输入法环境变量、发行版版本、桌面会话和插件 ABI,必须以当前系统输出为准。