2015年02月28日

[Yocto] Sato Mobile Desktopの日本語表示化 (2)

前記事から1ヶ月も間が空いてしましいました。体調を崩して寝込んでしまう日が続いたり、本業の仕事がなかなか切りがつかなかったりで記事を書く時間が取れませんでした。今週に入って、花粉症の症状も出ています。季節の変わり目だからか、私は2〜3月に体調を崩すことが多いです。持病のヘルニア腰痛も3〜5月に症状が悪化することが多く、さらに花粉症にも苦しめられるので、私は一年の中でこの時期が一番嫌いです。ここ数年は季節の変わり目に必ず体調を崩すようになってしまいました。まだ老年期ではないですが、これから歳を重ねると、気候の変化にさえ身体が耐えられなくなってくるんだなぁと感じています。

さて、前記事に続いて、Yocto LinuxのSato Mobile Desktopの日本語表示化について書きます。

前記事では、core-image-satoイメージへ日本語TrueTypeフォントを組み込む方法について説明しました。これによって、Midoriブラウザでは日本語文字が表示できるようになりました。Midoriのような表示フォントを変更できるアプリでは、ターゲットイメージに日本語TrueTypeフォントさえ組み込めば、アプリ側でフォント設定を変更することで日本語の表示ができるようになります。

それでは、Sato GUI自体を日本語表示に対応させるにはどうすれば良いのでしょうか。じつは、これを実現する事はすごく簡単なのです。すでに日本語TrueTypeフォントを組み込み済みなら、ターゲット上で以下の手順の操作を行うだけです。
  1. Sato GUIからAppearanceアプリを起動します。すると、下のようなウィンドウが表示されます。
    UBShot_20150228_143005-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797
    このウィンドウの[Appearance]メニューから[Sato]という項目を選択した上で、(現在の設定フォントを示している)[Font]ボタンをクリックします。


  2. すると、下のような[Pick a Font]ウィンドウが開くので、フォントの一覧から日本語文字のタイプフェースを含むフォントを選択した上で、[OK]ボタンを押します。
    UBShot_20150228_143236-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797

  3. すると、下のように、Sato GUIのDesktopウィンドウの表示フォントが選択したものに設定されます。
    UBShot_20150228_143259-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797

上記の手順の操作によって、Sato GUIは設定したフォントで表示されるようになりますが、これはGUI上の表示を変えただけです。システムや個々のアプリは、フォント情報の他にロケール情報というものを持っています。

Yocto Linuxにおいてシステム全体のロケール情報を変えるには、ターゲット上に以下のような内容の~/.profile(/home/root/.profile)というファイルを作成する必要があります。
# vi ~/.profile
export LC_ALL=ja_JP.UTF-8

この~/.profileを作成した後、Yocto Linuxを再起動すると、Sato GUIは下のような表示に変わります。
UBShot_20150228_143621-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797
ご覧のとおり、一部のアプリのタイトルやヘルプが日本語で表示されています。タイトルやヘルプが英語表示のままのアプリは、日本語のロケール情報を持っていないんだと思います。~/.profile内の「export LC_ALL=ja_JP.UTF-8」という記述は、システム全体に適用されるロケール情報(システム・ロケール)を変更するための設定です(環境変数LC_ALLが未設定の場合のデフォルト値は「LC_ALL=C」になります。Cというは、すべての文字が1バイトのASCIIコードだけで表現されるロケールです)。このように設定すると、日本語のロケール情報を持っているアプリでは、アプリ内のメニューやメッセージなどで日本語が使われるようになります。例えば、ファイルマネージャ(File Manager)は下のように表示になります。
UBShot_20150301_125112-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797
UBShot_20150301_125552-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797
上側が表示フォントと環境変数LC_ALLの設定値を変更する前、下側がこれらを変更した後のスクリーンショットです。

ちなみに、上記で作成した~/.profileというファイルは、Yocto Linuxの起動時に実行されるログイン・スクリプトの一つです。Yocto Linuxのデフォルトのログイン・シェルはbash(Bourne-Again Shell)ではなく、ash(Almquist Shell)というものです。ashはbashとほぼ互換の機能を持っていながら、bashより軽量なため、組込みLinuxで採用されることの多いシェルです。

じつは、Sato GUIの日本語表示化のためのターゲット側の設定はこれで終わりなのです。ただし、Yocto Linuxの日本語表示用構成要素としてはこれだけでは不完全です。何が不完全なのかと言うと、このままではCLI環境用のプログラムが依然日本語の表示ができない状態になっています。

上記のシステム・ロケール設定を変更した状態でTerminalウィンドウを開くと、下のような「setlocale LC_ALL=ja_JP.UTF-8」に失敗した旨のエラー・メッセージが表示されます。
UBShot_20150228_191235-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797
そして、Terminalウィンドウの中で日本語の文字を含むテキストファイルを出力すると、上のように、文字化けした状態で表示されてしまいます(このテキストファイルはscpを使ってQEMU x86-64ターゲットへ転送しました)。じつは、このTerminalウィンドウの表示フォントは、すでに上記の手順の操作によって設定した日本語のフォント(Sazanami Gothic Gothic-Reqular 9pt)になっています。それなのに、日本語文字を表示することができません。その原因は、システム上にCLI環境用の日本語のロケール情報が存在していないからです。Yocto Linuxのシステム上のCLI環境用のロケール情報の有無は、以下のコマンドによって確認できます。
# rpm -qa | grep locale
eglibc-binary-localedata-en-gb-2.19-r0.core2_64
eglibc-binary-localedata-en-us-2.19-r0.core2_64
locale-base-en-gb-2.19-r0.core2_64
locale-base-en-us-2.19-r0.core2_64
pcmanfm-locale-en-gb-1.1.2-r0.core2_64
gstreamer-locale-en-gb-0.10.36-r2.core2_64
aspell-locale-en-gb-0.60.6.1-r1.core2_64
libwebkitgtk-1.0-locale-en-gb-1.8.3-r1.core2_64
libglib-2.0-locale-en-gb-2.38.2-r0.core2_64
midori-locale-en-gb-0.5.5-r0.core2_64
gst-plugins-base-locale-en-gb-0.10.36-r8.core2_64
gtk+-locale-en-gb-2.24.22-r0.core2_64
gdk-pixbuf-locale-en-gb-2.30.3-r0.core2_64
eglibc-locale-en-gb-2.19-r0.core2_64
libatk-1.0-locale-en-gb-2.10.0-r0.core2_64
libfm-locale-en-gb-1.1.2.2-r0.core2_64
libexif-locale-en-gb-0.6.21-r0.core2_64
gst-plugins-good-locale-en-gb-0.10.31-r8.core2_64
avahi-locale-en-gb-0.6.31-r11.1.core2_64
xkeyboard-config-locale-en-gb-2.11-r0.core2_64
libsoup-2.4-locale-en-gb-2.45.3-r0.core2_64
glib-networking-locale-en-gb-2.38.0-r0.core2_64
vte-locale-en-gb-0.28.2-r6.core2_64
gconf-locale-en-gb-3.2.6-r0.core2_64

上のとおり、デフォルト状態のYocto Linuxにはen_GB.UTF-8とen_US.UTF-8のロケール情報(ロケール・パッケージ)しか含まれていません。

Sato GUIのTerminalウィンドウ内でも日本語を表示できるようにするには、ja_JP.UTF-8のロケール情報をターゲットイメージへ組み込まなくてはなりません。それを行うには、local.confに以下のような設定記述を追加します。
#
# IMAGE_LINGUAS controls what locales should be included in images.
#
IMAGE_LINGUAS ?= "en-us ja-jp"

