Amazon AppStream 2.0 Linuxイメージを日本語化してみた (公式版)

2022.07.21

しばたです。

先日Amazon WorkSpaces Webが東京リージョンで使える様になりました。

WorkSpaces Webはその実装が「 概ねLinuxイメージを使ったAppStream 2.0 」であり、去年のサービス提供当初は日本語に非対応だったのですが上記記事によれば今は日本語対応済みとのことでした。

そこで「もしかしてAppStream 2.0 Linuxイメージが日本語に対応してる?」と疑問に思い、調べてみたところひっそりと対応済みだったので本記事で改めて日本語化を試していきます。

いつ対応したのか?

公式の手順はこちらにあります。

GitHubの履歴を追う限りでですが今年の4月末に追加された様です。
追加に際しアナウンスの類はありませんでした。

やってみた

それでは早速この手順に従いLinuxイメージを日本語化していきます。
今回は私の検証用AWSアカウントの東京リージョンで試します。

0. Image Builderの用意

まずはImage Builderを用意します。

ベースとなる汎用(General purpose)イメージはAppStream-AmazonLinux2-06-20-2022が本日時点の最新だったのでこれを使います。

その他の設定はざっくり以下の様にしています。

  • インスタンスタイプは stream.standard.small (最小スペック)
  • ネットワークはDefault VPCを使用。インターネットアクセス可能に設定
  • その他項目は基本デフォルトのまま

作成後はこんな感じです。

1. 日本語フォントと入力メソッドのインストール

ここからはImage Builderに接続しての作業となります。

Terminalを起動し、yum installで日本語フォント(VL ゴシック)とibus-kkcをインストールします。

# VL ゴシックフォントのインストール
sudo yum install -y vlgothic-p-fonts.noarch

# ibus-kkcのインストール
sudo yum install -y ibus-kkc.x86_64

エラー無くインストールできればOKです。
今回はこんな感じのバージョンがインストールされました。

# インストール済みバージョンを確認
$ yum list installed | grep -e vlgothic -e ibus-kkc
ibus-kkc.x86_64                        1.5.18-7.amzn2.0.2            @amzn2-core
vlgothic-p-fonts.noarch                20130607-2.amzn2              @amzn2-core

ちなみにVL ゴシックのライセンスはこちらになります。

2. タイムゾーンの変更

次にtimedatectl set-timezoneコマンドでタイムゾーンを変更します。

# Timezone設定を変更
sudo timedatectl set-timezone "Asia/Tokyo"

3. システムロケールと表示言語の変更

続けてシステムロケールとGNOMEの表示言語を変更します。

# システムロケールを変更
sudo localectl set-locale LANG=ja_JP.utf8

# GNOMEのロケールを変更
sudo gsettings set org.gnome.system.locale region "ja_JP.utf8"

この後Image Builderを再起動して接続し直すと言語表示が日本語になります。

さらにフリート用にcloud-initの設定を変え各フリートインスタンスのロケールがja_JP.utf8になる様にします。
cloud-initの設定は/etc/cloud/cloud.cfgにあるので、このファイルをテキストエディタで編集し、

locale: ja_JP.utf8

を追記します。

今回はお手軽にsedで追記しておきます。

# sedで 空行(\\n) とロケール設定を追記
# * 一応バックアップ(.orig)もしておく
sudo sed -i.orig -e '$a \\nlocale: ja_JP.utf8' /etc/cloud/cloud.cfg

4. 入力メソッドの設定

入力メソッドの設定は以下のupdate-input-method.sh/usr/local/bin/に配置し、公開アプリケーション起動時にアプリケーションと同時に実行することで実現するそうです。

/usr/local/bin/update-input-method.sh

#!/bin/bash

function start_process()
{
    command=$1
    process_name=$2

    process_count=$(pgrep $process_name -c)
    echo "$(date) current $process_name count: $process_count"
    while [ $process_count -lt 1 ]
    do
        echo "$(date) starting $process_name"
        eval $command
        sleep 1
        process_count=$(pgrep $process_name -c)
    done
    echo "$(date) $process_name started"
}

start_process "ibus-daemon --xim &" "ibus-daemon"
start_process "/usr/libexec/ibus-engine-kkc --ibus &" "ibus-engine-kkc"

gsettings set org.gnome.desktop.input-sources sources "[('ibus','kkc'), ('xkb', 'us')]"
gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['<Control>space']"
gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward "['<Shift><Control>space']"

