环境
- Rocky Linux 9.7, EPEL 已启用
- 桌面环境: XFCE
- 无 fcitx5/rime 预编译包(EPEL 不提供),全源码编译
- 系统 GCC 11 不支持
<format>头,必须使用gcc-toolset-13编译和运行
1. 安装编译依赖
bash
# 基础工具和 fcitx5 依赖
echo '12' | sudo -S dnf install -y git cmake gcc-c++ gettext extra-cmake-modules \
libX11-devel libxkbcommon-x11-devel libXinerama-devel libXft-devel \
mesa-libGLU-devel libuv-devel dbus-devel expat-devel cairo-gobject-devel \
libxkbfile-devel enchant2-devel iso-codes pango-devel gdk-pixbuf2-devel \
lz4-devel
# librime 依赖
echo '12' | sudo -S dnf install -y boost-devel glog-devel gflags-devel \
leveldb-devel yaml-cpp-devel gtest-devel rapidjson-devel pybind11-devel
# GCC 13 (系统 GCC 11 不含 <format> 头)
echo '12' | sudo -S dnf install -y gcc-toolset-13-gcc gcc-toolset-13-gcc-c++ \
gcc-toolset-13-libstdc++-devel
2. 编译安装 xcb-imdkit
fcitx5 的 X11 输入模块依赖。
bash
cd ~/build && git clone --depth 1 --branch 1.0.9 https://github.com/fcitx/xcb-imdkit.git
cd xcb-imdkit && mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release
make -j$(nproc) && echo '12' | sudo -S make install
3. 编译安装 fcitx5
bash
cd ~/build && git clone --depth 1 --branch 5.1.19 https://github.com/fcitx/fcitx5.git
cd fcitx5 && mkdir build && cd build
scl enable gcc-toolset-13 "cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release \
-DENABLE_WAYLAND=OFF \
-DISOCODES_ISO639_JSON=/usr/share/iso-codes/json/iso_639-2.json \
-DXKEYBOARDCONFIG_XKBBASE=/usr/share/X11/xkb \
-DXKEYBOARDCONFIG_DATADIR=/usr/share/X11/xkb"
scl enable gcc-toolset-13 "make -j$(nproc)"
echo '12' | sudo -S scl enable gcc-toolset-13 "make install"
说明:
ENABLE_WAYLAND=OFF: 系统 Wayland 1.21 < fcitx5 要求的 1.22- iso-codes 和 xkeyboard-config 在 Rocky 9 缺少 pkg-config 文件,需手动指定路径
4. 编译安装 marisa-trie
librime 的词典引擎依赖。
bash
cd ~/build && git clone --depth 1 https://github.com/s-yata/marisa-trie.git
cd marisa-trie && mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON
make -j$(nproc) && echo '12' | sudo -S make install
BUILD_SHARED_LIBS=ON 必须开启,否则 librime 链接静态库时缺少 -fPIC。
5. 编译安装 OpenCC
librime 的繁简转换依赖。
bash
cd ~/build && git clone --depth 1 --branch ver.1.1.7 https://github.com/BYVoid/OpenCC.git
cd OpenCC && mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_DOCUMENTATION=OFF
make -j$(nproc) && echo '12' | sudo -S make install
6. 编译安装 librime
bash
cd ~/build && git clone --depth 1 --branch rime-1.3.1 https://github.com/rime/librime.git
cd librime
# 补丁1: Boost 1.75 无 signals 组件
sed -i 's/filesystem regex signals system locale/filesystem regex system locale/' CMakeLists.txt
# 补丁2: C++11 -> C++17 (marisa-trie 需要 string_view)
sed -i 's/add_definitions("-std=c++11")/add_definitions("-std=c++17")/' CMakeLists.txt
# 补丁3: OpenCC 1.1.7 Values() 返回 vector<string> 而非 const char*
sed -i 's/for (const char\* value : entry->Values())/for (const auto\& value : entry->Values())/' src/rime/gear/simplifier.cc
mkdir build && cd build
scl enable gcc-toolset-13 "cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release -DBUILD_TEST=OFF -DENABLE_LOGGING=OFF -DBUILD_STATIC=OFF"
scl enable gcc-toolset-13 "make -j$(nproc)"
echo '12' | sudo -S scl enable gcc-toolset-13 "make install"
librime 安装到 /usr/lib/,而 Rocky 9 的 pkg-config 搜索 /usr/lib64/,需手动链接:
bash
echo '12' | sudo -S ln -sf /usr/lib/pkgconfig/rime.pc /usr/lib64/pkgconfig/rime.pc
echo '12' | sudo -S ln -sf /usr/lib/librime.so /usr/lib64/librime.so
echo '12' | sudo -S ldconfig
7. 编译安装 fcitx5-rime
bash
cd ~/build && git clone --depth 1 --branch 5.1.13 https://github.com/fcitx/fcitx5-rime.git
cd fcitx5-rime
# 补丁1: 降低 rime 版本要求 1.7.0 -> 1.0
sed -i 's|"rime>=1.7.0"|"rime>=1.0"|' CMakeLists.txt
# 补丁2: 强制定义低版本 API 宏(rime 1.3.1 无这些 API)
sed -i '/pkg_check_modules.*rime>=1.0"/a\
add_definitions(-DFCITX_RIME_NO_HIGHLIGHT_CANDIDATE)\
add_definitions(-DFCITX_RIME_NO_DELETE_CANDIDATE)\
add_definitions(-DFCITX_RIME_NO_LOG_LEVEL)' CMakeLists.txt
# 删除旧的版本判断代码
sed -i '/^if ("\${Rime_VERSION}" VERSION_LESS/,/^endif()$/d' CMakeLists.txt
# 补丁3: 删除 min_log_level 代码(rime 1.3.1 RimeTraits 无此字段)
sed -i '/switch (rime_log().logLevel()) {/,/^ }/d' src/rimeengine.cpp
sed -i '/fcitx_rime_traits.log_dir/d' src/rimeengine.cpp
# 补丁4: candidate_list_from_index 替换(rime 1.3.1 无此 API)
# 需手动编辑 src/rimecandidate.cpp:
# - 将 candidate_list_from_index(session, &iter, idx) 改为
# candidate_list_begin(session, &iter)
# - 在 candidate_list_begin 后添加 for 循环定位到 idx:
# for (size_t i = 0; i < idx; i++) { api->candidate_list_next(&iter); }
mkdir build && cd build
scl enable gcc-toolset-13 "cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release"
scl enable gcc-toolset-13 "make -j$(nproc)"
echo '12' | sudo -S scl enable gcc-toolset-13 "make install"
8. 配置环境变量
bash
echo '12' | sudo -S tee /etc/profile.d/fcitx5.sh << 'EOF'
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export SDL_IM_MODULE=fcitx
EOF
9. 配置自启动
创建包装脚本(fcitx5 需要用 GCC 13 运行):
bash
echo '12' | sudo -S bash -c 'cat > /usr/local/bin/fcitx5-wrapper.sh << "SCRIPT"
#!/bin/bash
exec scl enable gcc-toolset-13 "fcitx5 -d"
SCRIPT
chmod +x /usr/local/bin/fcitx5-wrapper.sh'
cp /etc/xdg/autostart/fcitx5.desktop ~/.config/autostart/fcitx5.desktop
sed -i 's|Exec=/usr/bin/fcitx5|Exec=/usr/local/bin/fcitx5-wrapper.sh|' ~/.config/autostart/fcitx5.desktop
10. 配置 Rime 和输入法
bash
# 复制 librime 自带的最小数据
cp -r ~/build/librime/data/minimal/* /usr/share/rime-data/
mkdir -p ~/.local/share/fcitx5/rime
cp /usr/share/rime-data/* ~/.local/share/fcitx5/rime/
# 默认启用 luna_pinyin
cat > ~/.local/share/fcitx5/rime/default.yaml << 'EOF'
schema_list:
- schema: luna_pinyin
EOF
# 注册 rime 输入法
cat > ~/.config/fcitx5/profile << 'EOF'
[Groups/0]
Name=Default
Default Layout=us
DefaultIM=keyboard-us
[Groups/0/Items/0]
Name=keyboard-us
Layout=
[Groups/0/Items/1]
Name=rime
Layout=
[GroupOrder]
0=Default
EOF
11. 设置快捷键
编辑 ~/.config/fcitx5/config,关键内容:
ini
EnumerateWithTriggerKeys=False
[Hotkey/TriggerKeys]
0=Control+space
1=Alt+Shift_L
[Hotkey/AltTriggerKeys]
0=
EnumerateWithTriggerKeys=False防止修饰键误触AltTriggerKeys清空避免冲突
12. 启动验证
bash
killall fcitx5 2>/dev/null
scl enable gcc-toolset-13 "fcitx5 -d"
pgrep -a fcitx5 # 应该看到 fcitx5 -d
13. GUI 配置工具 fcitx5-config-qt
13.1 安装 Qt5 和 KF5 依赖
bash
echo '12' | sudo -S dnf install -y qt5-qtbase-devel qt5-qttools-devel \
qt5-qtx11extras-devel qt5-qtsvg-devel kf5-kitemviews-devel \
kf5-kwidgetsaddons-devel
13.2 编译 fcitx5-qt
fcitx5-config-qt 依赖 fcitx5-qt 提供的 Qt5 DBus/Widgets 库。
bash
cd ~/build && git clone --depth 1 --branch 5.1.9 https://github.com/fcitx/fcitx5-qt.git
cd fcitx5-qt && rm -rf build && mkdir build && cd build
scl enable gcc-toolset-13 "cmake .. -DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_BUILD_TYPE=Release -DENABLE_QT4=OFF -DENABLE_QT6=OFF -DENABLE_QT5=ON"
scl enable gcc-toolset-13 "make Fcitx5Qt5DBusAddons Fcitx5Qt5WidgetsAddons -j\$(nproc)"
Qt5 immodule moc 在 Rocky 9 上解析失败,需手动安装所需组件:
bash
L=/home/gan/build/fcitx5-qt/build # 改为此路径
# 库文件
echo '12' | sudo -S cp -P $L/qt5/dbusaddons/libFcitx5Qt5DBusAddons.so* /usr/lib64/
echo '12' | sudo -S cp -P $L/qt5/widgetsaddons/libFcitx5Qt5WidgetsAddons.so* /usr/lib64/
# 头文件
echo '12' | sudo -S mkdir -p /usr/include/Fcitx5Qt5
echo '12' | sudo -S cp -r $L/../qt5/dbusaddons /usr/include/Fcitx5Qt5/Fcitx5Qt5DBusAddons
echo '12' | sudo -S cp -r $L/../qt5/widgetsaddons /usr/include/Fcitx5Qt5/Fcitx5Qt5WidgetsAddons
echo '12' | sudo -S cp $L/qt5/dbusaddons/fcitx5qt5dbusaddons_export.h /usr/include/Fcitx5Qt5/Fcitx5Qt5DBusAddons/
echo '12' | sudo -S cp $L/qt5/widgetsaddons/fcitx5qt5widgetsaddons_export.h /usr/include/Fcitx5Qt5/Fcitx5Qt5WidgetsAddons/
# cmake 中 WidgetsAddons 引用路径少写一个 5,创建 symlink 修复
echo '12' | sudo -S ln -sf /usr/include/Fcitx5Qt5/Fcitx5Qt5WidgetsAddons \
/usr/include/Fcitx5Qt5/Fcitx5QtWidgetsAddons
# cmake 配置文件和 targets
for d in dbusaddons widgetsaddons; do
H=$(ls $L/qt5/$d/CMakeFiles/Export/)
echo '12' | sudo -S mkdir -p /usr/lib64/cmake/Fcitx5Qt5${d^}
echo '12' | sudo -S cp $L/qt5/$d/Fcitx5Qt5${d^}Config*.cmake /usr/lib64/cmake/Fcitx5Qt5${d^}/
echo '12' | sudo -S cp $L/qt5/$d/CMakeFiles/Export/$H/*.cmake /usr/lib64/cmake/Fcitx5Qt5${d^}/
done
echo '12' | sudo -S ldconfig
13.3 编译 fcitx5-configtool
bash
cd ~/build && git clone --depth 1 --branch 5.1.3 https://github.com/fcitx/fcitx5-configtool.git
cd fcitx5-configtool && rm -rf build && mkdir build && cd build
# 补丁: pinyinmigrator.cpp 缺少 stringutils.h
sed -i '7a #include <fcitx-utils/stringutils.h>' ../src/migrator/pinyin/pinyinmigrator.cpp
# Rocky 9 缺少 xkeyboard-config.pc, 手动创建
echo '12' | sudo -S tee /usr/share/pkgconfig/xkeyboard-config.pc > /dev/null << 'XPC'
prefix=/usr
xkb_base=/usr/share/X11/xkb
datadir=/usr/share/X11/xkb
Name: xkeyboard-config
Version: 2.33
XPC
scl enable gcc-toolset-13 'PKG_CONFIG_PATH=/usr/share/pkgconfig cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release \
-DUSE_QT6=OFF -DENABLE_KCM=OFF \
-DISOCODES_ISO639_2_JSON=/usr/share/iso-codes/json/iso_639-2.json \
-DISOCODES_ISO639_3_JSON=/usr/share/iso-codes/json/iso_639-3.json \
-DISOCODES_ISO639_5_JSON=/usr/share/iso-codes/json/iso_639-5.json'
scl enable gcc-toolset-13 "make -j\$(nproc)"
echo '12' | sudo -S scl enable gcc-toolset-13 "make install"
13.4 使用
bash
scl enable gcc-toolset-13 "fcitx5-config-qt"
可通过 GUI 管理输入法方案、快捷键、候选词样式等。