はじめに
お疲れ様です。矢儀 @yuki_ink です。
先日、こちらの記事で、Amazon AppStream 2.0のRocky Linuxを使ってFirefoxを動かしてみました。
よーし、次は日本語入力できるようにするぞー( ^ω^)
と思っていたのですが、こちらのAWS公式ブログの手順通りにやってもイマイチうまくいきませんでした。
Image Builder上ではいい感じに日本語入力できるのに、
いざフリート・スタックを通して配信してみると、そこで表示される画面では日本語入力できない、という状況になりました。
色々調べて、以下の結論に辿り着いたので記事にしたいと思います。
前提
前回の記事を参考に、以下の手順まで終わっている状態から始めていきます。
- 1. NW構築
- 2. Image Builderの起動
- 3. Image Builder への接続
- 4. Rocky LinuxにFirefoxをインストールする
- 5. アプリケーション最適化マニフェストファイルを生成する
やったこと
Image Builderで以下のコマンドを実行します。
なお、調査の過程では、こちらのブログを参考にさせていただきました。
ステップ 1: 日本語フォントと入力方法をインストールする
AWS公式ブログの手順の通りです。
sudo yum install vlgothic-p-fonts.noarch -y
sudo yum install ibus-kkc.x86_64 -y
sudo yum install glibc-langpack-ja -y
ステップ 2: システムタイムゾーンを設定する
AWS公式ブログの手順の通りです。
sudo timedatectl set-timezone "Asia/Tokyo"
ステップ 3: システムロケールと表示言語を設定する
AWS公式ブログの手順の通りです。
# sedで 空行(\\n) とロケール設定を追記
# 一応バックアップ(.orig)もしておく
sudo sed -i.orig -e '$a \\nlocale: ja_JP.utf8' /etc/cloud/cloud.cfg
# システムロケールを変更
sudo localectl set-locale LANG=ja_JP.utf8
# GNOMEのロケールを変更
sudo gsettings set org.gnome.system.locale region "ja_JP.utf8"
ステップ 4: 入力方法を設定する
sudo vim /usr/local/bin/update-input-method.sh
コマンドを実行してスクリプトを作成します。
AWS公式ブログの手順の通り、スクリプトに次のコンテンツを追加します。
#!/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', 'kkc') がデフォルトの入力方法です。デフォルトの入力方法を変更するには、入力ソースの順序を変更します。
また、入力方法を切り替えるためのショートカットキーの組み合わせとして、Control + Space と Shift + Control + Space が指定されています。ユーザーがストリーミングセッション中に入力方法を切り替えるために使用できる、独自のキーの組み合わせを指定できます。
続いて、sudo vim /usr/local/bin/firefox-jp.sh
コマンドを実行し、スクリプトに以下のコンテンツを追加します。
環境変数を整理する処理を追加しています。
ここがポイントです!!
#!/bin/bash
###Gather DBUS info and clean for environmental variable storage###
while IFS= read -r -d $'\0' env_var; do
case "$env_var" in
DBUS_SESSION_BUS_ADDRESS=*|\
GTK_IM_MODULE=*|\
QT_IM_MODULE=*|\
XMODIFIERS=*|\
XAUTHORITY=*)
echo "$env_var"
export "$env_var"
;;
esac
done < "/proc/$(pgrep -u as2-streaming-user gnome-shell | head -n1)/environ"
/usr/local/bin/update-input-method.sh > /var/tmp/update-input-method.log 2>&1 &
/usr/bin/firefox &
ここからは前回と同じ流れです。
# 実行権限の付与
sudo chmod +x /usr/local/bin/update-input-method.sh
sudo chmod +x /usr/local/bin/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/local/firefox/browser/chrome/icons/default/default128.png \
--absolute-manifest-path /tmp/firefox-manifest.txt
ステップ 5: キーボードレイアウトを設定する
sudo localectl set-keymap jp106
ステップ 6: Image Builder で検証を行う
このステップは飛ばしても大丈夫です。
Image Builder で検証を行うには、最初に sudo shutdown -r now コマンドを実行して Image Builder を再起動します。再起動後、Image Builder に再度接続し、タイムゾーン、ロケール、言語、入力方法などのすべてが想定どおりに機能することを確認します。
sudo shutdown -r now
でImage Builderを再起動すると、このような画面が表示されます。
どちらでもいいと思いますが、何かが変わっても嫌なので、私は「古い名前のままにする」を選びました。
ステップ 7: イメージを作成する
Firefox
というイメージを作成します。
$ sudo AppStreamImageAssistant create-image \
--name "Firefox" \
--display-name "Firefox" \
--description "Firefox on RockyLinux8" \
--use-latest-agent-version
## 数秒後、リモートセッションが切断される
動作確認
今回は、前回の 8. フリートとスタックの作成 で作ったフリートとスタックを流用。
ストリーミングされたFirefoxで日本語入力ができました!!
「Control + Space」で入力言語の切り替えができます。
日本語入力に対応する前と比べて、少しフリートの起動時間が長くなりました(体感10秒くらい長くなった気がする)。
これが許容できるかどうかが、採用するかどうかの判断に繋がってくるかと思います。
終わりに
以上、AppStream 2.0のRocky Linuxイメージで日本語入力できるように対応してきました!
公式手順通りにやってもうまくいかないことってあるんだなあとw
この記事がどなたかのお役に立てば幸いです。
最後までお目通しいただき、ありがとうございました!