在 Rocky Linux 8 上编译安装最新版 iBus-Rime 输入法
在 Rocky Linux 8 (或 CentOS 8)中,系统自带的 librime
和 librime-lua 等依赖包版本通常较旧(1.3.0
左右),无法很好地支持 Rime 的一些现代化新特性(比如新版 Lua
插件脚本等)。为了获得最佳的输入体验,我们通常需要安装最新版的
Rime。
你可以用以下命令检查当前系统的 librime 版本:
1 | find /usr/lib /usr/lib64 /usr/local/lib /opt -name "librime.so*" |
为了系统稳定性与安全,我们不建议直接覆盖系统的默认库。本教程将采用“沙盒化”思路,将新版
Rime 统一编译安装到 /usr/local
目录下,与系统自带环境完全隔离。
开始之前
其它可选方案:
如果你的设备架构是 x86_64,可以考虑以下更简便的方案(不需要手动编译):
- ibus-rime.AppImage:由社区维护的打包方案,开箱即用,但目前不支持 ARM 架构。
- Fcitx5 + Flatpak:基于 Flatpak 安装 Fcitx5,可以绕开系统旧版 librime 问题。
本文提供手动编译的方法,适用于以下场景:仍需使用 ibus-rime(而非 Fcitx5)、使用 ARM 设备、或希望完全掌控编译过程的用户。
关于编译的安装目录:
P.S. 经研究,实际安装到 /usr
应该也没什么问题,这里安装到 /usr/local 是为了保险。
如果想直接安装到对应路径,则:
- 使用 dnf remove 旧版,防止加载到旧版的库。
- 下文中,所有涉及 PREFIX 的环境变量和命令,做适当修改。
准备工作:编译前置依赖
在编译核心引擎之前,我们需要安装一些依赖:
1 | dnf install marisa-devel yaml-cpp yaml-cpp-devel gtest gtest-devel libnotify zlib zlib-devel gflags gflags-devel leveldb leveldb-devel libnotify-devel ibus-devel |
也许还有遗漏,在后续编译过程中,如果有报错,可以再安装对应版本的。
注意:不要安装 glog glog-devel 以及
boost,仓库中的版本过旧,我们稍后会手动编译。
编译链设定
cmake 版本
首先要关注 cmake 的版本要求,虽然 librime 的
CMakeLists.txt 标注的最低版本是 3.12,但根据 librime
issue #856,实际上建议使用 cmake >= 3.25
以避免奇怪的编译错误。
检查当前版本:
1 | cmake --version |
如果版本过低(Rocky 8 默认是 3.20 左右,可能不够),可以从 CMake 官网下载新版二进制:
1 | cd /opt |
切换 GCC 工具链
Rocky Linux 8 的默认 GCC 版本较旧,编译现代 C++ 代码可能报错。建议切换到 GCC 12:
1 | # 如果未安装,先安装 gcc-toolset-12 |
重要:后续所有编译操作都需要在此
scl enable 开启的 shell
子进程中进行,否则编译器版本会回退到旧版。
编译安装 glog
Rime 依赖 glog 进行日志输出。我们直接从 GitHub
拉取最新版并用 CMake 编译:
1 | mkdir -p /root/rime-build |
Tips:在真正安装到系统前,可以先安装到一个临时目录测试一下生成的文件是否结构正确:
1 | cmake --install build --prefix /tmp/cmake-test |
确认一切正常后,再正式安装并刷新系统动态库缓存: 1
2sudo cmake --install build
sudo ldconfig
编译安装 Boost (视情况而定)
Rocky 8 自带的 Boost 版本可能较老。
如果你在后续编译中遇到 Boost 相关报错,可能需要手动编译 Boost。
注意:编译 Boost 时,请务必确保勾选/编译了
regex 模块,这是 Rime 强依赖的组件。
第二步编译命令参考:
1 | ./b2 --with-regex --with-filesystem --with-system install --prefix=/usr/local |
正式开始:编译核心组件
源码获取
ibus-rime 的源代码托管在 GitHub 上,同时通过 Git Submodule 关联了
librime 和 plum 两个子仓库:
1 | cd /root/rime-build |
ibus-rime 的编译依赖两个外部子模块,其 .gitmodules
配置如下:
1 | [submodule "librime"] |
执行以下命令一次性拉取所有子仓库:
1 | git submodule update --init |
如果网络顺畅,这一步通常很顺利。
ibus-rime 关联的 librime 子模块,默认指向的提交可能不是最新的 master。建议手动切换:
1 | cd /root/rime-build/ibus-rime/librime # 注意此处切换了工作目录 |
librime 本身不带 Lua
支持,需要通过官方插件机制加载。librime-lua 让 Rime
可以运行 Lua 脚本,是薄荷拼音、雾凇拼音等现代方案的必要依赖。
在 librime 源码目录内,使用自带的插件安装脚本:
1 | # 在 librime/ 目录内执行 |
该脚本会自动从 GitHub 克隆 librime-lua 到
plugins/ 目录下,后面,还要进一步下载 lua 相关文件:
1 | cd /root/rime-build/ibus-rime/librime/plugins/lua |
librime 及 lua 插件
为了让所有文件都在
/usr/local,我们需要在编译前导出几组关键的环境变量,引导编译器去正确的地方找我们刚刚装好的
glog 等库:
1 | export PREFIX=/usr/local |
开始编译 librime:
第一步是将 librime-lua 插件"合并"进 librime 主体,然后一并编译。
1 | make clean |
同样,正式安装前建议走一遍沙盒测试(Dry Run 或
DESTDIR),避免弄脏系统: 1
2
3
4
5
6# 方式一:Dry Run(只打印即将执行的命令)
make -n prefix=/usr/local install
# 方式二:沙盒目录安装测试
make DESTDIR=/tmp/rime-test prefix=/usr/local install
tree /tmp/rime-test
确认目录结构无误后,执行真正安装: 1
2sudo make PREFIX=/usr/local prefix=/usr/local install
sudo ldconfig
词库准备:安装 Plum (东风破)
注意:切换工作目录到 ibus-rime/plum/ 内。
Rime 引擎本体不自带词库。plum(东风破)是 Rime
官方的"包管理器",负责从网络拉取词库、配置方案,并将文件部署到 Rime
配置目录。它的工作原理是:读取方案的"处方文件"(.recipe.yaml),按配方克隆仓库并拷贝对应文件到本地配置目录。
ibus-rime 的编译过程对 plum 也有依赖(用于初始化数据),因此这一步不能跳过。
1 | cd /root/rime-build/ibus-rime/plum |
编译完成后,目录内会生成 rime-install
二进制文件,后续我们可以用它来安装输入方案。
编译前端:ibus-rime
注意:切换工作目录到上一层的 ibus-rime/ 内。
最后一步是编译连接 IBus 框架和 Rime 引擎的"桥梁"——ibus-rime 本体:
1 | cd /root/rime-build/ibus-rime |
编译顺利完成后(终端最后会打印出一个 :) 笑脸,这是官方
Makefile 里藏的小彩蛋)。
随后执行安装:
1 | sudo make PREFIX=/usr/local install |
系统集成——让 IBus 识别新版 Rime
现在,所有文件(引擎程序、图标、以及最关键的 rime.xml
注册文件)都已装到 /usr/local。
但 Rocky Linux(GNOME 桌面)的 IBus
守护进程启动时,默认只扫描
/usr/share/ibus/component/ 这个绝对路径,不会扫描
/usr/local 下的内容。如果直接重启,IBus
列表里不会出现新安装的 Rime,或者仍然加载旧版。
单用户测试
【这步可能不起作用,可以省略】
为了安全,首先,我们执行单用户测试,切换到普通用户:
1 | # 创建 IBus 的用户级组件目录 |
全局启用
如果测试完成,要在整个系统启用,我们需要做一个“软链接映射”:
1 | # 1. 备份系统自带的旧版 XML 注册文件(给自己留一条退路) |
重启 IBus
服务,让它重新扫描(如果无效,可能需要注销当前用户并重新登录):
1
ibus restart
现在,前往系统设置 → 区域和语言 → 输入源,应该能看到崭新的"中文 (Rime)"选项了。
错误排查指南:如何确保程序加载了新版动态库?
Linux 动态链接器有时候比较“固执”,可能会默认加载系统的旧版
librime.so。我们可以用以下命令排查:
1 | # 查看旧版库是否有人在使用 |
如果发现 ibus-engine-rime
依然在加载旧版的库,有以下几种优雅的解决方式:
方案 A:使用 Wrapper 包装脚本启动(最安全,推荐)
保留系统原样,通过脚本在进程内修改环境变量:
将原执行文件重命名为
ibus-engine-rime.real。1
2sudo mv /usr/local/lib/ibus-rime/ibus-engine-rime \
/usr/local/lib/ibus-rime/ibus-engine-rime.real新建同名的脚本文件,赋予可执行权限(
chmod +x),写入以下内容:1
2
3
4
5
6
7sudo tee /usr/local/lib/ibus-rime/ibus-engine-rime > /dev/null << 'EOF'
#!/bin/bash
# 如果手动编译了 boost,也需要加上 /usr/local/lib
export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:$LD_LIBRARY_PATH
exec "$(dirname "$0")/ibus-engine-rime.real" "$@"
EOF
sudo chmod +x /usr/local/lib/ibus-rime/ibus-engine-rime开个新的 SSH 会话,验证依赖是否全部可以找到:
1
2# 设置好环境变量后,用 ldd 检查有无 "not found" 的依赖
LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib ldd /usr/local/lib/ibus-rime/ibus-engine-rime.real
方案 B:使用 patchelf 事后修补 ELF 文件
直接修改二进制文件头,强行指定 RPATH:
1 | # 安装 patchelf |
方案 C:在编译期直接指定 RPATH
如果你喜欢从根本上解决问题,可以在编译 ibus-rime
源码时就写死路径:
1 | # 在 make 时传入 LDFLAGS |
附录:配置分享与推荐
输入方案推荐
自带的方案当然是不够用的,这里向各位推荐 Oh My Rime (薄荷拼音),其内置丰富的词库,以及 lua 支持,体验下来很不错。
在 plum 目录下:
1 | # 全量安装薄荷拼音配置(同名文件会被替换,custom 文件不受影响) |
如果使用的是 Fcitx5,需要通过环境变量指定配置目录:
1 | rime_dir="$HOME/.local/share/fcitx5/rime" bash rime-install Mintimate/oh-my-rime:plum/full |
个人配置小抄
配合薄荷拼音,可以在个人配置目录
${HOME}/.config/ibus/rime 下创建或修改
rime_mint.custom.yaml,实现一些个性化调整:
1 | patch: |
修改配置后,需要在 IBus 的 Rime 菜单中点击"部署"(Deploy)或执行以下命令使配置生效:
1 | # 触发 Rime 重新部署 |
参考资料
本文主要参考了此博客:Linux上手动编译安装librime、librime-lua以及ibus-rime,具有很大的帮助,在此表示感谢。
上面的作者提供的内容主要面向 Debian 系,而在 RHEL 系的系统编译有诸多细节,故笔者撰写了此文。
其它值得参考的链接:
- librime-lua GitHub
- rime/home Wiki - RimeWithIBus
- Oh My Rime(薄荷拼音)
- rime-ice issue #840 - Linux 安装建议