2015年01月25日

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

前記事では、Yocto LinuxのSato Mobile Desktop GUI環境へMidoriブラウザを組み込む方法について紹介しました。いまや一般用途向けの機器では、Webブラウザは必須のアプリケーションだと言えます。カラオケ端末機みたいな一般ユーザに操作してもらうことが前提の機器はハードの中身がPC互換機になっていて、DebianやUbuntuのようなPC向けのLinuxディストリビューションをカスタマイズして利用しているケースが結構あります。Webブラウザを組み込むことができるのなら、このような機器でYocto Linuxを利用してシステムを構築する道が拓けてくるんじゃないでしょうか。PC向けのLinuxディストリビューションと比較すると、組込みLinuxのメモリやディスク容量などのシステム動作条件はずっと低くなり、x86 PC互換機以外のARM、MIPS、PowerPCなどを搭載したハードを使って一般ユーザが操作する機器やコンシューマ向けの機器を開発することができます。いまさら言うまでもありませんが、実際にこのような機器では組込みLinuxが広く使われています。

ここ数年でSoCプロセッサの製造単価はさらに下がっていて、アマチュアの電子工作愛好家でさえ高性能なプロセッサを安価に入手できるようになっています。IntelもPCやタブレット用だけでになく組込み向けプロセッサの種類を増やしています。そのため、従来はマイコンを使っていたローエンド機器でも高性能なx86やARMコア・プロセッサへの切り換えがどんどん進んでいます。世の中ではIoT(Internet of Things)いうトレンド・ワードが持て囃されていますが、Rasberry PiやBeagleBone BlackようなLinuxやAndroidが動くボードが3〜8千円で買える時代なのに(これらの製造単価は販売価格の2/3〜4/5程度ではないかと想像できます)、マイコンやITRONを使ってIoTデバイスを開発するのはナンセンスだと思います。単機能なセンサやビーコン・デバイスならマイコンを使うのも有りだと思いますが、複合機能が要求されるIoTデバイスではLinuxを使わないと開発工数が大きくなってしまいます。IoTデバイスのデファクト・スタンダードOSはLinuxであると言い切っても良いんじゃないでしょうか。ITRONの基本構成要素はカーネルだけであり、TCP/IPプロトコル・スタックはユーザーが移植する必要があります。ファイルシステムやその他のミドルウェアもすべて同様です。LinuxならOSの移植が完了した時点でこれらがすべて揃っていて、市販のボードならメーカーが移植済みのLinuxやAndroidのBSPを必ず配布しています(LinuxやAndroidを移植しないと、ボードが売れないからですが)。アプリを開発するにしても、ITRONのシステムコールは美的センスの欠片もなく変梃りんで、C++やJavaなどのオブジェクト指向言語からITの世界に入ったプログラマとっては「なんじゃこりゃぁあ!」と叫びたくなるような世界です。Linuxならグローバル・スタンダードであるUnixの流儀でアプリを開発することができ、豊富なライブラリや上質のサンプルコードがインターネット経由でたくさん手に入ります。いま流行りのJavaScriptを使えば、アプリ開発の工数はさらに小さくなります。LinuxとITRONを比較すると、天と地ほどの差があることは一目瞭然です。私は5年前までITRON関連の開発に係わっていましたが、ここ3年ほど新規の製品開発プロジェクトでITRONが採用された例を聞いたことがありません。ローエンド組込みの世界から離脱して情報収集をしなくなったからかもしれませんが、ITRONが衰退に向かっていることには確信を持っています。

またしても話が大きく逸れてしまいました。IoTについては色々と思う所があるので別の記事でまた書きたいと思っています。話題をYocto Linuxの技術的な情報に戻します。

さて、いままでの記事にSato Mobile Desktop GUIのスクリーンショットを掲載してきましたが、それらには日本語が表示されているものが一つも存在していないことに気づいた方がいるんじゃないでしょうか。じつは、デフォルト状態のSato GUI環境は日本語表示に対応していません。日本語のフォントとロケール情報の両方がcore-image-satoイメージに組み込まれていないからです。このため、Desktopウィンドウを含むすべてのアプリにおいて日本語を表示することができません。例えば、Midoriによって日本語を含むページを開くと、下のように日本語の文字がすべて文字化けした状態で表示されてしまいます(こういう□だらけの表示を「トウフ状態表示」と呼ぶらしいです)。
UBShot_20150125_185320-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
Yocto Linuxを使い始めた当初から日本語に対応していないことには気づいていて、その対応方法をずっと探していました。やっとSato GUI環境の日本語化に成功したので、その成果を記事として公開します。ただし、本記事に書く内容は、Sato GUI環境を日本語表示に対応させる方法だけです。日本語入力の方はまだ組み込みに成功していません。じつは、本記事の結論に到達するのに試行錯誤を数回繰り返しているのですが、結論だけを読むと、Sato GUI環境の日本語表示への対応は容易に実現できることが判ります。これと比較して、日本語入力の方は結構難易度が高そうな感じです。日本語入力機能の実現方法についても調べいるのですが、まだ具体的な作業は行っていません。そのため、Sato GUI環境へ日本語入力機能を追加する方法について記事を投稿できるのは少し先になりそうです。

■ TrueTypeフォントの追加組込み


まずは、Sato GUI環境へTrueTypeフォントを追加する方法から紹介します。

じつは、Yocto Linuxの配布パッケージには以下の2種類のTrueTypeフォントしか収納されていません。
    liberation-fonts
ttf-bitstream-vera

このうち、デフォルト状態のSato GUI環境に組み込まれているのはliberation-fontsだけです。DesktopウィンドウのAppearanceアイコンを開くと、Sato GUIで利用可能なTrueTypeフォントの種類を確認できます。
UBShot_20150125_184746-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
UBShot_20150125_184811-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
上記の2つはいずれも英語文字のタイプフェースしか含まれていないフォントです。Midoriブラウザで日本語のページが文字化けしてしまう原因は、日本語のTrueTypeフォントがシステム上に存在していないからです。

それでは、Yocto Linuxで利用可能な日本語のTrueTypeフォントはどこに在るのかと言うと、じつは、OpenEmbeddedリポジトリの方に存在しています。OpenEmbeddedリポジトリに以下のTrueTypeフォントが収集されており、同リポジトリからパッケージレシピを取得すると、これらのフォントが利用できるようになります。
    ttf-arphic-uming
ttf-dejavu
ttf-droid
ttf-gentium
ttf-hunky
ttf-inconsolata
ttf-liberation
ttf-mplus
ttf-sazanami
ttf-ubuntu-font-family
ttf-wqy-zenhei

上のうち、ttf-droid, ttf-mplus, ttf-sazanamiの3つのフォントが日本語文字のタイプフェースを含んでいます。これらのフォントのいずれかをシステムへ組み込めば、Sato GUI環境で日本語の文字を表示できるようになります。以降に、その具体的な方法を説明していきます。

最初に、OpenEmbeddedリポジトリのパッケージレシピを利用可能にするために、bblayers.confに下ような変更を加えてください。
# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
LCONF_VERSION = "6"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-yocto \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-yocto-bsp \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-openembedded/meta-oe \
"
BBLAYERS_NON_REMOVABLE ?= " \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta \
/home/yuhri/Yocto/poky-daisy-11.0.2/meta-yocto \
"

これは、OpenEmbeddedリポジトリから取得したパッケージレシピ群が~/Yocto/poky-daisy-11.0.2/meta-openembedded/に格納されていることを前提としています。

そして、さらにlocal.confへ以下のような設定定義を追加すると、ttf-bitstream-veraに加えてOpenEmbeddedリポジトリの全TrueTypeフォントをcore-sato-imageイメージへ組み込むことができます(フォントは必要に応じて選択すれば良いのですが、今回はあえて全部のフォントを組み込んでみました)。
#
# TrueType fonts to be installed to images
#
IMAGE_TTF_FONTS = "\
ttf-bitstream-vera \
ttf-arphic-uming \
ttf-dejavu-sans ttf-dejavu-sans-mono ttf-dejavu-sans-condensed ttf-dejavu-serif ttf-dejavu-serif-condensed ttf-dejavu-common \
ttf-droid-sans ttf-droid-sans-mono ttf-droid-sans-fallback ttf-droid-sans-japanese ttf-droid-serif \
ttf-gentium ttf-gentium-alt \
ttf-hunky-sans ttf-hunky-serif \
ttf-inconsolata \
ttf-liberation-mono ttf-liberation-sans ttf-liberation-serif \
ttf-mplus-1c-black ttf-mplus-1c-bold ttf-mplus-1c-heavy ttf-mplus-1c-light ttf-mplus-1c-medium ttf-mplus-1c-regular ttf-mplus-1c-thin \
ttf-mplus-1m-bold ttf-mplus-1m-light ttf-mplus-1m-medium ttf-mplus-1m-regular ttf-mplus-1m-thin \
ttf-mplus-1mn-bold ttf-mplus-1mn-light ttf-mplus-1mn-medium ttf-mplus-1mn-regular ttf-mplus-1mn-thin \
ttf-mplus-1p-black ttf-mplus-1p-bold ttf-mplus-1p-heavy ttf-mplus-1p-light ttf-mplus-1p-medium ttf-mplus-1p-regular ttf-mplus-1p-thin \
ttf-mplus-2c-black ttf-mplus-2c-bold ttf-mplus-2c-heavy ttf-mplus-2c-light ttf-mplus-2c-medium ttf-mplus-2c-regular ttf-mplus-2c-thin \
ttf-mplus-2m-bold ttf-mplus-2m-light ttf-mplus-2m-medium ttf-mplus-2m-regular ttf-mplus-2m-thin \
ttf-mplus-2p-black ttf-mplus-2p-bold ttf-mplus-2p-heavy ttf-mplus-2p-light ttf-mplus-2p-medium ttf-mplus-2p-regular ttf-mplus-2p-thin \
ttf-sazanami-gothic ttf-sazanami-mincho \
ttf-ubuntu-mono ttf-ubuntu-sans \
ttf-wqy-zenhei"

#
# Additional packages to be installed to the specific images
#
IMAGE_INSTALL_append_pn-core-image-sato = " \
${IMAGE_TTF_FONTS}"

ただし、このまま「bitbake core-image-sato」コマンドを実行すると、ttf-mplusのビルド時にエラーに遭遇します。これはttf-mplusのレシピの記述内容が不完全なために起きているエラーです。このエラーを解決するには、ttf-mplusのレシピに以下のような改造を加える必要があります。
require ttf.inc

SUMMARY = "MPlus font - TTF Edition"
HOMEPAGE = "http://dejavu.sourceforge.net/wiki/"
LICENSE = "${PN}"
LIC_FILES_CHKSUM = "file://LICENSE_E;md5=ac161e96eda00db9a3aec7870b5d9658 \
file://LICENSE_J;md5=a120ca8d7c8e4a475d5277c9aeb95221 \
"
PR = "r4"

SRC_URI = "http://osdn.dl.sourceforge.jp/mplus-fonts/6650/mplus-TESTFLIGHT-${PV}.tar.gz"
S = "${WORKDIR}/mplus-TESTFLIGHT-${PV}"

PACKAGESPLITFUNCS_prepend = "split_ttf_mplus_packages "

python split_ttf_mplus_packages() {
plugindir = d.expand('${datadir}/fonts/ttf-mplus/')
packages = do_split_packages(d, plugindir, '^(.*)\.ttf$', 'ttf-%s', 'TTF Font %s')
d.setVar('FONT_PACKAGES', ' '.join(packages))
}

do_install() {
install -d ${D}${datadir}/fonts/ttf-mplus
install -m 0644 *.ttf ${D}${datadir}/fonts/ttf-mplus/
}

SRC_URI[md5sum] = "d1400184b51b3871e8d2fca6c50e18ae"
SRC_URI[sha256sum] = "a20b9b9b03c2a6fb1e2137d29e8a6ce06406ba1e008906ea3c474dc048dc06a6"

TTF_FONTS = "\
ttf-mplus-1c-black ttf-mplus-1c-bold ttf-mplus-1c-heavy ttf-mplus-1c-light ttf-mplus-1c-medium ttf-mplus-1c-regular ttf-mplus-1c-thin \
ttf-mplus-1m-bold ttf-mplus-1m-light ttf-mplus-1m-medium ttf-mplus-1m-regular ttf-mplus-1m-thin \
ttf-mplus-1mn-bold ttf-mplus-1mn-light ttf-mplus-1mn-medium ttf-mplus-1mn-regular ttf-mplus-1mn-thin \
ttf-mplus-1p-black ttf-mplus-1p-bold ttf-mplus-1p-heavy ttf-mplus-1p-light ttf-mplus-1p-medium ttf-mplus-1p-regular ttf-mplus-1p-thin \
ttf-mplus-2c-black ttf-mplus-2c-bold ttf-mplus-2c-heavy ttf-mplus-2c-light ttf-mplus-2c-medium ttf-mplus-2c-regular ttf-mplus-2c-thin \
ttf-mplus-2m-bold ttf-mplus-2m-light ttf-mplus-2m-medium ttf-mplus-2m-regular ttf-mplus-2m-thin \
ttf-mplus-2p-black ttf-mplus-2p-bold ttf-mplus-2p-heavy ttf-mplus-2p-light ttf-mplus-2p-medium ttf-mplus-2p-regular ttf-mplus-2p-thin"

PACKAGES = "ttf-mplus ${TTF_FONTS}"

ALLOW_EMPTY_ttf-mplus = "1"

ここまでの変更が終わったら、あとは「bitbake core-image-sato」コマンドを実行すれば、上記の全TrueTypeフォントを追加したcore-image-satoイメージを生成できます。

このcore-image-satoイメージを起動すると、下のように、Sato GUIのDesktopウィンドウの表示フォントが変化していることに気づくでしょう(上に掲載したTrueTypeフォントを追加する前のDesktopウィンドウのスクリーンショットと比較してください)。
UBShot_20150125_230128-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
そして、Midoriを起動して日本語を含むページを開くと、日本語の文字が正常に表示されることが確認できるはずです。
UBShot_20150126_000156-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
なお、他のWebブラウザと同様に、Midoriでもデフォルトの表示フォントや文字エンコーディングを変更することができます。これらの設定を変更したい場合は、Midoriのページ・ウィンドウの右上の一番端に存在するToolsアイコンをクリックして[Preferences]というメニューを選択してください。
UBShot_20150126_000214-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
開いたウィンドウの[Fonts]タブを選ぶと、下のようなウィンドウに変わります。
UBShot_20150126_000237-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
Midoriのデフォルトの表示フォントと文字エンコーディングはこのウィンドウ内の項目を変更することで設定できます。同ウィンドウ内の[Proportional Font Family][Fixed-witdh Font Family]プルダウンメニューをクリックすると、選択可能なフォントの種類が増えていることが確認できます。
UBShot_20150126_000356-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
UBShot_20150126_000416-Adding_TTF-Yocto_Sato_Desktop-QEMUx86_64-1026x797
上側のスクリーンショットが[Proportional Font Family]プルダウンメニューに表示される項目で、下側が[Fixed-witdh Font Family]プルダウンメニューの項目です。

なお、インターネット経由で入手可能なフリーのTrueTypeフォントは他にもたくさん存在しており、私はこのようなフォントをMac OS Xで利用しています。Yocto LinuxのTrueTypeフォントのレシピを読むと、レシピ内に記述されているコードに一定のパターンが存在していて、それらに難しい部分は含まれていないように思えます。TrueTypeフォントのレシピを書くのは容易そうなので、そのうち他の日本語TrueTypeフォントをSato GUI環境へ組み込んでみようと思っています。この試みが成功したら、また記事として紹介するつもりです。

長くなってしまうので、Sato Mobile Desktopの日本語表示化に関する記事は2つに分けることにします。じつは、Sato GUI環境の日本語表示化を完全な形で実現するには、日本語のTrueTypeフォントを組み込むだけではダメで、他にもやらなくてはいけないことがあります。それはターゲットイメージに組み込まれるロケール情報のカスタマイズなのですが、その辺の説明は次の記事に書いていきます。


posted by とみやん at 10:06| Comment(0) | TrackBack(0) | Embedded Linux > Yocto Project
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/112602759

この記事へのトラックバック