Rocky Linux 9 + XFCE 编译安装 fcitx5 + Rime 教程

环境

  • 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 管理输入法方案、快捷键、候选词样式等。

相关推荐
咖喱o2 小时前
QinQ/VLAN Stacking
linux·运维·服务器·网络
xiaoye-duck2 小时前
《Linux系统编程》Linux指令 (二):从零开始理解Linux基础指令
linux
月白风清江有声2 小时前
安装mingw 版 cmake
linux
呱呱巨基3 小时前
Linux 基础IO
linux·c++·笔记·学习
QFIUNE4 小时前
CD-HIT 详解:序列去冗余、安装使用与聚类结果解析
linux·服务器·机器学习·数据挖掘·conda·聚类
vortex54 小时前
XFCE 桌面环境组件详解:从面板到剪贴板管理
linux·xfce·桌面环境
勇闯逆流河5 小时前
【Linux】linux进程控制(进程池的详解与实现)
linux·运维·服务器
WJ.Polar6 小时前
Scapy基本应用
linux·运维·网络·python
lljss20206 小时前
1. NameServer 域名服务器---NS
linux·服务器·前端