Windows10→Ubuntu 18.04のリモートデスクトップ接続メモ

Linuxのデスクトップ画面を飛ばす方法には、他にもVNCがありますが、今回、敢えてリモートデスクトップ(RDP)を選択しました。Windows10→Ubuntu 18.04のRDP接続の設定方法はいろいろと見つかりますが、少々試行錯誤したこともあり、備忘録を残すことにします。

## Ubuntu 18.04サーバをインストール
Ubuntuのデスクトップ画面を飛ばすなら、最初から、デスクトップ用のインストーラを使えば良さそうですが、敢えて、サーバを入れて、その後、デスクトップのパッケージをインストールすることにします。このような面倒な手順を踏む理由は、デスクトップをインストールすると、`linux-generic-hwe-18.04`というHWE kernelが入るのですが、このkernelではRDPを実現するxrdpがうまく機能しないためです。

[Download Ubuntu Server](https://ubuntu.com/download/server)から[Ubuntu Server 18.04.4 LTS](https://ubuntu.com/download/server/thank-you?version=18.04.4&architecture=amd64)をダウンロードして、インストールします。インストール終了後、rebootします。

## デスクトップパッケージをインストール
結構時間が掛かります。

```
# apt update
# apt install -y ubuntu-desktop
# reboot
```

## 画面の解像度を変更
デフォルトの画面解像度が`800x600`のため、作業用に少し大きめの解像度にします。

**`Setting → Devices → Displays`**
<img width="500" alt="set-display-modify.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457466/65983f44-2227-93a6-7300-4b424f988a08.png"/>
わたしは解像度に`1280x960`を選択しました。

## 日本語環境の設定
デスクトップ画面の表示を英語から日本語に変更します。

**`Setting → Region & Language → Manage Installed Languages → Install / Remove Languages...`**
<img width="500" alt="select-japanese-modify.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457466/d610279a-912f-a840-df45-da993f23fc96.png"/>
上記で日本語をインストールし、ログインし直します。このログインし直しで、日本語の選択が可能になります。続いて、

**`Setting → Region & Language → Language`**
<img width="500" alt="set-japanese-modify.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457466/8db86c6d-f117-f5d6-07f0-4246641a0457.png"/>
上記で日本語を選択し、再度、ログインし直します。これで、日本語表示に変わります。この後、必要なら、ホームディレクトリにデフォルトで作成されたディレクトリを日本語に変更して下さい。

## NetworkManagerの設定
以下のnetplanのファイルの内容を変更します。

`/etc/netplan/50-cloud-init.yaml`

```yaml
    …
    version: 2
    renderer: NetworkManager ← 追記
```
この後、rebootすることで、認識されているネットワークインターフェースの設定機能が現れますので、固定アドレスにするなどの設定がし易くなります。
<img width="500" alt="set-network-modify.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457466/279b401b-3eda-f492-05b7-9f1c649ffa70.png"/>

## xrdpリモートデスクトップの設定
xrdpリモートデスクトップの設定に関しては以下の記事を参考にさせて頂きました。とても有益な情報ありがとうございます。

- [Ubuntu/WindowsからUbuntuにリモートデスクトップ接続する](https://linux.just4fun.biz/?Ubuntu/Windows%E3%81%8B%E3%82%89Ubuntu%E3%81%AB%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B)

まず、xrdpパッケージをインストールします。

```
# apt install -y xrdp
```

続いて、上記記事の**「Ubuntu側の設定」**で説明されているように、**リモートデスクトップ接続するユーザでUbuntuにログイン**して、以下を実行します。([u_setting.sh](https://linux.just4fun.biz/?plugin=attach&refer=Ubuntu%2FWindows%E3%81%8B%E3%82%89Ubuntu%E3%81%AB%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B&openfile=u_setting.sh)、[g_setting.sh](https://linux.just4fun.biz/?plugin=attach&refer=Ubuntu%2FWindows%E3%81%8B%E3%82%89Ubuntu%E3%81%AB%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B&openfile=g_setting.sh))

```
$ sh u_setting.sh
$ sh g_setting.sh
```

なお、上記記事で説明されているこれらシェルスクリプトの内容を念のため掲載します。

- `u_setting.sh`

```shell
cat <<EOF > ~/.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
export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
EOF
```

- `g_setting.sh`

```shell
sudo sed -e 's/^new_cursors=true/new_cursors=false/g' -i /etc/xrdp/xrdp.ini

cat <<EOF | \
sudo tee /etc/polkit-1/localauthority/50-local.d/xrdp-color-manager.pkla
[Netowrkmanager]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device
ResultAny=no
ResultInactive=no
ResultActive=yes
EOF

sudo systemctl restart xrdp
sudo systemctl restart polkit
```

## Windows10→Ubuntu 18.04にRDP接続
RDPを設定したUbuntuマシンのアドレスとユーザ名、パスワードを指定して接続します。なお、コンソールからログイン済み、または既にRDP接続している場合は、追加でRDP接続することはできません。

- xrdpログイン画面

Windows10のリモートデスクトップ接続から当該のUbuntu 18.04マシンに繋ぐと、以下のxrdpログイン画面が表示されます。
<img width="300" alt="login.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457466/1c37d956-100e-cd12-390d-622c9642e439.png"/>

- ログイン後の画面

<img width="700" alt="ubuntu-desktop.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457466/60f7b517-62e4-89a5-8b6e-9b439498de1c.png"/>

- `アクティビティ`を押下した時の画面

<img width="700" alt="ubuntu-desktop2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/457466/f4d34444-73d5-4766-0c61-52d4ff1d305f.png"/>

## 最後に
昨今の情勢から、テレワークされる方が急増していると思います。現在、テレワークを実現するための製品が各社から出ていますが、取り敢えず、簡単に試してみたい方にはオープンソースの[Apache Guacamole](https://guacamole.apache.org/)があります。なかなかの優れもので、Guacamoleサーバが踏み台の役割を果たし、接続先のマシンがRDP、VNC、SSHのいずれかに対応する場合、接続することができます。アクセスログの取得やセキュリティの要をGuacamoleサーバに(ある程度)集約することができます。**クライアントにはHTML5に対応したブラウザ(FirefoxやChrome等)だけあればよく**、ブラウザ上に接続先のデスクトップ画面が表示されます。なお、[商用サポート](https://guacamole.apache.org/support/#commercial-support)もあるそうです。

ただ、残念な点は、CTRLキーがブラウザのキーバインドとバッティングして、意図しない動作になることです。Emacs使いには辛いものがあります…

\# 最後は、タイトルから脱線して、Guacamoleの話になりました…

なお、[こちらの説明](https://guacamole.apache.org/releases/1.2.0/#granular-control-of-clipboard-and-file-transfer)によると、2020.06.28にリリースされたv1.2.0から、リモートマシンのデータをクリップボードを介して手元のマシンに転送する際、Guacamoleの管理者権限で制限できるようになりました。更に、ファイル転送については、通常、無効に設定されていますが、必要に応じて、ダウンロードまたはアップロードを個別に有効にできるようになりました。これにより、データのカジュアルコピーを防止できるようになり、企業や組織でテレワークを手軽に実現する手段として、Guacamoleを現実的な選択肢に考えられるようになったと思います。

## 主な変更履歴

- 2020.04.09  
「画面共有の設定」はVNCを使用する際に必要な作業であり、xrdpでリモートデスクトップ接続する場合は不要でしたので削除しました。失礼しました。
- 2020.08.09  
[Apache Guacamole v1.2.0](https://guacamole.apache.org/releases/1.2.0/)で追加されたセキュリティ機能について、「最後に」に追記しました。