Fedora 上编译安装 fcitx 后记

声明:以下不是在 Fedora 上安装使用 Fcitx 的正常/推荐方法。 使用软件源中打包好的二进制 RPM 包是最简单易行的方法。

记录一些在 Fedora 上编译安装 fcitx 的注意事项,作为备忘。 我的环境是 Fedora 16 和 fcitx git HEAD(4.2.5-5-g72b58be)。

最初缺少一些开发包如 iso-codes-devel 等,悉数用 yum 装上。 除了 libkvm 这个仓库里没有,搜索显示是只在 FreeBSD 上用的,忽视之。

使用 cmake 生成 Makefile 时,注意有一些可能有用的组件默认没有启用, 需要在命令行上指定:(参看 打包仓库 的 spec 文件、fcitx 仓库顶层的 CMakeLists.txt

cmake .. -DENABLE_GTK3_IM_MODULE=On -DENABLE_QT_IM_MODULE=On -DENABLE_OPENCC=On -DENABLE_LUA=On

这里面很重要的是 GTK3_IM_MODULE,不启用它的话安装后就连 gnome-terminal 也无法切出 fcitx(因为它是 GTK3 程序)。

然后是 make && sudo make install 安装,这会安装到 /usr/local 下。 安装后需要更新一些缓存:(参看 spec 文件)

sudo ldconfig
sudo update-desktop-database /usr/local/share/applications/
update-gtk-immodules x86_64-redhat-linux-gnu
gtk-query-immodules-3.0-64 --update-cache

其中第三第四行更新 GTK2、GTK3 的 IM MODULE 的缓存。 第三行命令接收参数称为 host_triplet,实为 /etc/gtk-2.0/XXX/gtk.immodulesXXX 的部分。

Fedora 使用 im-chooser(GUI) 和 imsettings-*(命令行) 工具来切换输入法。他们需要一个配置文件安装到 /etc/X11/xinit/xinput.d/ 描述输入法的启动参数、对应的环境变量等。 修改自打包仓库的 spec 文件的 fcitx.conf 如下:

XIM=fcitx
XIM_PROGRAM="/usr/local/bin/fcitx"
ICON="fcitx"
XIM_ARGS="-D"
PREFERENCE_PROGRAM="/usr/local/bin/fcitx-configtool"
SHORT_DESC="FCITX"
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx

注意其中指定二进制命令时需要完整路径,不能只写命令名称,否则 imsettings-switch 时报错。然而 ICON 一行指定图标时可以只写文件名。

spec 文件在安装后还做了如下一件事: update-alternatives –install /etc/X11/xinit/xinputrc xinputrc /etc/X11/xinit/xinput.d/fcitx.conf 55

告诉 alternatives fcitx.conf 的优先级为 55。很遗憾它没有 IBus 的高,所以 IBus 还存在时系统默认输入法仍指向 IBus: (参见 alternatives 的 --display--config选项以及手册页)

/etc/X11/xinit/xinputrc -> /etc/alternatives/xinputrc -> /etc/X11/xinit/xinput.d/ibus.conf

不过我们可以用 im-chooser 等切换自己使用的输入法,选择了 FCITX 后, 会有如下软链接:

~/.xinputrc -> /etc/X11/xinit/xinput.d/ibus.conf

编译 GTK 界面下的配置工具 fcitx-configtool 时,cmake 前需要先设置

export PKG_CONFIG_PATH=/usr/loca/lib/pkgconfig/

以帮助 pkg-config 找到 fcitx-gclient 等的头文件。上面的目录不在 pkg-config 的默认搜索路径中。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s