This service is available only in Japanese-language.

日本語の入力を実現する方法を解説してください

社内のエンジニアからの問い合わせです。

gtkのアプリケーションを用いて、beagle bone black上で日本語入力を行う方法を解説してください。

以前紹介した
http://mickey-happygolucky.hatenablog.com/entry/2017/09/17/053500
のサイトを参考に、電源投入で立ち上がった際に、すぐに日本語入力が可能な変更をYocto2.2上で構築可能なことを
確認しております。
なお、Yocto2.3以降のバージョンにおいて、入力切替(直接入力ーひらがなーカタカター全角英数、ローマ字入力ーかな入力ー...)
のツールバーが表示できなくなってしまう現象が発生しており、2.3以降は解決後に記載します。

日本語入力を実現するのに必要なパッケージを生成するためのレシピは、YoctoProjectからリリースされているpokyには
含まれていません。
今回の実装では、Yocto2.2(morty)の例となります。
1.poky の取得
    git clone -b morty git://git.yoctoproject.org/poky.git
2. meta-oe の取得
    git clone -b morty git://git.openembedded.org/meta-openembedded
3. uimの新しいレシピの取得
  ブランチ morty で取得したmeta-openembedded/meta-oe/recipes-supports/uim 以下のレシピは、
  uim-anthyが生成できない問題点があり、前コメントで紹介した修正済のレシピを使用するため、
  別の場所に対応したmeta-openembeddedのダウンロードを行います。
  今回の動作確認では以下のものを使用しています。
    git clone -b rocko git://git.openembedded.org/meta-openembedded
4.新規にレイヤーを作成
  ダウンロードしたrocko版のmeta-openembedded/meta-oe の recipes-supports/uim 以下を保存するため
  レイヤーを新規に作成します。
  uimのレシピですが、mortyでもrockoでもバージョンそのものは変更が無いため、新規作成レイヤーの
  PRIORITYは、meta-oeの6よりも大きな値を設定します。
  弊社では以下のような構成のレイヤーを作成しております。
  meta-lineo-before-rocko/
  |-- COPYING.MIT
  |-- README
  |-- conf
  | `-- layer.conf
  `-- recipes-support
   `-- uim
     |-- uim
     | |-- 0001-Add-support-for-aarch64.patch
     | |-- 0001-fix-bug-for-cross-compile.patch
     | `-- uim-module-manager.patch
     `-- uim_1.8.6.bb 
  作成したレイヤーをbuild対象とするため、bitbake-layers add-layer を使用して conf/bblayers.conf に追加します。

本例は、core-image-satoをベースとした新規イメージレシピを作成する手順となります。
1. レシピの保存ディレクトリを作成する
  生成したレイヤー内に、recipes-core/images ディレクトリを作成する。

2. core-image-satoをベースとして新規イメージレシピを作成する
  core-image-sato.bbappendを作成して、その中でIMAGE_INSTALL_appendで追記しても
  同じ結果となりますが、bbappendとした場合、core-iamge-satoのオリジナルを再度作ろうと
  した場合は、bbappendを無効とする必要があります。
  弊社では以下の内容にて、新規イメージレシピを作成しております。
======================================================
require recipes-sato/images/core-image-sato.bb
IMAGE_LINGUAS = "ja-jp en-us en-gb"
IMAGE_INSTALL_append = " uim-xim uim-utils uim-common uim-gtk2.0 uim-gtk3 uim-anthy setxkbmap"
======================================================

Yocto Projectから配布されているpokyのリファレンスボードbeagle boneでcore-image-satoを実行した場合、
matchbox-keyboardが自動起動となりませんでした。
原因を探っていくと、/etc/formfactor/config の HAVE_KEYBOARD の値が1になっている
場合には、matchbox-keyboardがインストールされていても起動されないことが判明しました。
poky/meta-yocto-bsp/recipes-bsp/formfactor/formfactor/beaglebone/machconfig の中で、HAVE_KEYBOARD=1
が設定されていたため、以下のファイルツリーを新規レイヤに追加しています。
==========================================================
 recipes-bsp/
 `-- formfactor
   |-- formfactor
   | `-- beaglebone
   | `-- machconfig
   `-- formfactor_0.0.bbappend
==========================================================

recipes-bsp/formfactor/formfactor/beaglebone/machconfig
==========================================================
HAVE_TOUCHSCREEN=0
HAVE_KEYBOARD=0
==========================================================

ecipes-bsp/formfactor/formfactor_0.0.bbappend
==========================================================
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
==========================================================

システム起動時にuimを自動起動を行うスマートな方法は他にもあると考えられますが、
今回は、/home/root/.profile の中で起動を行う処理を追加しています。
==========================================================
recipes-core/
 `-- base-files
   |-- base-files
   | `-- dot.profile
   `-- base-files_3.0.14.bbappend
==========================================================

recipes-core/base-files/base-files/dot.profile
==========================================================
export LC_ALL=ja_JP.UTF-8
export GTK_IM_MODULE="uim"
export XMODIFIERS="@im=uim-anthy"
if [ -n "$DISPLAY" ] ; then
if [ -f /usr/bin/uim-xim ]; then
uim-xim &
fi
if [ -f /usr/bin/uim-toolbar-gtk-systray ]; then
uim-toolbar-gtk-systray &
fi
if [ -f /usr/bin/setxkbdmap ]; then
setxkbmap -layout jp
fi
xset -dpms
xset s 0
else
export DISPLAY=:0.0
fi
==========================================================
/home/root/.profile は、SATO DESKTOPの起動時にも読み込まれているため、その読み込みのタイミング
で、uimの起動を行っています。
通常のloginと区別するために、DISPLAY環境変数の設定の有無で判別するという、多少泥臭い方法にて
実装しています。
なお、本ファイルは最終的に/home/root/.profileとなりますが、そのままのファイル名で作成すると
見落とす可能性があるため、dot.profileという名称でレシピに含め、do_install時に正規の名称でコピー
を行う処理をbbappendで実行しています。

recipes-core/base-files/base-files_3.0.14.bbappend
==========================================================
FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"

SRC_URI += " \
file://dot.profile \
"

do_install_append() {
install -m 0644 ${WORKDIR}/dot.profile ${D}/home/root/.profile
}
==========================================================