Dockerで日本語入力対応Linuxデスクトップ環境

Dockerを使うと様々なアプリを簡単にhttps://github.com/Rosyuku/ubuntu-rdp起動できますが、基本的にCUIでの操作やWeb経由でのアクセスがメインだと思います。しかし、Linuxデスクトップ環境をコンテナ使って構築できると便利だなと思い探してみました。

調査に使ったコンテナ実行環境は、Docker 19.03 on CentOS 7で、アクセスに使った環境は Chrome on Windows 10です。

docker-ubuntu-vnc-desktop ⇒ 日本語未対応

まずはじめに試したのが、docker-ubuntu-vnc-desktop というコンテナ。名前にはVNCと入ってますが、VNCで接続するものではなくブラウザから接続します。

Quick Startに書かれている通り、以下のコマンドで起動しました。-pでマッピングするポートは適宜読み替えてください。本記事では基本的に8080ポートを使います。

# docker run -p 8080:80 -v /dev/shm:/dev/shm dorowu/ubuntu-desktop-lxde-vnc

ブラウザから、http://ホストのIP:8080ポートにアクセスすると以下のようにデスクトップが表示されました。

デフォルトで、ターミナルやブラウザ(Firefox, Chrome)が入っていましたが、Chromeは私の環境ではなぜか起動しませんでした。

これを最初に起動して思ったのが、日本語入力環境がないのが不便で、コンテナ起動する度に日本語設定するのは面倒だなということです。ということで、以降では日本語に対応した Linuxデスクトップ環境を探してまとめてみました。

docker-xrdp ⇒ 画面真っ黒で表示されず

次に試したのが、docker-xrdp というコンテナです。Qiita で「Dockerで日本語入力可能なubuntu 20.04イメージを作りました (xrdp)」という記事で紹介されている通り、デフォルトで日本語入力可能を謳っています。xrdp と書かれているとおり、接続にはリモートデスクトップを使います。

Qiitaの記事によると、--shm-size オプション使わないとFirefoxがクラッシュするらしいので、これを付与して起動します。パスワードは指定しないと自動生成されるらしいですが、ここでは「hogehoge」を指定しました。

# docker run -p 8080:3389 --shm-size=1g -e PASSWD=hogehoge tukiyo3/xrdp:core

リモートデスクトップからサーバの8080ポートに接続すると、以下のxrdpのログイン画面が現れました。

デフォルトのユーザ名は、「focal」で、パスワードには起動時に指定したhogehogeを入力するとログインは成功しマウスカーソルが表示されます。画面上で右クリックすると以下のようなメニューが出てくるのですが、画面全体がなぜか真っ黒でタスクバーなどが表示されず、まともなデスクトップが表示されませんでした・・・

ubuntu-desktop-jp ⇒ 日本語入力できず

次が、「日本人向けのUbuntuデスクトップ環境」を謳っている ubuntu-desktop-jp です。こちらは最初に紹介したdocker-ubuntu-vnc-desktopのように、ブラウザ経由で使うコンテナのようです。

GitHubに書かれているコマンドで起動してみます。

# docker run --rm -p 8080:8080 uphy/ubuntu-desktop-jp:18.04

ブラウザから、8080ポートにアクセスすると以下の画面が表示されました。

デフォルトの日本語入力ONのキーは、「Super + Space」になっていますが、Windows環境で Windowsキー + Space を押すと、Windowsの日本語入力選択画面が表示されてしまい、Linuxデスクトップ側の日本語入力をONにすることができませんでした。よって、IBus Preferences の設定を開き、<Super>space を <Shift>space に変更してみました。

この状態で、ターミナルを開き Shift + Spaceを押すと、日本語入力切替画面が出てくるようになりましたが、なぜか日本語入力できません・・・

右上のアイコンから「ひらがな」を選んでもやっぱり無理。ちなみにブラウザも開きませんでした。

openbox-mozc-docker ⇒ 日本語入力できず

次に試したのが、openbox-mozc-dockerです。日本語入力ができるシンプルなデスクトップ環境のようで、接続はVNCです。

ビルド済みのコンテナがないので、Dockerfileからビルドする必要があります。(数分要します)

# git clone https://github.com/hiroshi-nishiura/openbox-mozc-docker.git
# cd openbox-mozc-docker/
# docker build -t openbox-mozc-docker .

ビルドが完了したら、起動します。

# docker run --rm -it -p 8080:5900 openbox-mozc-docker xvnc

VNC Viewerを使って8080ポートに接続すると、背景が真っ黒な超シンプルな画面が表示されました。(画面下にタスクバーは表示されています)

デフォルトの日本語入力はCtrl + Spaceになっていますので、ブラウザを起動してCtrl + Spaceを押してみましたが、反応がありません。どうやら、Input Methodが設定されていないようです・・・。GitHubに書いてるようにEmacs以外については、日本語入力できるように設定されていないのかもしれません。

yama07/docker-ubuntu-lxde ⇒ 日本語入力可。シンプル。起動時エラーあり

次は、docker-ubuntu-lxde です。Ubuntu + LXDEをベースの日本語入力対応を謳ってます。接続にはリモートデスクトップを使います

まずは、GitHubのREADMEに何も書かれてないので、DockerHub のドキュメントを見ながら起動してみます。「rootユーザとして起動した場合は、日本語入力(mozc)が利用できません。」とあるので、-u には別ユーザIDとグループIDを指定しています。--privileged も付けておいた方がよいとのことなので、つけてます。

