前段时间给 Ubuntu 22.04 做了一次升级,结果升级后 Intelligent Pinyin 输入法总是时不时卡死,严重影响体验。查了下,发现通过 apt 装的 ibus-libpinyin 版本还停留在 1.12,而 GitHub上 已经出到 1.16 了。于是决定卸载掉系统自带版本,手动编译最新版。

apt search ibus-libpinyin
Sorting... Done
Full Text Search... Done
ibus-libpinyin/jammy 1.12.1-2ubuntu2 amd64
  Intelligent Pinyin engine based on libpinyin for IBus

ibus-pinyin/jammy-updates 1.5.0-6.1ubuntu22.04.1 amd64
  Pinyin engine for IBus

卸载系统自带 ibus-libpinyin 和 libpinyin

(其实也不是自带,是我之前直接用 apt 装的)

先把老版本卸载干净:

sudo apt remove --purge 'ibus-libpinyin*' 'libpinyin*'
sudo apt autoremove

之后重启ibus:

ibus restart

这个时候 Ubuntu 会崩一下,然后中文输入法就用不了了。

编译并安装 libpinyin

首先克隆源代码:

git clone https://github.com/libpinyin/libpinyin.git
cd libpinyin

然后安装必要的依赖:

sudo apt install build-essential automake autoconf libtool pkg-config libdb5.3-dev libsqlite3-dev

这些依赖也许不全,不过问题不大,后面报错了把信息贴给 ChatGPT 就好了。

之后就可以编译并安装了:

./autogen.sh --prefix=/usr
make -j4
sudo make install
sudo ldconfig

不过这里有一个小问题,data 下面的 makefile 有这么一个 target:

interpolation2.text:
	wget http://downloads.sourceforge.net/libpinyin/models/model20.text.tar.gz
	tar xvf model20.text.tar.gz -C $(top_srcdir)/data

但是 sourceforge 似乎有某种反爬虫机制,wget 会卡死。解决办法是,手动把这个文件下载下来,放在 data 文件夹下面。然后把原先 target 里的 wget 那一行去掉,只保留 tar:

interpolation2.text:
	tar xvf model20.text.tar.gz -C $(top_srcdir)/data

之后再make就可以了。

安装 ibus-libpinyin

这个安装过程和前面大同小异:

git clone https://github.com/libpinyin/ibus-libpinyin.git
cd ibus-libpinyin

安装依赖,后面遇到啥问题就问 gpt 再补:

sudo apt install libnotify-dev liblua5.1-0-dev libibus-1.0-dev intltool
./autogen.sh --prefix=/usr
make -j4
sudo make install
sudo ldconfig

这里也有一个小问题。主分支的代码比较新,用到了 glib 的一个宏 G_MARKUP_DEFAULT_FLAGS,2.74 才加上。而我系统自带版本是 2.72。不过这个宏其实就是 0,所以只需要在 src/PYXMLUtil.h 里加上:

#ifndef G_MARKUP_DEFAULT_FLAGS
#define G_MARKUP_DEFAULT_FLAGS ((GMarkupParseFlags)0)
#endif

重启ibus(还有电脑)

首先是重启ibus:

pkill ibus-daemon
pkill ibus-engine
ibus-daemon -drx

不过光重启 ibus 好像还是不够的,我又重启了一遍电脑。之后就可以在 settings - keyboard - input sources 里重新添加 Chinese (Intelligent Pinyin) 了!