先日書いた記事の続きみたいなもの。EncryptPadにはQt5が使われているが、Ubuntu 14.04のQt5.2にはバグがある?らしく、稀に日本語の一部が豆腐になったり中華フォントになる現象が起きてしまう。なら最新版のQt5.8でビルドすればいいじゃん、ということでビルドしてみた。続きを読むから。
目次
- Qt5.8をダウンロード・インストールする
- EncryptPadをビルドする
- libxkbcommonをビルドする
- fcitx-qt5をビルドする
- 蛇足その1:なんでlibxkbcommonのインストール後にldconfigしてるの
- 蛇足その2:なんか入力がおかしい…?
Qt5.8をダウンロード・インストールする
$ wget http://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run $ chmod +x qt-unified-linux-x64-online.run $ sudo ./qt-unified-linux-x64-online.run
画面の指示にしたがってインストール。最初のID/PW入力画面は商用版をダウンロードするわけではないのでSkipすること。
root権限で実行すると/opt/Qt以下にインストールされる。
/tmpにtmpfsを使っているけどメモリが少なくて心配…な場合は環境変数を弄って/var/tmpを使うとよろし。
$ TMP=/var/tmp TEMP=/var/tmp TMPDIR=/var/tmp sudo ./qt-unified-linux-x64-online.run
EncryptPadをビルドする
Qt5.8をインストールしたディレクトリにパスを通してビルドする。各種ビルドツールはインストール済みであるとする。
$ wget https://github.com/evpo/EncryptPad/releases/download/v0.3.2.5/encryptpad0_3_2_5_src.tar.gz $ tar xzvf encryptpad0_3_2_5_src.tar.gz $ cd encryptpad0_3_2_5_src/ $ PATH=/opt/Qt/5.8/gcc_64/bin:$PATH $ export PATH $ ./configure.sh --all
ビルドが無事完了するとbin/release以下にencryptpadとencryptcliができているはず。
もしもwebupd8のPPAからEncryptPad入れちゃってるよーという場合はリネームした上で置き換えちゃえばいい。入れてない場合でも/usr/local/binなりに入れたらいいかも。
$ sudo mv /usr/bin/encryptpad /usr/bin/encryptpad.orig $ sudo mv /usr/bin/encryptcli /usr/bin/encryptcli.orig $ sudo cp bin/release/encrypt* /usr/bin/
これでQt5.8でビルドしたEncryptPadができあがった…が、このままではfcitx+mozcでの日本語入力ができないので必要なライブラリをビルドする。
libxkbcommonをビルドする
fcitx-qt5のビルドにはlibxkbcommon 0.5.0以降が必要なのでビルドしてインストールしておく。
$ wget http://xkbcommon.org/download/libxkbcommon-0.7.1.tar.xz $ tar xJvf libxkbcommon-0.7.1.tar.xz $ cd libxkbcommon-0.7.1/ $ ./configure --disable-x11 $ make $ sudo make install $ sudo ldconfig
fcitx-qt5をビルドする
fcitx-qt5をビルドし、ビルドされたファイルからQt5.8アプリでの日本語入力に必要なライブラリをQtのプラグインディレクトリにコピーする。
ビルドにはcmakeの他にextra-cmake-modules(ECM)が必要だが、Ubuntu 14.04の標準レポジトリでは提供されていないのでPPAから取ってくる。ついでにfcitxの開発用パッケージもインストールしておく。
$ sudo add-apt-repository ppa:ubuntu-sdk-team/staging $ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install extra-cmake-modules fcitx-libs-dev
その後、CMAKE_PREFIX_PATHに/opt/Qt/5.8/gcc_64を指定してcmakeでMakefileを作りmake、出来上がったファイルの中からlibfcitxplatforminputcontextplugin.soをQtのプラグインディレクトリにコピーする。念の為QtCreatorのQtプラグインディレクトリにもコピーしている(QtCreatorで日本語入力できるようになる)。
$ git clone https://github.com/fcitx/fcitx-qt5 $ cd fcitx-qt5/ $ git checkout 1.1.0 $ mkdir build $ cd build $ cmake .. -DCMAKE_PREFIX_PATH=/opt/Qt/5.8/gcc_64 $ make $ cd platforminputcontext $ sudo cp libfcitxplatforminputcontextplugin.so /opt/Qt/5.8/gcc_64/plugins/platforminputcontexts/ $ sudo cp libfcitxplatforminputcontextplugin.so /opt/Qt/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts/
蛇足その1:なんでlibxkbcommonのインストール後にldconfigしてるの
ライブラリのキャッシュが更新されていないため、古いライブラリを読みに行って0.5.0以降実装の関数が無いためにrelocation errorとなるから。
$ /encryptpad ./encryptpad: relocation error: /opt/Qt/5.8/gcc_64/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so: symbol xkb_compose_table_new_from_locale, version V_0.5.0 not defined in file libxkbcommon.so.0 with link time reference
ldconfigしてもだめなら/etc/ld.so.confや/etc/ld.so.conf.d内に/usr/local/libが入っていない可能性があるので別途定義する。
蛇足その2:なんか入力がおかしい…?
磁気カードリーダーから入力された文字の入力順がおかしくなることがある。
他のアプリでは問題ないので、Qt5.8アプリ特有の問題なのか、ビルドしたlibxkbcommonのせいなのか…
入力間隔が調整できれば…