2019年05月27日

Ubuntu + Calibre + fcitx で日本語入力できるようにする

あるいは「古い Qt アプリケーション上で fcitx が動かない方法を解決する」

環境としては Lubuntu 18.10、 Calibre 3.42、 fcitx 4.2.9.6 だけど他のディストリビューションやバージョンでもそう変わらないと思う。

問題

Calibre で日本語入力ができない。テキスト欄にフォーカスを合わせてもタスクトレイの fcitx は「No input window」とそっけない。

fctix の Qt 向けのフロントエンドが読まれてないとこうなるらしい。デバッグオプションをつけて確かめてみる。

$ QT_DEBUG_PLUGINS=1 calibre
[中略]
QFactoryLoader::QFactoryLoader() looking at "/opt/calibre/lib/qt_plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so"
Found metadata in lib /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so, metadata=
{
	"IID": "org.qt-project.Qt.QPlatformInputContextFactoryInterface.5.1",
	"MetaData": {
    	"Keys": [
        	"fcitx"
    	]
	},
	"className": "QFcitxPlatformInputContextPlugin",
	"debug": false,
	"version": 330497
}


In /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so:
  	Plugin uses incompatible Qt library (5.11.1) [release]
"The plugin '/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so' uses incompatible Qt library. (5.11.1) [release]" 
     	not a plugin

2段落目にエラー内容が出ているように fcitx-frontend-qt5 をビルドした Qt のバージョン(5.11.1) が Calibre の Qt と食い違っているためプラグインが読めていない。

ちなみに ibus プラグインは Calibre にバンドルされているので問題が起きない。

fcitx の Qt 5 frontend をビルド

要は Calibre の Qt バージョンに合わせた fcitx の Qt プラグインを用意すればいい。

対象の Qt バージョンを調査

Calibre はビルド用のあれこれが別リポジトリで公開されてたので調べると Qt 5.6.2 とわかった。→ build-calibre/sources.json

Qt のインストール

Qt 5.6.2 から qt-opensource-linux-x64-5.6.2.run を選択。それ以外のバージョンはアーカイブから探せる。

ウィザードに従ってインストール。アカウント登録は商用のためなので Skip。提案通りにホームディレクトリにインストールする。ファンがうなりをあげ5分位かかった。

ビルド

fcitx のドキュメントが皆無なので依存関係は手探り。とりあえず動いたのはこれ。

sudo apt install -y libxkbcommon-dev cmake extra-cmake-modules fcitx-libs-dev

fcitx-qt5 のソースは現時点でのHEADがそのままリリースバージョンだったので直接使う。
cmake のオプションは前段で Qt をインストールした場所。
make はなんとなくターゲットを指定してみたが気になる人は全部 make でもいいと思う。

git clone --depth=1 https://gitlab.com/fcitx/fcitx-qt5
cd fcitx-qt5
cmake . -DCMAKE_PREFIX_PATH=~/Qt5.6.2/5.6/gcc_64
make fcitxplatforminputcontextplugin

できあがったプラグインを calibre ディレクトリにコピー。

sudo cp platforminputcontext/libfcitxplatforminputcontextplugin.so /opt/calibre/lib/qt_plugins/platforminputcontexts/

calibreを起動すれば問題なく日本語入力できるようになった。

デバッグメッセージは、2段落目がごくシンプルな内容になっている。

QFactoryLoader::QFactoryLoader() looking at "/opt/calibre/lib/qt_plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so"
Found metadata in lib /opt/calibre/lib/qt_plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so, metadata=
{
	"IID": "org.qt-project.Qt.QPlatformInputContextFactoryInterface.5.1",
	"MetaData": {
    	"Keys": [
        	"fcitx"
    	]
	},
	"className": "QFcitxPlatformInputContextPlugin",
	"debug": false,
	"version": 329218
}


Got keys from plugin meta data ("fcitx")

参考

posted by かぷらす at 20:00| Comment(0) | 作業記録 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください