手動編譯/降級 libchewing

這次手動降級 libchewing 蠻不順利的,一波好幾折,相當混亂,趕緊記下來以免以後又遇到類似問題又得再摸索一次…直接跳到安裝部份請按我。

被據說變得非常順暢且 Bug 274931 好像已經修好了的 KDE4.11 吸引、以及 Evergreen 長期支援版的光環、且聽到都是挺不錯的口碑,於是前天動手把 openSUSE12.3 升級到 13.1,沒想到卻是個頗災難的過程,而且都是些沒有預料過的問題,例如新酷音 (chewing) 就爆掉了…。

在寫這篇之時,openSUSE 13.1 裡面的 libchewing 版本是 0.3.5,但這版本的選字似乎有問題,選字的正確率大幅下降,而且還會選出一堆沒看過的怪字:

我發現錯字剅要(都要)訓練>=3 次纔能(握靠纔能這種古用法 XD)成功逼褟選出正確的自,看起來是根本不鳥我之前的就詞庫(~/.chewing/udash.dat)…可是我沒有棟褟才對。…真是吐寫又再亂選字了,棟褟是啥鬼東西我應該從沒選過這種慈才對。

之前用 0.3.4 是正常的,所以看來只能手動降級了。但一開始直接抓 chewing 的原始碼下來編譯卻讓 fcitx 一直沒辦法正確啟動…完全不知該怎麼辦好。

1
2
3
4
5
6
7
git clone https://github.com/chewing/libchewing.git
cd libchewing
git checkout v0.3.4
cmake -DCMAKE_INSTALL_PREFIX=/usr .
cmake .
make
sudo make install

[純筆記] 上面第四行也可以用 ccmake . ,會跳出比較友善的 editor 讓人編輯,再把 CMAKE_INSTALL_PREFIX 的值手動改成/usr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(INFO-2381 /home/abuild/rpmbuild/BUILD/fcitx-chewing-0.2.1/src/eim.c:104) Chewing storage path /home/kuanyui/.config/fcitx/chewing/
=========================
FCITX 4.2.8.3 -- Get Signal No.: 11
Date: try "date -d @1386870933" if you are using GNU date ***
ProcessID: 2381
fcitx[0x401630]
/lib64/libc.so.6(+0x358d0)[0x7fa46d97c8d0]
/usr/local/lib/libchewing.so.3(chewing_set_maxChiSymbolLen+0x5)[0x7fa46037b6d5]
/usr/lib64/fcitx/fcitx-chewing.so(+0x330e)[0x7fa4605bc30e]
/usr/lib64/libfcitx-core.so.0(+0x11ab7)[0x7fa46e556ab7]
/usr/lib64/libfcitx-core.so.0(+0x14b58)[0x7fa46e559b58]
/usr/lib64/libfcitx-core.so.0(+0x1351d)[0x7fa46e55851d]
/usr/lib64/libfcitx-core.so.0(FcitxUIOnInputFocus+0x43)[0x7fa46e55cde3]
/usr/lib64/fcitx/fcitx-ipc.so(+0x4289)[0x7fa465bfc289]
/lib64/libdbus-1.so.3(+0x1dd66)[0x7fa46d517d66]
/lib64/libdbus-1.so.3(dbus_connection_dispatch+0x381)[0x7fa46d50a931]
/usr/lib64/fcitx/fcitx-dbus.so(+0x2338)[0x7fa46d744338]
/usr/lib64/libfcitx-core.so.0(+0xa51e)[0x7fa46e54f51e]
/usr/lib64/libfcitx-core.so.0(FcitxInstanceRun+0x1e0)[0x7fa46e54fea0]
fcitx[0x401058]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7fa46d968be5]
fcitx[0x4010cd]

幸好有大神,lzh9102 的說法是:

