🔖

docker Ubuntuイメージで日本語環境リモート接続

2022/04/14に公開

DockerはOSは含まれずソフトウェアのような使い方だと思い、DockerでUbuntuが使えることを知り驚きました。
私は、こちらの記事を参考にしました。
https://qiita.com/yasuoka_dev/items/073f7e8c7dba75993323
私は、このコマンドで、Ubuntu 20.04.4 LTSをインストールしました。

docker pull ubuntu

https://hub.docker.com/_/ubuntu/

# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.4 LTS"
# 

コンテナの名称は、確認しましょう。

私は、自動で作りました。
コンテナの名称が、カッコいい名前になっていました。
そのためUbuntuと指定しても、コンテナがありませんとエラーになります。

docker ps -a

Dockerインストール

こちらの記事を参考に、 Dockerをインストールしました。
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-ja

noVNCを使いたかったので

noVNCを試したかったのですが、VNCでは接続できない様です。
そのためXRDPで接速することにしました。

こちらの記事を見たら、私も諦めました。
https://qiita.com/hoto17296/items/0e3e5bd407351fd2e6ca

すでに Dockerのイメージがあった

そして、検索している中で、見つけました。

https://qiita.com/FukuharaYohei/items/a6c1e1a2ba8d1285cfa5

https://qiita.com/tukiyo3/items/e8064461d98e51aa0f5f

あっという間に接続できました。

正確には、色々とインストールしている時間が1時間くらいあります。
でも、二日かかってVNCで接続しようと試行錯誤していたことを振り返ると、とても早く実現できました。

今回できたコンテナ二つを同時に使う形に、なります。
rootでログインできます。
パスワードは、今回参考にした流れで設定したものです。

こちらの記事で、一部補足です。
https://qiita.com/FukuharaYohei/items/a6c1e1a2ba8d1285cfa5

私の場合は、「6. 日本語化モジュールのインストール(2/2)」の工程は、行いませんでした。
理由は、このコマンドがエラーになったからです。

winpty docker container exec -it ubuntu-xrdp bash

それからリモートディスクトップのクライアントでログインした時に、エラーが出ます。
そのことが、ここに書かれていました。
https://qiita.com/yama07/items/b905ceff0498e52b00cb#はじめに
問題ないです。

私は、今回見つけた記事の手順を行えるように、ファイルを作りました。

コンテナのIDを確認します。

docker ps -a

CONTAINER ID   IMAGE     COMMAND   CREATED       STATUS                   PORTS     NAMES
************   ubuntu    "bash"    5 hours ago   Exited (0) 5 hours ago             ubuntu-xrdp-set

私は、作ったイメージのバックアップを作り意味で、この段階で Docker Hubのプライベートのリポジトリにプッシュしました。
無料のアカウントでも1つは、プライベートのリポジトリを登録できます。

最初にHubにプッシュできるように、Tagを変更します。

docker tag イメージID アカウント名/ubuntu-xrdp-set

このようにtagを変更しておかないと、エラーが出ます。

The push refers to repository 
An image does not exist locally with the tag: 

私は、説明文やタグは、 Docker Hubのリポジトリのページで作り準備しました。
このコマンドで、プッシュできます。

docker push アカウント名/ubuntu-xrdp-set

ちなみにプライベートでプッシュしたリポジトリを公開にボタン一つで変更できます。
また、その逆もできます。

シェルスクリプトで自動化しようとしたら

この記事のコマンド入力の部分を自動化しようとしましたが、できませんでした。
https://qiita.com/FukuharaYohei/items/a6c1e1a2ba8d1285cfa5

パスワードまで入力してコミットしたものを、Docker Hubで、公開します。
私も、このイメージを保存しておくことで、繰り返し作る手間を省きたいと思います。

私が参考にした記事で実際と違うところ

apt-get install xrdp

を実行した時、タイムゾーンを聞かれました。
そのため、8Asiaを選択した後79Tokyoを選択しました。

apt-get install lxde

を実行した時、ディスプレイマネージャーの選択が出ました。
2. lightdmを選択しました。

最新のDockerのUbuntuイメージを日本語化する記事を発見

こちらの記事は、Dockerfileの書き方も有るので、勉強になります。
https://rooter.jp/infra-ops/build_docker_jp_env/

SSH接続する参考記事

https://knkomko.hatenablog.com/entry/2021/06/06/003108

IPアドレスの確認

docker inspect <コンテナID>

で確認できます。

DockerのUbuntuは。sudoが使えません。

