WSL2のUbuntu 22.04.3 LTSにリモートデスクトップ接続する。（その２’：xrdpインストール）

# はじめに
以前「[WSL2のUbuntuにリモートデスクトップ接続する。（その２：xrdpインストール）](https://qiita.com/sakai00kou/items/e2523b6c195693e8f184)」で`WSL2`＋`Ubuntu 20.04`＋`genie`＋`xrdp`の組み合わせで`Windows`から`RDP`接続するやり方を紹介しましたが、`WSL2`＋`Ubuntu 22.04.3`（ネイティブSystemd）＋`xrdp`の組み合わせでやってみたところ、いくつか前回の手順から変更しないとできなかったので、若干タイトルを変更して改めてまとめてみようと思います。

- 【前】[WSL2をインストールしてネイティブなSystemdを使う。](https://qiita.com/sakai00kou/items/212f037600e202e07690)
- 【次】[WSL2のUbuntu 22.04.3 LTSにリモートデスクトップ接続する。（その３：ブリッジ接続）](https://qiita.com/sakai00kou/items/cc35094b9bf2bfe616bc)

以下は`WSL2`＋`Ubuntu 20.04`＋`genie`＋`xrdp`で紹介した以前の記事。
- 以前の記事
    - [WSL2のUbuntuにリモートデスクトップ接続する。（その１：genieインストール）](https://qiita.com/sakai00kou/items/0b401faf6dd72ad63d87)
    - [WSL2のUbuntuにリモートデスクトップ接続する。（その２：xrdpインストール）](https://qiita.com/sakai00kou/items/e2523b6c195693e8f184)

# 環境
以下環境のマシンにインストールします。

|リソース|スペック|
|:--|:--|
|CPU|AMD Ryzen 7 3700U 2.30 GHz|
|メモリ|16.0 GB|

OSは前回から変更となっています。

|アプリケーション|バージョン|
|:--|:--|
|Windows 11 Pro|23H2|
|Ubuntu|22.04.3 LTS|

# genieとネイティブSystemdの違い
以前の記事でも少し紹介しましたが、`genie`はボトルという疑似コンテナのような環境を構成することで`Systemd`を`PID 1`で動作できるようにした仕組みです。

`WSL`は今まで`Systemd`をネイティブで実行することができなかったため`genie`等を挟んで実行する必要がありましたが、`WSL`自体で`Systemd`を実行できるようになったことから通常の`Linux`と同等に使うことができるようになったのが一番の違いかと思います。

# Ubuntuデスクトップ環境のインストール
`Ubuntu 22.04.3`を起動して、`Ubuntu Desktop`をインストールしますが`acpid`と`acpi-support`の更新を抑止しないと`ubuntu-desktop`インストール時に「**Transport endpoint is not connected**」のようなエラーが出続けてインストールできない状態となるため、抑止してインストールします。

```shell:Ubuntuパッケージのアップグレード
sudo apt update
sudo apt upgrade
```

```shell:パッケージ更新の抑止とUbuntu Desktopのインストール
sudo apt-mark hold acpid acpi-support
sudo apt install ubuntu-desktop
```

# xrdpのインストール
`xrdp`は普通にインストールします。

```shell:xrdpのインストール
sudo apt install xrdp
```

# xrdpインストール後のセットアップ
`Ubuntu Desktop`で`xrdp`を使用する場合、いくつか修正する必要があるため、ファイルの修正と必要ファイルの作成を行っていきます。

- クリップボード用ドライブの名前の変更

```shell:/etc/xrdp/sesman.iniファイルの修正
sudo sed -i -e '/FuseMountName/s/thinclient_drives/shared-drives/g' /etc/xrdp/sesman.ini
```

ログイン確認してみた限り、今回は`Xwrapper.config`を修正しなくても良さそうではありますが、一応変更しておきます。

- 一般ユーザでのX起動を許可

```shell:/etc/X11/Xwrapper.configの修正
sudo sed -i -e '/allowed_users/s/console/anybody/g' /etc/X11/Xwrapper.config
```

メッセージ抑止は前回と同様設定を行っておきます。

- PolKit関連メッセージの抑止

```shell:45-allow-colord.pklaファイルの作成
sudo tee /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla << _EOF_ > /dev/null
[Allow Colord all Users]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
ResultAny=no
ResultInactive=no
ResultActive=yes
_EOF_
```

- リポジトリ更新のポップアップメッセージの抑止

```shell:46-allow-update-repo.pklaファイルの作成
sudo tee /etc/polkit-1/localauthority/50-local.d/46-allow-update-repo.pkla << _EOF_ > /dev/null
[Allow Package Management all Users]
Identity=unix-user:*
Action=org.freedesktop.packagekit.system-sources-refresh
ResultAny=yes
ResultInactive=yes
ResultActive=yes
_EOF_
```

前回作成していた`startubuntu.sh`は、今回はうまく行かなかったので、後述の`.xsessionrc`で実行するように変更しています。

# xrdp待ち受けポート番号の変更
`WSL2`で起動している仮想マシンでは、`WSL2`を動かしている`Windows`ホストと仮想マシン間のみでやり取りするための個別のネットワーク（以下図の内部ネットワーク）を持っているため、`ip a`等のコマンドで確認できるアドレスに対して`Windows`ホスト`からリモートデスクトップ接続を行えば接続できますが、このアドレスはPCを再起動すると変更されてしまいます。

また`WSL2`では、ホスト側となる`Windows`で、`WSL2`の仮想マシンで待ち受けているポートに対してポートフォワードする機能があり、デフォルトでは`WSL2`に転送するようになっているため、ホスト側の`Windows`で`localhost`を指定してリモートデスクトップアクセスすると、`WSL2`で動作している`xrdp`にアクセスするような動作となります。

![port_forwarding.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/13bf9e00-4473-35e8-7b33-7c0ff5e5d0c0.png)

今回の環境は`Windows 11 Pro`の環境となり、`Windows`ホスト側でもリモートデスクトップサービスを動作させていることから、使用ポートが被ってしまうため、`xrdp`の待ち受けポートを変更するようにします。

変更するポート番号は`RDP`が動作する`3389`以外なら何でもいいですが、ウェルノウンポート以外のポートにするのが望ましいので、今回は`3389`に`10000`を加えた`13389`にします。

```shell:xrdp待ち受けポート番号の変更
sudo sed -i -e '/^port/s/3389/13389/g' /etc/xrdp/xrdp.ini
```

# Dock環境表示の設定
`Ubuntu`を`Ubuntu Desktop`環境で使うと、画面左に`Dock`と呼ばれるアプリケーション起動用のバーが表示されますが、`xrdp`ではそのままでは表示されません。

今回は各ユーザのホームディレクトリに`.xsessionrc`を作成して、`Dock`表示用の設定を行うことで`Dock`が表示できるようなので、作成します。

今回は後述する事情で新たにリモートデスクトップ接続用のユーザを作成するので、ユーザ作成時に`.xsessionrc`ファイルが展開されるようスケルトンディレクトリにファイルを作成しておきます。

```shell:Dock有効化用の.xsessionrcファイル作成
sudo tee /etc/skel/.xsessionrc << _EOF_ > /dev/null
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
_EOF_
```

# Ubuntuの日本語化
`WSL2`の`Ubuntu`は日本語化されていないため、日本語化しておきます。

```shell:日本語言語パックのインストール
sudo apt -y install language-pack-gnome-ja-base
sudo apt -y install language-pack-ja
```

```shell:ロケールの変更
sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
```

```shell:キーマップの変更
sudo localectl set-x11-keymap jp
```

入力ソースの追加は、各ユーザで実行するため、後ほどリモートデスクトップで接続後に以下実行します。

```shell:入力ソースの追加
gsettings set org.gnome.desktop.input-sources sources "[('ibus', 'mozc-jp'), ('xkb', 'jp')]"
```

## 不足している日本語パッケージのインストール
`Ubuntu Desktop`の画面から「**設定**」→「**地域と言語**」→「**インストールされている言語の管理**」をクリックした際に、足りないと言われるパッケージを予めインストールしておきます。

```shell:不足している日本語パッケージのインストール
sudo apt -y install task-japanese-gnome-desktop
sudo apt -y install language-pack-gnome-ja
sudo apt -y install gnome-user-docs-ja
sudo apt -y install libreoffice-l10n-ja
sudo apt -y install firefox-locale-ja
sudo apt -y install mozc-utils-gui
sudo apt -y install thunderbird-locale-ja
sudo apt -y install fonts-noto-cjk-extra
sudo apt -y install libreoffice-help-ja
```

# xrdpの再起動
この時点で`xrdp`が起動しているので、再起動して設定を反映させます。

```shell:xrdpの再起動
sudo systemctl restart xrdp
```

# デフォルトユーザでログインできないことの回避策
前回`WSL2`に`xrdp`をインストールした際にはデフォルトのユーザでログインできたはずですが、今回はデフォルトユーザでログインしようとすると、画面が落ちてしまいログインできませんでした。

色々と調査したもののどうしてもデフォルトユーザではログインできなかったため、他の回避策を紹介します。

## リモートデスクトップ接続用ユーザの作成
コマンドで一般ユーザを作成すれば、作成した一般ユーザにはログインできるので、コマンドで一般ユーザを作成します。

```shell:一般ユーザの作成（rdpuserという名前のユーザを作成した場合）
sudo adduser rdpuser
```

パスワード等を設定すればOKです。

```shell:パスワード等の入力
Adding user `rdpuser' ...
Adding new group `rdpuser' (1001) ...
Adding new user `rdpuser' (1001) with group `rdpuser' ...
Creating home directory `/home/rdpuser' ...
Copying files from `/etc/skel' ...
New password: [任意のパスワードを入力]
Retype new password: [任意のパスワードを入力]
passwd: password updated successfully
Changing the user information for rdsuser
Enter the new value, or press ENTER for the default
        Full Name []: [そのままEnterでOK]
        Room Number []: [そのままEnterでOK]
        Work Phone []: [そのままEnterでOK]
        Home Phone []: [そのままEnterでOK]
        Other []: [そのままEnterでOK]
Is the information correct? [Y/n] y
```

## rootユーザのパスワードを設定する。（非推奨）
こちらの方法はroot権限でログインすることになるため、あまり推奨できませんが、もう一つの方法としてはデフォルトで設定されていない`root`ユーザのパスワードを設定してリモートデスクトップ接続でログインできるようにする方法です。

`passwd`コマンドで設定しましょう。

```shell:rootユーザのパスワード設定
sudo passwd
```

# WSL2のUbuntuへのリモートデスクトップアクセス
先ほど記載した通り、`WSL2`の`Ubuntu`に割り当てられているIPアドレスは再起動ごとに変わってしまうため、`localhost`を指定して`Ubuntu`にポートフォワーディングさせます。

`Windows`ホスト側の「**リモートデスクトップ接続**」を起動し、`localhost`でポート転送して接続します。

また、先ほど`xrdp`側のポート番号を変更しているため、後ろに`13389`を加えてアクセスします。

![capture_18072021_235051.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/f3624794-ea5a-5d73-ebd2-f1fc648c530d.jpeg)

ユーザ名、パスワードを入力後、以下の様な画面が表示されれば完了です。

![Monosnap_20240203_174242.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/60c8d688-babb-f983-617a-0ddc0d39687a.png)

# おわりに
今回は`WSL2`で正式サポートされた、ネイティブな`Systemd`で`xrdp`接続を行ってみましたが、`Ubuntu`バージョンの違いなのか、ネイティブSystemdになったことの影響なのか、やっていることは前回と同じでも手順が思った以上に変わりました。

今回、`Windows`が`Windows 10 Home`から`Windows 11 Pro`になったことで、`Home`でできなかったブリッジ接続ができるようになったので、次回は`Ubuntu`にブリッジ接続して、外部のクライアントから直接接続できるようにしてみたいと思います。