# docker run --privileged --rm -it -p 8080:3389  -u 1000:1000  -e USER=test -e PASSWD=hogehoge yama07/docker-ubuntu-lxde:ubuntu18.04_ja

リモートデスクトップで、8080ポートに接続すると、先程と同じくxrdpの見慣れたログイン画面が出てきます。

起動時に指定した、ユーザ test, パスワード hogehoge でログインすると、DockerHubのドキュメントみたいな背景ではなく、真っ黒なシンプルなLXDEの画面が出てきました。

しかし、ログイン時に以下のエラー画面が出て、コンテナのログにも以下のエラーが出力されました。

xrdp-sesman[42]: pam_systemd(xrdp-sesman:session): Failed to create session: Input/output error

デフォルトの日本語入力切替が Super + Space になっているのですが、ONにならなかったので、ubuntu-desktop-jp の時と同じように、IBus Preferencesの設定画面を開いて、Shift + Space に変更しました。

この状態で、ターミナルを起動して、Shift + Space を押すと、日本語切替の画面が以下のように出てきましたが、「あ」を選択しても日本語入力できません。

しかし、画面右下のアイコンから、入力モードを手動で「ひらがな」に変更すると、無事日本語入力ができました。

ちなみに、ブラウザ(Firefox)も起動できました。

rosyuku/ubuntu-rdp ⇒ 日本語入力可。シンプル

ubuntu-rdp は、リモートデスクトップとSSH接続ができる、日本語入力対応のコンテナと謳われています。

起動してみます。

# docker run --rm -it -p 8080:3389 -p 10022:22 --shm-size=256m rosyuku/ubuntu-rdp:0.1.2

また、xrdp のログイン画面が出てくるので、デフォルトのIDとパスワード my-ubuntu / my-Password でログインします。

画面は、ubuntu-desktop-jp と同じですが、デスクトップのアイコンは日本語化されていませんでした。

上と同じく、IBus Preferencesの設定画面を開いて、Shift + Space に変更します。

ターミナルを開いて、Shift + Space 入力をONにします。

yama07/docker-ubuntu-lxde 同様に、ONにしただけでは日本語が入力できなかったので、画面右上から「ひらがな」を選択すると、無事入力できました。

ちなみにブラウザ(Firefox)も起動でき、日本語入力できました。

docker-centos-xfce-ja ⇒ 日本語入力可。CentOSベース。超高機能!

最後が、docker-centos-xfce-ja です。今まで紹介してきたコンテナは全てUbuntuベースでしたが、こちらはCentOSベースで、ブラウザ経由でもリモートデスクトップでもアクセスできるようです。さらに、SSHやブラウザ経由でターミナルにアクセスできたり、ファイル管理(アップロード・ダウンロードも可)もできたり、ブラウザ版VSCodeも使えたり、デフォルトでHTTPSで暗号化できたりと、かなり機能盛りだくさんです。

起動してみます。ポート8080がWebアクセス(https)用、22がssh用、3389がリモートデスクトップ用になっているようなので、それぞれを-pでマッピングしています。

# docker run -d -p 8080:8080 -p 10022:22 -p 8081:3389 -e PASSWORD=hogehoge --name centos-xfce-ja --shm-size=2g tmatsuo/centos-xfce-ja

※ 機能豊富な分イメージがでかいです。

まずは、ブラウザでアクセスしてみます。機能盛りだくさんのため、機能毎にアクセスするパスが決まっているようで、Linuxデスクトップにアクセスしたい場合、
    https://サーバIP:8080/desktop/
にアクセスします。オレオレ証明書のため証明書エラーが出ますが、エラーを無視して接続すると、ベーシック認証画面がでてきます。

ドキュメントによると、Nginxがフロント(リバースProxy)にいて、PAMを使って認証しているようです。上記ベーシック認証画面で、IDにroot, パスワードは起動時に指定したパスワード hogehoge を入力すると、以下の画面が表示されました。

日本語入力ONは、Shift + Spaceに設定されていると書かれているので、ターミナルを起動して、Shift + Spaceを押すとONにできました。

日本語入力もデフォルトの設定で問題なくできます。今までのコンテナ中で一番手軽です。

リモートデスクトップでも繋いでみます。起動時に指定した8081ポートに繋いでみると、先程ブラウザで起動したターミナルが見えます。ブラウザとリモートデスクトップで同じ画面が表示されるようです。

ついでに他の機能にもアクセスしてみました。ブラウザから
    https://サーバIP:8080/term/
にアクセスすると、ログインプロンプトが出てき、先程のIDとパスワードでログインできました。

ブラウザから
    https://サーバIP:8080/file/
にアクセスすると、以下のようにファイルブラウザが表示されました。操作端末との間でファイルやりとりするのも簡単そうです。

ブラウザから
    https://サーバIP:8080/code/
にアクセスすると、以下のようにVS Codeの画面が表示されました。ここまでお膳立てされていると、ちょっとした開発ならすぐにでも開始できそうです。

まとめ

いろいろなコンテナを起動してみましたが、日本語対応を謳っていても実際はうまく起動できなかったり日本語入力できなかったりするものが多い印象です。今回はあまり深くは触っていませんが、

シンプルなUbuntuベースのLinuxデスクトップ ⇒ rosyuku/ubuntu-rdp

高機能なCentOSベースのLinuxデスクトップ ⇒ docker-centos-xfce-ja

の二択かなと思いました。

タイトルとURLをコピーしました