Edited at

DockerでポータブルなUbuntuを作ろうとして日本語入力で挫折した


概要


  • やりたかった:DockerでUbuntu(日本語入力可)を作成し、開発環境を移植する

  • できた:Dockerコンテナ上でGUIアプリを起動

  • できた:日本語の表示

  • できなかった:日本語の入力


詳細

Dockerfileさえあれば、Windowsでも簡単にUbuntuで開発環境が構築できるような状況を作りたかった。

しかしfcitxがうまく起動していない(?)ため日本語の入力ができなかった。

以下、学習したことを書いていく。


Docker上でGUIアプリを起動する一番楽な方法


コンテナ側

環境変数DISPLAYを設定し、Xの画面をホストに飛ばす。

Windowsの場合、ipconfigの結果が次のようになるはずなので、設定する値は192.168.99.1:0.0となる。

意味は"(ホスト):(ディスプレイ番号).(スクリーン番号)"。

イーサネット アダプター VirtualBox Host-Only Network #4:

接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::d146:d8f3:409d:7af7%10
IPv4 アドレス . . . . . . . . . . . .: 192.168.99.1
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .:

起動時オプションとして指定するのが楽。(実際はdocker-compose.ymlで指定する)

$ docker run -e DISPLAY=192.168.99.1:0.0 your-image:tag


ホストマシン側

X Serverをインストールする。(例:VcXsrv)

インストールが終わったらボタンポチポチで設定を行う。これによりコンテナから飛ばされたXの画面を表示できる。






やっておくとよいこと

# 初期設定のaptリポジトリは米国のサーバーなので遅い。日本のサーバーに向ける

$ sed -i.bak -e "s%http://archive.ubuntu.com/ubuntu/%http://ftp.iij.ad.jp/pub/linux/ubuntu/archive%g" /etc/apt/sources.list

# Firefoxを起動した時に"Failed to execute dbus-launch to autolaunch D-Bus session"が出なくなる
$ apt-get install -y dbus-x11

# ppaリポジトリを追加する際にadd-apt-repositoryが使えるようになるので便利
$ apt-get install -y software-properties-common


Ubunutu(on Docker)で日本語を表示する方法

デフォルトでは英語になっているので、ロケール情報を修正する。

必要なパッケージ/コマンドは次の通り。

$ apt-get install -y fonts-takao-* language-pack-ja tzdate

$ locale-gen ja_JP.UTF-8
$ update-locale LANG=ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8
$ dpkg-reconfigure locales
$ ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ dpkg-reconfigure tzdata


やりかけのDockerfile

あとは日本語入力さえできれば、、、。

誰か詳しい人がいたら教えてください。

FROM ubuntu:xenial

ENV DEBIAN_FRONTEND=noninteractive \
GTK_IM_MODULE=fcitx \
QT_IM_MODULE=fcitx \
XMODIFIERS=@im=fcitx \
DefalutIMModule=fcitx

RUN sed -i.bak -e "s%http://archive.ubuntu.com/ubuntu/%http://ftp.iij.ad.jp/pub/linux/ubuntu/archive%g" /etc/apt/sources.list \
&& apt-get update \
&& apt-get install -y dbus-x11 \
fonts-takao-* \
fcitx-mozc \
language-pack-ja \
tzdata \
software-properties-common \
x11-server-utils \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& locale-gen ja_JP.UTF-8 \
&& update-locale LANG=ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8 \
&& dpkg-reconfigure locales \
&& ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
&& dpkg-reconfigure tzdata \
&& echo "fcitx-autostart" >> /etc/X11/xinit/xinitrc.d/fcitx \
&& chmod 557 /etc/X11/xinit/xinitrc.d/fcitx