echo "$(date) updated input source and switch shortcut"

このスクリプトではざっくり以下の処理を行っています。

  • ibus-daemon, ibus-engine-kkcプロセスを起動
  • GNOMEの入力メソッドを日本語と英語に設定
  • 入力メソッドのキーバインドを変更

スクリプトの使い方としては、例えばFirefoxを公開アプリケーションにする場合だと以下の様な起動スクリプト(firefox-jp.sh)を使用してFirefoxの起動直前に実行する想定となっています。

/usr/local/bin/firefox-jp.sh

#!/bin/bash

# Firefox起動前に日本語入力メソッドの有効化
/usr/local/bin/update-input-method.sh > /var/tmp/update-input-method.log 2>&1 &
# Firefoxを起動 (AWSのドキュメントはPATHが間違ってるぽい)
/usr/local/bin/firefox &

このため具体的な手順は公開するアプリケーションによって変わります。

今回は公式ドキュメントの内容に従いFirefoxを追加インストールして上記スクリプトを設定しておきます。
Firefoxは公式の手順に従って最新の日本語版をインストールします。

  • 使ったファイルはこちら : https://ftp.mozilla.org/pub/firefox/releases/102.0.1/linux-x86_64/ja/firefox-102.0.1.tar.bz2

あとは上記2つのスクリプトの配置と実行権限の付与を行っています。

# スクリプトの配置については省略

# 実行権限の付与はこんな感じ
sudo chmod +x /usr/local/bin/update-input-method.sh
sudo chmod +x /usr/local/bin/firefox-jp.sh

ここまでが公式の手順ですが、AppStream 2.0は公開デスクトップの利用もあるため、個人的には以前の記事で試した様に「設定(Settings)」から入力ソースを指定しておくのも追加でやっておくと良いと考えています。

ダイアログから「日本語」を選択、

続けて「日本語(かな漢字)」を選択し「追加」します。

入力ソースが増えていればOKです。

補足 : 言語切り替えのキーバインドについて

こちらも以前の記事でお伝えした通りですが、GNOMEの言語切り替えのショートカットキー「Super + Space」のうちSuperキーがブラウザに奪われることがありますので、環境に応じてはキーバインドを変えておくと良いでしょう。

キーバインドの変更は「設定」アプリから「デバイス」→「キーボード」で変更できます。

前述のupdate-input-method.shではキーバインドを「Super + Space」→「Ctrl + Space」に変更していますのでデスクトップ環境も同様にしておくのがおすすめです。

5. キーボードレイアウトの変更

localectl set-keymapコマンドを使ってキーボードレイアウトを日本語(106キーボード)にします。

# キーボードレイアウトの変更
sudo localectl set-keymap jp106

6. イメージの検証

ここで改めてImage Builderを再起動して各種設定がローカライズできているか確認します。

7. イメージの作成

イメージ作成手順は従来通り変わりありません。
基本的な手順についてはこちらの記事が役に立ちますので参考にしてください。

今回はざっくり以下の手順でFirefoxを公開アプリケーションにしたイメージを作っています。

# 公開アプリケーションの登録
# * 事前にマニフェストファイル /tmp/firefox-manifest.txt を作成済み
# * --absolute-app-path をfirefoxのバイナリでは無く firefox-jp.sh にしているのがポイント
sudo AppStreamImageAssistant add-application \
    --name "Firefox" \
    --absolute-app-path "/usr/local/bin/firefox-jp.sh" \
    --display-name "Firefox" \
    --absolute-icon-path "/usr/share/icons/HighContrast/256x256/apps/firefox.png" \
    --absolute-manifest-path "/tmp/firefox-manifest.txt"

# 動作確認手順は省略

# イメージ作成
sudo AppStreamImageAssistant create-image \
   --name "my-al2-jp-image" \
   --display-name "My Amazon Linux 2 Japanese Image" \
   --description "My Amazon Linux 2 Japanese Image" \
   --use-latest-agent-version

しばらく待ってイメージが出来上がれば完了です。

動作確認

あとはよしなにフリートとスタックを準備して環境を用意します。
AppStream 2.0にログインするとこんな感じでFirefoxが公開されています。

Firefoxを起動して良い感じに日本語が使えることが確認できました。

入力言語の切り替えは「Ctrl + Space」で行えます。

最後に

以上となります。

公式に日本語化手順が提供されたことでAmazon Linux 2イメージを使う敷居がぐっと低くなったと思います。
機会があれば気軽に試してみてください。