この設定を追加した後にcore-image-satoの再ビルドを行い、新しい生成されたイメージを起動すると、下のように、en_GB.UTF-8に代わってja_JP.UTF-8のロケール・パッケージがシステムへ追加されていることが確認できます。
# rpm -qa | grep locale
eglibc-binary-localedata-en-us-2.19-r0.core2_64
eglibc-binary-localedata-ja-jp-2.19-r0.core2_64
locale-base-en-us-2.19-r0.core2_64
locale-base-ja-jp-2.19-r0.core2_64
libatk-1.0-locale-ja-2.10.0-r0.core2_64
shadow-locale-ja-4.1.4.3-r14.core2_64
binutils-locale-ja-2.24-r0.core2_64
glib-networking-locale-ja-2.38.0-r0.core2_64
gdk-pixbuf-locale-ja-2.30.3-r0.core2_64
midori-locale-ja-0.5.5-r0.core2_64
alsa-utils-locale-ja-1.0.27.2-r0.core2_64
aspell-locale-ja-0.60.6.1-r1.core2_64
libsoup-2.4-locale-ja-2.45.3-r0.core2_64
libglib-2.0-locale-ja-2.38.2-r0.core2_64
rpm-locale-ja-5.4.9-r63.core2_64
leafpad-locale-ja-0.8.18.1-r2.core2_64
sudo-locale-ja-1.8.9p5-r0.core2_64
libexif-locale-ja-0.6.21-r0.core2_64
pcmanfm-locale-ja-1.1.2-r0.core2_64
avahi-locale-ja-0.6.31-r11.1.core2_64
libgpg-error-locale-ja-1.12-r0.core2_64
gst-plugins-good-locale-ja-0.10.31-r8.core2_64
gst-plugins-base-locale-ja-0.10.36-r8.core2_64
gstreamer-locale-ja-0.10.36-r2.core2_64
util-linux-locale-ja-2.24.1-r0.core2_64
gconf-locale-ja-3.2.6-r0.core2_64
gtk+-locale-ja-2.24.22-r0.core2_64
xkeyboard-config-locale-ja-2.11-r0.core2_64
libfm-locale-ja-1.1.2.2-r0.core2_64
libpopt-locale-ja-1.16-r3.core2_64
elfutils-locale-ja-0.148-r11.core2_64
vte-locale-ja-0.28.2-r6.core2_64
eglibc-locale-ja-2.19-r0.core2_64

すべてのプログラムが必ずロケール情報を持っている訳ではありません。またロケール情報を持っているプログラムでも、日本語(ja_JP.UTF-8)に対応していないものがほとんどです。

この状態でSato GUIからTerminalウィンドウを開くと、今度はsetlocaleのエラー・メッセージは表示されません。そして、日本語文字を含むテキストファイルを出力すると、ちゃんと正常に表示されます。
UBShot_20150228_192557-Japanese_Localizing-Yocto_Sato_Desktop-QEMUx86_64-1026x797
以上で、Yocto LinuxのSato Mobile Desktopの日本語表示化は終わりです。

上手く行くんだろうかろうかと思いながら、色々と下調べをしたのですが、実際に挑戦してみると、意外に簡単にYocto Linuxの日本語表示化ができてしまったので驚いています。もっと多くの障害に遭遇するんじゃないかと想像していました。LinuxやX11の多言語対応機能が進化していて、それらの成果がYocto Linuxにも盛り込まれているから、こんなに簡単にできたのでしょう。やはりLinuxは素晴らしいですね。

Yocto Linuxの日本語表示化が出来てしまったので、日本語入力機能の実装にも意欲が湧いてきました。何とかこちらも実現したいと思っています。日本語入力機能が実装できたら、私家版の日本語版Yocto Linuxディストリビューションを制作して、これをGitHub上に置いて公開しようと計画しています。いつ頃この計画を実現できるかまだ見通しは立っていませんが、そう遠くない未来には何とか実現したいです。乞うご期待ください。
posted by とみやん at 16:53| Comment(0) | TrackBack(0) | Embedded Linux > Yocto Project