投稿

Synology NAS 上の Ubuntu Docker で XRDP をセットアップする

VMM (仮想マシン マネージャー) 機能をサポートするエントリー レベルの Synology NAS を購入した場合は、VMM に Windows または Ubuntu をインストールしてもよかったかもしれません。ただし、インストールに時間がかかり、パフォーマンスが低下することにがっかりするかもしれません。

そのような人にとって、GUI インターフェイスで OS を有効にするための Ubuntu Docker に XRDP をインストールするのは最良の選択肢かもしれません。

2つの方法を説明します。 1 つは、Ubuntu VM の Docker に XRDP をインストールすることです。もう 1 つは、Synology NAS の Docker アプリに Ubuntu コンテナを作成し、XRDP を通じて外部からアクセスできるように設定することです。

Ubuntu VM 上の XRDP Docker コンテナ

Dockerイメージを構築してコンテナを実行する

以下の情報をもとにDockerイメージを作成していきます。以下の内容のDockerfileを作成しましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
FROM ubuntu:20.04

RUN apt update && DEBIAN_FRONTEND=noninteractive apt install -y lubuntu-desktop

RUN rm /run/reboot-required*

RUN useradd -m testuser -p $(openssl passwd 1234)
RUN usermod -aG sudo testuser

RUN apt install -y xrdp
RUN adduser xrdp ssl-cert

RUN sed -i '3 a echo "\
export GNOME_SHELL_SESSION_MODE=Lubuntu\n\
export XDG_SESSION_TYPE=x11\n\
export XDG_CURRENT_DESKTOP=LXQt\n\
export XDG_CONFIG_DIRS=/etc/xdg/xdg-Lubuntu:/etc/xdg\n\
" > ~/.xsessionrc' /etc/xrdp/startwm.sh

EXPOSE 3389

CMD service xrdp start ; bash

次に、作成したDockerfileを元にDockerイメージを構築していきます。次に、作成したイメージを使用してコンテナを作成して実行します。

1
2
3
4
5
6
7
8
9
# change permission of docker.sock if there is permission error when docker build
sudo chmod 666 /var/run/docker.sock;sudo chown -R ${USER}:users /var/run/docker.sock

# build docker image from Dockerfile
docker build -f Dockerfile -t img-xrdp-lubuntu .

# create docker container from image 
docker run -d -it --name cond-xrdp-lubuntu -p 3389:3389 img-xrdp-lubuntu

VirtualBox のポート転送設定

仮想マシンの外部から Ubuntu VM の Docker コンテナに XRDP にアクセスする場合は、Ubuntu VM でポート転送を設定する必要があります。 RDP プロトコルを使用してポート43389に接続しようとすると、これは Ubuntu VM 内のポート3389にマッピングされます。

XRDP 接続用の VirtualBox ポート転送設定 XRDP 接続用の VirtualBox ポート転送設定

XRDPリモートアクセス

次に、リモート デスクトップ接続を通じてアドレス127.0.0.1:43389に接続します。

リモートデスクトップ接続 リモートデスクトップ接続

その後、XRDP ログイン ウィンドウが開きます。以下にユーザー名パスワードを入力します。

Ubuntu XRDP ログイン画面 Ubuntu XRDP ログイン画面

  • username : testuser
  • password : 1234

Synology NAS 上の XRDP Docker コンテナ

Docker パッケージのインストールとコンテナーのポート設定

Synology NAS GUI にアクセスします。次に、パッケージ センターでDockerを検索し、インストールします。

Synology NAS GUI - パッケージ センター - Docker Synology NAS GUI - パッケージ センター - Docker

ubuntu:20.04Docker イメージをダウンロードし、そのイメージに基づいてコンテナーを作成しました。また、コンテナのポート設定では、ssh 用のポート 422 と XRDP 用のポート 43389 が開かれました。

Synology NAS GUI - Ubuntu コンテナ - ポート設定 Synology NAS GUI - Ubuntu コンテナ - ポート設定

ubuntu SSH および XRDP パッケージをインストールする

以下のコマンドに従ってopenssh-serverをインストールします。 ssh は、後で Ubuntu Docker コンテナにリモートでアクセスするときに役立ちます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apt update
apt install openssh-server
apt install -y net-tools
apt install -y vim

vim /etc/ssh/sshd_config
# ----------------------------------------------
# enable `PermitRootLogin` and set it to `yes`
PermitRootLogin yes
# ----------------------------------------------

passwd root 
# ----------------------------------------------
# it will be ssh login password, i have set it as `0000`
0000
# ----------------------------------------------

service ssh start

次に、以下のコマンドに従って XRDP のパッケージをインストールします。以下のコマンドに従って XRDP をインストールするときに、おそらく多くのエラー メッセージが表示されるでしょう。これは、lubuntu-desktopのインストール中のサウンドやUSBなどのハードウェア依存関係に関連するエラーです。エラー メッセージを無視して続行します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apt update && DEBIAN_FRONTEND=noninteractive apt install -y lubuntu-desktop
rm /run/reboot-required*
useradd -m testuser -p $(openssl passwd 1234)
usermod -aG sudo testuser
apt install -y xrdp
adduser xrdp ssl-cert

sed -i '3 a echo "\
export GNOME_SHELL_SESSION_MODE=Lubuntu\n\
export XDG_SESSION_TYPE=x11\n\
export XDG_CURRENT_DESKTOP=LXQt\n\
export XDG_CONFIG_DIRS=/etc/xdg/xdg-Lubuntu:/etc/xdg\n\
" > ~/.xsessionrc' /etc/xrdp/startwm.sh

service xrdp start

XRDPリモートアクセス

Synology NAS に割り当てられた IP アドレスを使用して XRDP に接続し、上記で設定した43389ポートに接続します。

MobaXterm - RDP セッション MobaXterm - RDP セッション

その後、XRDP ログイン ウィンドウが開きます。以下にユーザー名パスワードを入力します。

Ubuntu XRDP ログイン画面 Ubuntu XRDP ログイン画面

  • username : testuser
  • password : 1234

Docker コンテナを停止して再起動した場合は、ssh サービスと xrdp サービスを再度実行する必要があります。

正確な理由はわかりませんが、xrdp サービスが開始されると、xrdp が正常に動作するには遅延後に再起動する必要がありました。そして、2回目のxrdp接続から、GUIに下部のメニューバーが表示されました。以下の内容を bash スクリプトとして保存して使用できます。

1
2
3
4
5
6
7
8
9
10
11
echo "start ssh.."
service ssh start

echo "start xrdp.."
rm /var/run/xrdp/xrdp-sesman.pid
service xrdp start
echo "sleep 10 sec.. "
sleep 10
echo "restart xrdp"
service xrdp restart

参照

  • https://youtu.be/0rl5145aEMk?si=aoO3eZyDLPnmCfr

この記事は著作権者のライセンス:LICENSE_NAMEに従います。