筆者は、今まではdigiKam5はPPAの5.5を使っていたのだが、起動が遅い(画像ライブラリの読み込みが遅いようだ)ので、ずっと最新版を使いたかった。しかし、日本語モードはあるものの、日本語入力できない問題があったので移行できなかった(筆者の環境はLinux Mint 18 Xfce, Fcitx+Mozc)。また、digiKamのサイトではディストリビューションのパッケージを使うように書いてあるのだが、Mint 18はUbuntu 16 LTSベースのため、パッケージのものは4.4と古くて使えない。

日本語入力ができない問題の原因は、それがAppImageになっているために、中身のテキスト入力に関連するライブラリが不足しているためではないかと考えた。少し前に検索したところ、(他のアプリの例では)環境変数QT_PLUGIN_PATHに元のOSのディレクトリ(例: /usr/lib/x86_64-linux-gnu/qt5/plugins/)を設定すればできるはずなのだが、そうしても駄目だった。

それで、先日、Snapの中身のSpotifyを実行できることが分かったので、これもAppImageの中身を単独で実行したり、中身を展開して修正することで、日本語入力できるようにならないかと考えた。検索したら、AppImageのフォーラムにヒントが書いてあり、AppImage中のAppRunというスクリプトを修正すれば良さそうだった。

そして、それまでに、AppImageは--appimage-mountオプションを付けて起動すると、イメージをマウントできる(プログラム本体は実行しない)ことが分かっていたので、マウントしてAppRunの中身を見たところ、それは普通のシェルスクリプトで、最初にLD_LIBRARY_PATHやQT_PLUGIN_PATHを設定(上書き)していることが分かった。それで、QT_PLUGIN_PATHを修正したAppRunを作り、そこから本来のプログラム(この場合はdigiKam5)を起動すれば良さそうなことが分かった。

それで、どのように実装するか考えたのだが、マウントされたAppImage全体をコピーして、必要な箇所を修正するのでは容量が無駄になるし、中身を変更したAppImageを作り直すのはアプリの更新のたびに作り直す必要があって面倒なので、(余り変更がなさそうな)AppRunだけを抽出して修正し、そこから、あらかじめマウントしたAppImage中のアプリ(この場合はdigiKam5)を起動するようにした。

さっそく、指定したAppImageファイルとAppRunでAppImage中のプログラムを起動するスクリプトを作り、それでdigiKam5のAppImageを起動したら、無事、日本語入力できるようになった。実際に日本語入力している例を以下に示す(筆者の好みで、英語モードにしている)。

AppImage版のdigiKam5で日本語入力ができるようになった。

一般的な説明を書くと、あるAppImage(Qt5を使っているもの)を日本語入力できるようにする手順の流れは、以下のとおりである。

  1. AppImageをマウントする(AppImageに--appimage-mountを指定して起動する)。
  2. AppImageがマウントされたトップディレクトリのAppRunを別のディレクトリにコピーする。
    • マウントディレクトリは/tmp/の下の一時的なもの(例: /tmp/.mount_XXXXXYYYY)になる。マウントポイントは指定できないので、AppImageの出力をscriptコマンドを使って取得することにした(なぜか、バッククォートやリダイレクトでは取れなかった)。
  3. AppRunの先頭にあるであろう、環境変数QT_PLUGIN_PATHの設定に、元のOSのディレクトリ(例: /usr/lib/x86_64-linux-gnu/qt5/plugins/)を追加する。
    • digiKam5での例: export QT_PLUGIN_PATH=$DIR/usr/plugins/:/usr/lib/x86_64-linux-gnu/qt5/plugins/
  4. 同様に、AppRunの先頭にあるであろう、環境変数DIR(およびAPPDIR)を適宜修正する。これは、AppImageのマウントされたトップディレクトリを想定しているようなので、筆者はカレントディレクトリにした。
    • digiKam5での例: DIR=`pwd`
  5. AppImageのマウントポイントにchdirし、修正したAppRunを実行する。

digiKam5のAppImageが更新された場合には、基本的には上記手順で2と3を省略し、同じ修正版のAppRunを起動するだけで良いはずだが、AppImage中のAppRunが変わった場合にはうまく動かなくなるので、再度修正が必要である。 → (11/27 6:58追記) 修正したAppRunを実行する前(上記手順5のchdir後)に、AppImage中の(最新の)AppRunとの差分を求めて、修正の必要があるかをチェックするようにした。

 

なお、SpotifyのSnap版も同様にQT_PLUGIN_PATHを設定すれば日本語入力ができるようになるかと思ったのだが、Qt5を使っていないようなのでできなかった。 (11/27 8:44追記) その後、GTKを使っていることが分かったので、immodulesにライブラリを追加したり、関連する環境変数(例: GTK_IM_MODULE)をいくつか指定してみたのだが、なぜか駄目だった。設定が間違っているのかSpotifyが対応していないのか不明だが、フォーラムでは数年前に指摘されているものの「修正を待つように」と書かれているだけなので、(Snapには関係なく、)元々のSpotifyアプリが対応していない可能性が高い。

 

(仕事ブログより転載、題をわずかに変更: 元の投稿日時: 2018/11/26 21:26)

  •   0
  •   0

コメントを書く

名前    

メール 

URL