前段时间给 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) 了!