読者です 読者をやめる 読者になる 読者になる

以下省略!

タイダルウ(ry 毎日1記事執筆運動実施中。

Ubuntu 14.04でQt5.8をインストールしてEncryptPadをビルド、日本語入力のためにfcitx-qt5もビルドした話

雑記PC Linux メモ

f:id:abyssluke:20170318075226p:plain:w200:left先日書いた記事の続きみたいなもの。EncryptPadにはQt5が使われているが、Ubuntu 14.04のQt5.2にはバグがある?らしく、稀に日本語の一部が豆腐になったり中華フォントになる現象が起きてしまう。なら最新版のQt5.8でビルドすればいいじゃん、ということでビルドしてみた。続きを読むから。

目次

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のせいなのか…
入力間隔が調整できれば…

実験中:よい子は次のアドレスにメールを絶対に送らないでください。場合によっては晒しあげされますよ。 ivyrush+htnb.20170313@rita-ch.com viande@rita-ch.com