昨天程式 crash 的錯誤訊息代表它存取到錯誤的記憶體位置,這樣的狀況經常是因為 library 和 caller 的版本不合。我昨天都假設是這個原因,但是今天我發現不是這個問題,追蹤程式碼後我發現是因為 /usr/lib64/libchewing 裡面缺了檔案,所以 libchewing 根本沒初始化成功。fcitx 後來用了沒有初始化成功的 chewing,所以就 crash 了。

/usr/lib64/libchewing 應該要有 ch_index_begin.dat ch_index_phone.dat dict.dat
fonetree.dat ph_index.dat pinyin.tab swkb.dat symbols.dat us_freq.dat 這幾個檔案,但是從原始碼安裝的不知道為什麼只有其中 3 個檔案。

發現這裡 抓的 libchewing-0.3.4.tar.bz2 可以正常編譯安裝啟動,有夠詭異…

搞了很久,後來發現原因是 cmake 會把檔案移動到 /lib 而不是 /lib64 ,而 openSUSE 的 64 bit lib 會放在 /lib64 …改用 autotools 安裝就沒有這個問題, fcitx-chewing 也能正確啟動。

別講那些了,快講安裝方法

總之最後成功安裝的方法是…先安裝好必要的檔案:

1
2
sudo zypper in fcitx fcitx-devel
sudo zypper in autoconf automake libtool cmake libclang gcc ncurses-devel git

如果套件管理員把 libchewing 也一起安裝進來,記得把它移除,而且除了 fcitx-chewing 以外的酷音 chewing 相關套件都不要裝

然後 clone libchewing 的 repo,checkout 到 v0.3.4:

1
2
3
git clone https://github.com/chewing/libchewing.git
cd libchewing
git checkout v0.3.4

然後編譯安裝:

1
2
3
4
./autogen.sh
./configure --prefix=/usr
make
make install

編譯&安裝好後,fcitx -rd 重新啟動 fcitx,大功告成。

fcitx-chewing 呢?

幸運的是 13.1 官方套件庫內的 fcitx-chewing 本身使用是沒有問題的,直接裝下去就可以用,惟酷音的 icon 很是難看,是醜到炸翻的紅色標楷體,所以之前做了一套比較好看的自己用(請自取): 再搭配To-aru IndexTo-aru Railgun主題看起來很合適。

問題在於,這個版本的 fcitx 不知什麼原因改不了 icon …以往只需要把 /usr/share/fcitx/imicon/chewing.png 取代掉即可,但現在 fcitx 好像不吃這套,不管怎麼改,跑出來的還是那個噁心的預設 icon,完全搞不懂為什麼 orz

fcitx-chewing 會安裝的相關圖檔應該有這些:

1
2
3
4
5
/usr/share/fcitx/imicon/chewing.png
/usr/local/share/icons/hicolor/48x48/apps/fcitx-chewing.png
/usr/share/fcitx/skin/default/chewing.png
/usr/share/fcitx/skin/dark/chewing.png
/usr/share/fcitx/skin/classic/chewing.png

但沒有一個是紅色標楷體…用 strace (監視 system call 用) 找 “png” 或 “chewing” 都沒看到:

1
strace -f -e open fcitx -rd |& grep 'png'

~/.kde4/share/icons/

後來直接問 fcitx 開發者:

1
2
csslayer: KDE 的話在你的圖標主題裏加個 fcitx-chewing 的圖標
csslayer: 因爲系統托盤的實現變成用 dbus 的所以那個圖標是按照系統主題變的

KDE4 的 icon theme 位置是在:

1
2
~/.icons/
~/.kde4/share/icons/

以 KFaenza 這個 icon theme 為例,我最後是丟到這: ~/.kde4/share/icons/KFaenza/fcitx-chewing.png

最後記得要到 KDE system settings 更新一下 icons theme (application appearance > icons > apply)的快取才會生效。

此次折騰要特別感謝好友兼大神 lzh9102 的耐心協助 (worship)


[2013-12-14 土 11:30] 動筆。
[2013-12-17 火 01:01] 發布。
[2013-12-17 火 04:54] 更新 fcitx-chewing icon 安裝方法。