必要に応じて、sudoを使いたい場合は、インストールしてください。
rootでログインしているため、@sudo`は、使わないと思いますが、パッケージのインストールのコマンドをコピペするときは、便利かもしれないです。

#sudo インストール
apt-get install sudo
#ユーザー追加
adduser user sudo

日本人向けの日本語環境のUbuntuコンテナイメージを見つけました。

こちらの記事を読み、ショックを受けました。
すでに、理想とするイメージが、ありました。
https://genchan.net/it/virtualization/docker/13209/

https://hub.docker.com/r/uphy/ubuntu-desktop-jp

ただ上記のイメージを試しましたが、うまく使うことができませんでした。

日本語変換の本当のセットを自動化

下記の記事で、ibus-mozcの正しい?インストール方法を知りました。
https://www.karelie.net/install-ibus-mozc/

この一般的な方法では、日本語の辞書が不十分ということのようです。

apt-get install ibus-mozc

下記の記事を参考にしました

http://baker-street.jugem.jp/?day=20170407

https://qiita.com/cffnpwr/items/f11a5113f9c748762946

https://sicklylife.jp/ubuntu/2004/mozc_ut2.html

Mozc UT2の辞書がすごい

Linuxの日本語入力は、使い辛い点があります。
変換される言葉に限りがあるというか、カタカタの外来語、英単語など変換したいときに不便です。
そうした思いを解決してくれるのが、Mozc UT2です。
でも、Mozc UT2は、ファイルをダウンロードして、自分でビルドする必要があります。

ibus-mozcを先にインストールしてから

sudo apt install -y ibus-mozc

上記のコマンドを実行してから、Mozc UT2を試してください。
それからsudoコマンドも、必要です。

Mozc UT2は、Ubuntu20.10では、エラーになります。

私は、Mozc UT2がエラーになり、インストールできませんでした。
調べていたら、こちらの記事を見つけました。
https://www.kaias1jp.com/entry/2020/11/27/210648

コマンドでファイルをダウンロードするために、必要なもの

https://www.delftstack.com/ja/howto/linux/how-to-use-wget-command-in-linux/

日本語環境とSSHをセットする

ubuntu-desktop、XRDP、ibus-mozcをインストールして完成したいのですが、とりあえず、この段階のDockerfileとdocker-compose.ymlを、掲載します。

Dockerfile

FROM ubuntu

#イメージ作成時にRUNで事前にコマンドラインを実行できる
#パッケージリストを更新
RUN apt-get update
RUN apt-get upgrade

#日本語化パッケージリストをインストール
RUN apt-get install -y language-pack-ja-base language-pack-ja locales
#localeを日本語設定に変更
RUN locale-gen ja_JP.UTF-8
#言語を日本語に設定
ENV LANG ja_JP.UTF-8

#URL ダウンロード
RUN apt-get install -y wget

#SSHをインストール
#ID root
#パスワード 
RUN apt-get update
RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config
 
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
 
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

EXPOSE 22
ENTRYPOINT [ "/usr/sbin/sshd","-D"]

docker-compose.yml

version: '3'

services:
   ubuntu_jp:
     build: 
      context: ./
      dockerfile: ./dockerfile
     ports:
      - '2222:22'
     tty: true
     volumes:
          - ./data:/root/data/
          

SSHの接続は、こちらの記事の通りです。
https://knkomko.hatenablog.com/entry/2021/06/06/003108

ssh -p 2222 root@localhost

初期パスワードは、passwordです。

バインドボリュームできました

Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.10.104-linuxkit x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, you can run the 'unminimize' command.
root@:~# ls
data
root@:~# cd data
root@:~/data# ls
Downloads
root@:~/data# cd Downloads
root@e~/data/Downloads# ls
jisyo.sh  mozc-2.23.2815.102+dfsg_ut2-20171008d+20200423focal.tar.xz
root@:~/data/Downloads# 

## 学んだこと
SSH環境が使えるようにコンテナを作ってからコンテナをコミットして新しくコンテナを作ろうとしても、エラーになります。
https://qiita.com/masaru21/items/026e2434609b2ee791f3

そのため、先にXRDPで環境を作る流れに変えました。

作ったリモートデスクトップが動かない

https://qiita.com/FukuharaYohei/items/a6c1e1a2ba8d1285cfa5
こちらの記事を読んで作ったリモートデスクトップのコンテナが、使えなくなりました。
理由は、私がDockerdesktopで記録されているボリュームを整理するために削除したことが、原因と思います。
そのため、Dockerでリモートデスクトップを使うときは、ボリュームを気をつけた方が良いです。
そのため自分で環境に合わせて、ボリュームをマウントして使うように、オリジナルでリモートデスクトップのコンテナを作った方が良いかもしれないと思いました。

私は、この記事を見つけました。

https://qiita.com/yama07/items/b905ceff0498e52b00cb

https://hub.docker.com/r/yama07/docker-ubuntu-lxde

https://note.shironekoworks.com/memo-when-creating-ubuntu-rdp-environment-on-docker/

Dockerで最新のUbuntuでコンテナを作ろうとするとエラーになります。

Ubuntuのdesktopをインストールしようとすると、下記のエラーが出ました。

E: http://archive.ubuntu.com/ubuntu/pool/main/c/cdrkit/genisoimage_1.1.11-3.1ubuntu1_amd64.deb の取得に失敗しました  接続失敗 [IP: ***.***.***.** **]
E: 一部のアーカイブを取得できません。apt-get update を実行するか --fix-missing オプションを付けて試してみてください。

私は、1MBの低速のモバイル回線のため、3時間くらいかけてUbuntuのデスクトップをインストールしようとしていたので、エラーで止まってしまいショックを受けました。

UIDとGIDを再勉強

https://yaruki-strong-zero.hatenablog.jp/entry/docker_container_uid_gid

https://blog.amedama.jp/entry/docker-container-host-same-user

上記の記事をはじめ、様々なUIDとGIDについて勉強しました。
目的は、今回見つけたコンテナイメージを起動するためのコマンドの意味を調べたかったのです。

$ docker run --rm -it \
    --privileged \
    -p 3389:3389 \
    -u $(id -u):$(id -g) \
    -e USER=yama \
    -e PASSWD=yamapasswd \
    lxde_xrdp:ubuntu16.10_ja
    

https://qiita.com/yama07/items/b905ceff0498e52b00cb

この呪文を知りたくて

-u $(id -u):$(id -g) \

この部分を知りたくで、UIDとGIDについて調べていたのです。
環境変数の設定の仕組みを知りましたので、私も活用したいと思います。

idのところを直接数値に置き換えると、エラーになります。

また上記のDockerのコマンドを実行すると、ダウンロードをしてくるのですね。
私は、前もってdocker pull yama07/docker-ubuntu-lxdeを実行したのです。
でも、上記のコマンドを実行したら、ダウンロードが始まりました。

この記事も、参考になります。
https://kuranabe.hatenablog.com/entry/2019/01/26/191441

今回見つけたリモートデスクトップを使って見た

このような状況になり、エラーとなりました。

docker run --rm -it \
     -p 3389:3389 \
     -u $(id -u):$(id -g) \
     -e USER=yama07 \
     -e PASSWD=mypasswd \ 
     yama07/docker-ubuntu-lxde
GROUP_ID: 20
groupadd: GID '20' は既に存在します

既にあるグループで使えると思ったのですが、競合するようです。

-u $(id -u):$(id -g) 
を次のように修正しました。
-u 1000:1000

なおこのUIDとGIDの設定の部分を削除してコンテナを起動すると、rootとなります。
そのためRDPのソフトでユーザー名を入力するときは、rootと入力してください。
パスワードは、もし設定したら、その設定したパスワードで大丈夫です。

起動成功

GROUP_ID: 1000
USER_ID: 1000
USER: 
PASSWD: 
#############################
2022-04-15 00:19:30,890 INFO Set uid to user 0 succeeded
2022-04-15 00:19:30,898 INFO supervisord started with pid 1
2022-04-15 00:19:31,903 INFO spawned: 'dbus' with pid 45
2022-04-15 00:19:31,908 INFO spawned: 'xrdp' with pid 46
2022-04-15 00:19:31,914 INFO spawned: 'xrdp-sesman' with pid 47
xrdp-sesman[47]: (47)(139923393627712)[DEBUG] libscp initialized

実際に起動した様子です。

ターミナルの画面

Ubuntu Desktopを使う記事を見つけました。

https://genchan.net/it/virtualization/docker/13063/

initとsystemctlを使えるようにするのが、肝なのかもしれないです。

ログインしたら画面が真っ黒

XRDPの起動に、失敗しています。
セッションの設定の仕方が分からず、一旦中断します。

# /etc/init.d/xrdp start
 * Starting Remote Desktop Protocol server                                      xrdp-sesman is already running.
if it's not running, try removing /var/run/xrdp/xrdp-sesman.pid

 Starting Remote Desktop Protocol server                               [fail] 
 

解決できず

色々調べたのですが、ubuntu-desktopを使ってリモートデスクトップ接続することが、できませんでした。
結局、ubuntu-desktopがインストールされているところに、lxdeをインストールしました。
そして、下記の記事の手順で完成させました。
この時点では、英語版です。

https://qiita.com/FukuharaYohei/items/a6c1e1a2ba8d1285cfa5

リモートデスクトップから言語の設置を変えようとしましたが、言語設定のウィンドウが勝手に閉じてしまうため、設定できないのです。
コンテナイメージを作る段階で、日本語化しておく事が大事だと思いました。

日本語版に変更予定

日本語版に、変える予定です。
コンテナのコミットを繰り返して、使えるデスクトップにしていきたいと思っています。
一番最後にたどり着いたコンテナイメージは、ログアウトしてコンテナを停止しても、再びコンテナを起動して正常に、リモートデスクトップで接続できましたので、活用できると思います。

GNOMEでリモートデスクトップしたい

この記事を見つけました。
ubuntu-desktopのセッションの設定関連の情報を得る事が、できました。

https://yukituna.com/3651/

Ubuntu20.04向けの記事

https://gihyo.jp/admin/serial/01/ubuntu-recipe/0621

linux-vm-toolsは、古い

ネットの記事は時系列で見つけられない事があり、古い情報でも組み入れる事があります。
今回は、linux-vm-toolsがアーカイブになったことを下記の記事で知りました。
https://zenn.dev/ikuya/articles/0406accff9d76f

ubuntu18.04向けの記事

https://www.hiroom2.com/2018/04/28/ubuntu-1804-xrdp-gnome-ja/

ポート5900

こちらの記事も、参考になりました。
https://qiita.com/y-vectorfield/items/c5fd815a9cabe5c2d6d8

やっとリモートデスクトップできました。

https://twitter.com/masaru21/status/1517366489476739072

真っ黒の画面から灰色になるまでが長く、今まで待ちきれなくてプロセスを縦断させてしまったのかもしれないです。
最終的に、セッションの設定を見つける事ができました。
こちらの記事で、下記のコードを知りました。
https://yukituna.com/3651/

# ~/.xsessionrc に書き込む
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
export XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop

cat <<EOF > ~/.xsessionrc
export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
EOF

そして強制的に、ユーザーをログアウトさせました。
こちらの記事です。
https://www.orzs.tech/solve-black-screen-when-ubuntu-remote-desktop/

pkill gnome-session

私は、直接MacBookAirにubuntu20.04LTSをインストールした時に、ビデオドライバーの関係でエラーが出たので諦めました。
そのため、今回のDockerのubuntuのイメージも当初は、20.04を使っていました。
でも、リモートデスクトップのセッションが切れてしまう状況を見た時、20.04は無理かと思い、それ以降18.04で取り組んでいました。

下記の記事の中でDocker runの記述がありますが、書かれている通りのオプション設定の方が良いです。
https://genchan.net/it/virtualization/docker/13063/
時に、'/sbin/init'を実行した方が良いです。
XRDPの起動やリスタートの際に、助かります。
'-itd --privileged'のオプションも、コンテナの起動が続くようにする事、ホストにアクセスできるようにするためにも、設定した方が良いです。

XRDPの起動コマンド

service xrdp stop

service xrdp start

Xorg セッション

https://wiki.archlinux.jp/index.php/GNOME

書き換え方法
https://kimamani89.com/2020/07/29/【xwindow】xinitrcの記述と注意点/

sudo cp /etc/X11/xinit/xinitrc ~/.xinitrc
sudo chmod +w ~/.xinitrc
vim.tiny ~/.xinitrc

セッション設定に関連するファイル内容

~/.xinitrcの中身

#!/bin/sh
  
# /etc/X11/xinit/xinitrc
#
# global xinitrc file, used by all X sessions started by xinit (startx)

# invoke global X session script
. /etc/X11/Xsession

書き加えるようにネットで見つけた場所に、最初に書かれていた内容

export XDG_SESSION_DESKTOP=mate
export XDG_DATA_DIRS=/usr/share/mate:/usr/share/mate:/usr/local/share:/usr/share:/var/lib/snapd/desktop
export XDG_CONFIG_DIRS=/etc/xdg/xdg-mate:/etc/xdg

大ハマり

せっかくVNCでリモートデスクトップにログインできたのに、少し目を離したら画面ロックが働きパスワードの入力ができないと事態になってしまいました。
そのため、またコンテナから作り直しました。
といっても、一番新しいところでコミットしたので被害は、ほぼ無いです。

その後画面サイズを大きくしてVNC接続したいと試みたのですが、結局800×600なら起動できると結論を得ました。

vncserver -localhost no -geometry 800x600 -depth 24

XRDPの方は、未だに黒から灰色まで画面が進むのですが、灰色になったら接続が切れてしまいます。

VNCで行います

XRDPを使って接続しようとすると画面が、真っ黒になってしまいます。
同時にログインしていないので、色々調べていました。
その結果ビデオボード、グラフィックボードの関係で、私のぱそこんでは無理という結論に達しました。
GNOMEではなく、他のMATEなどでリモートデスクトップを構築すると良いです。
私も、時間を見つけて次回は、MATEなどで作りたいと思っています。
ちなにみ、今更新で書いているぱそこんは、同じMacBookAirにインストールしたubuntu18.04LTSで記事を書いています。
とても快適です。
MOZC UT2をインストールしたことも、大きく影響していると思います。

この続きは

通信環境が良くなる来月に入ってから、イメージのダウンロードやubuntuの更新をして試したいと思います。
とりあえず今回までの学びで、記事を公開したいと思います。

Discussion