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

:::note info
2023.02.03追記
WSL2のネイティブSystemdでxrdpを動作させる記事を書きました。
WSL2でSystemdが公式にサポートされるようになったため今後は以下の記事を参照してください。

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

# はじめに
前回、`WSL2`の`Ubuntu`に`genie`をインストールしたため、今回は`xrdp`をインストールしてリモートデスクトップでアクセスできるように設定していきます。

- 【前】[WSL2のUbuntuにリモートデスクトップ接続する。（その１：genieインストール）](https://qiita.com/sakai00kou/items/0b401faf6dd72ad63d87)

# Ubuntuデスクトップ環境のインストール
`Ubuntu 20.04`を起動して、`Ubuntu Desktop`をインストールします。

```shell:Ubuntu_Desktopのインストール
sudo apt update
sudo apt upgrade
sudo apt install ubuntu-desktop
```

# xrdpのインストール
xrdpインストール＆セットアップの大枠は[以前書いた以下の記事](https://qiita.com/sakai00kou/items/800b6d6c38845c715313)と大体同じですが、`WSL`環境の場合、一部手順が異なるため、今回は手作業でやっていきます。

- [UbuntuにAnsibleでxrdpをインストールする。](https://qiita.com/sakai00kou/items/800b6d6c38845c715313)

```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
```

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

```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_
```

```shell:startubuntu.shファイルの作成
sudo tee /etc/xrdp/startubuntu.sh << _EOF_ > /dev/null
#!/bin/sh
export GNOME_SHELL_SESSION_MODE=ubuntu
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
exec /etc/xrdp/startwm.sh
_EOF_
```

```shell:startubuntu.shへの権限付与
sudo chmod +x /etc/xrdp/startubuntu.sh
```

# xrdp待ち受けポート番号の変更
`WSL2`で起動している仮想マシンでは、個別のアドレスを持っているため、`ip a`等のコマンドで確認できるアドレスに対してリモートデスクトップ接続を行えば接続できますが、このアドレスはPCを再起動すると変更されてしまいます。

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

今回の環境では`Windows 10 Home`の環境となることから、`Windows`ホスト側で**リモートデスクトップサービスが動かない**のでデフォルトのポートのままでも問題ありませんが、**リモートデスクトップサービス**が動作する`Windows 10 Pro`では、`localhost`によるアクセスを行うとポートフォワードできずに失敗するため、`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`と呼ばれるアプリケーション起動用のバーが表示されますが、今回の環境では表示されないようなので、`gnome-tweak-tool`をインストールして、`Dock`を使用できるようにします。

```shell:gnome-tweak-toolのインストールとDock有効化
sudo apt install gnome-tweak-tool
gsettings set org.gnome.shell enabled-extensions "['ubuntu-dock@ubuntu.com']"
```

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

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

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

```shell:タイムゾーンの変更（対話式）
sudo dpkg-reconfigure tzdata
```

```shell:日本語マニュアルのインストール
sudo apt install manpages-ja manpages-ja-dev
```

```shell:日本語入力mozcインストール
sudo apt install ibus-mozc
```

```shell:キーボード割り当て変更
sudo localectl set-keymap jp106
```

入力ソースの追加は、各ユーザで実行するため、`sudo`無しで以下実行します。

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

## 不足している日本語パッケージのインストール
`Ubuntu 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 gnome-getting-started-docs-ja
sudo apt -y install fonts-noto-cjk-extra
sudo apt -y install libreoffice-help-ja
```

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

[前回の記事の通り](https://qiita.com/sakai00kou/items/0b401faf6dd72ad63d87)、`genie`が起動しているようであれば`systemctl`コマンドが使えるはずなので、`systemctl`で再起動します。

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

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

# WSL2の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)

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

![capture_18072021_235824.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/7fa6f4fd-cb08-d3ca-f2f5-44fd04cf9464.jpeg)


# おわりに
今回は`Ubuntu Desktop`をインストールする方法で行いましたが、`genie`により`systemd`が使えるようになっているので、他のデスクトップ環境を使用する場合でも、通常の`Ubuntu`にインストールするのと同じような感覚で作業できるようになっているかと思います。