docker Ubuntuイメージで日本語環境リモート接続
DockerはOSは含まれずソフトウェアのような使い方だと思い、DockerでUbuntuが使えることを知り驚きました。
私は、こちらの記事を参考にしました。
docker pull 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をインストールしました。
noVNCを使いたかったので
noVNCを試したかったのですが、VNCでは接続できない様です。
そのためXRDPで接速することにしました。
こちらの記事を見たら、私も諦めました。
すでに Dockerのイメージがあった
そして、検索している中で、見つけました。
あっという間に接続できました。
正確には、色々とインストールしている時間が1時間くらいあります。
でも、二日かかってVNCで接続しようと試行錯誤していたことを振り返ると、とても早く実現できました。
今回できたコンテナ二つを同時に使う形に、なります。
rootでログインできます。
パスワードは、今回参考にした流れで設定したものです。
こちらの記事で、一部補足です。
私の場合は、「6. 日本語化モジュールのインストール(2/2)」の工程は、行いませんでした。
理由は、このコマンドがエラーになったからです。
winpty docker container exec -it ubuntu-xrdp bash
それからリモートディスクトップのクライアントでログインした時に、エラーが出ます。
そのことが、ここに書かれていました。
私は、今回見つけた記事の手順を行えるように、ファイルを作りました。
コンテナの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
ちなみにプライベートでプッシュしたリポジトリを公開にボタン一つで変更できます。
また、その逆もできます。
シェルスクリプトで自動化しようとしたら
この記事のコマンド入力の部分を自動化しようとしましたが、できませんでした。
パスワードまで入力してコミットしたものを、Docker Hubで、公開します。
私も、このイメージを保存しておくことで、繰り返し作る手間を省きたいと思います。
私が参考にした記事で実際と違うところ
apt-get install xrdp
を実行した時、タイムゾーンを聞かれました。
そのため、8Asiaを選択した後79Tokyoを選択しました。
apt-get install lxde
を実行した時、ディスプレイマネージャーの選択が出ました。
2. lightdmを選択しました。
最新のDockerのUbuntuイメージを日本語化する記事を発見
こちらの記事は、Dockerfileの書き方も有るので、勉強になります。
SSH接続する参考記事
IPアドレスの確認
docker inspect <コンテナID>
で確認できます。
DockerのUbuntuは。sudo
が使えません。
必要に応じて、sudo
を使いたい場合は、インストールしてください。
rootでログインしているため、@sudo`は、使わないと思いますが、パッケージのインストールのコマンドをコピペするときは、便利かもしれないです。
#sudo インストール
apt-get install sudo
#ユーザー追加
adduser user sudo
日本人向けの日本語環境のUbuntuコンテナイメージを見つけました。
こちらの記事を読み、ショックを受けました。
すでに、理想とするイメージが、ありました。
ただ上記のイメージを試しましたが、うまく使うことができませんでした。
日本語変換の本当のセットを自動化
下記の記事で、ibus-mozcの正しい?インストール方法を知りました。
この一般的な方法では、日本語の辞書が不十分ということのようです。
apt-get install ibus-mozc
下記の記事を参考にしました
Mozc UT2の辞書がすごい
Linuxの日本語入力は、使い辛い点があります。
変換される言葉に限りがあるというか、カタカタの外来語、英単語など変換したいときに不便です。
そうした思いを解決してくれるのが、Mozc UT2です。
でも、Mozc UT2は、ファイルをダウンロードして、自分でビルドする必要があります。
ibus-mozcを先にインストールしてから
sudo apt install -y ibus-mozc
上記のコマンドを実行してから、Mozc UT2を試してください。
それからsudoコマンドも、必要です。
Mozc UT2は、Ubuntu20.10では、エラーになります。
私は、Mozc UT2がエラーになり、インストールできませんでした。
調べていたら、こちらの記事を見つけました。
コマンドでファイルをダウンロードするために、必要なもの
日本語環境と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の接続は、こちらの記事の通りです。
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環境が使えるようにコンテナを作ってからコンテナをコミットして新しくコンテナを作ろうとしても、エラーになります。
そのため、先にXRDPで環境を作る流れに変えました。
作ったリモートデスクトップが動かない
こちらの記事を読んで作ったリモートデスクトップのコンテナが、使えなくなりました。理由は、私がDockerdesktopで記録されているボリュームを整理するために削除したことが、原因と思います。
そのため、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を再勉強
上記の記事をはじめ、様々な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
この呪文を知りたくて
-u $(id -u):$(id -g) \
この部分を知りたくで、UIDとGIDについて調べていたのです。
環境変数の設定の仕組みを知りましたので、私も活用したいと思います。
idのところを直接数値に置き換えると、エラーになります。
また上記のDockerのコマンドを実行すると、ダウンロードをしてくるのですね。
私は、前もってdocker pull yama07/docker-ubuntu-lxde
を実行したのです。
でも、上記のコマンドを実行したら、ダウンロードが始まりました。
この記事も、参考になります。
今回見つけたリモートデスクトップを使って見た
このような状況になり、エラーとなりました。
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を使う記事を見つけました。
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をインストールしました。
そして、下記の記事の手順で完成させました。
この時点では、英語版です。
リモートデスクトップから言語の設置を変えようとしましたが、言語設定のウィンドウが勝手に閉じてしまうため、設定できないのです。
コンテナイメージを作る段階で、日本語化しておく事が大事だと思いました。
日本語版に変更予定
日本語版に、変える予定です。
コンテナのコミットを繰り返して、使えるデスクトップにしていきたいと思っています。
一番最後にたどり着いたコンテナイメージは、ログアウトしてコンテナを停止しても、再びコンテナを起動して正常に、リモートデスクトップで接続できましたので、活用できると思います。
GNOMEでリモートデスクトップしたい
この記事を見つけました。
ubuntu-desktopのセッションの設定関連の情報を得る事が、できました。
Ubuntu20.04向けの記事
linux-vm-toolsは、古い
ネットの記事は時系列で見つけられない事があり、古い情報でも組み入れる事があります。
今回は、linux-vm-toolsがアーカイブになったことを下記の記事で知りました。
ubuntu18.04向けの記事
ポート5900
こちらの記事も、参考になりました。
やっとリモートデスクトップできました。
真っ黒の画面から灰色になるまでが長く、今まで待ちきれなくてプロセスを縦断させてしまったのかもしれないです。
最終的に、セッションの設定を見つける事ができました。
こちらの記事で、下記のコードを知りました。
# ~/.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
そして強制的に、ユーザーをログアウトさせました。
こちらの記事です。
pkill gnome-session
私は、直接MacBookAirにubuntu20.04LTSをインストールした時に、ビデオドライバーの関係でエラーが出たので諦めました。
そのため、今回のDockerのubuntuのイメージも当初は、20.04を使っていました。
でも、リモートデスクトップのセッションが切れてしまう状況を見た時、20.04は無理かと思い、それ以降18.04で取り組んでいました。
下記の記事の中でDocker runの記述がありますが、書かれている通りのオプション設定の方が良いです。
時に、'/sbin/init'を実行した方が良いです。XRDPの起動やリスタートの際に、助かります。
'-itd --privileged'のオプションも、コンテナの起動が続くようにする事、ホストにアクセスできるようにするためにも、設定した方が良いです。
XRDPの起動コマンド
service xrdp stop
service xrdp start
Xorg セッション
書き換え方法
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の更新をして試したいと思います。
とりあえず今回までの学びで、記事を公開したいと思います。
Author And Source
この問題について(docker Ubuntuイメージで日本語環境リモート接続), 我々は、より多くの情報をここで見つけました https://zenn.dev/masaru21/articles/e502c89d6593d5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol