Windows10のHomeエディションを使っている場合には、リモートデスクトップを有効にして外部のホストからRDP接続することができません。ところが、Windows10のVirtualBoxの仮想マシンとしてインストールしたUbuntuデスクトップにRDP接続して使用することはできます。
どれだけ需要があるかわからないのですが、そのための方法をまとめてみたいと思います。
VirtualBoxとUbuntuのインストール
既にWindows上にVirtualBoxがインストールされていて、VirtualBoxの仮想マシンとしてUbuntu Desktop 20.04 LTSがインストールされているものとします。
xrdpのインストール
まずは、Ubuntuにxrdpをインストールします。
$ sudo apt install -y xrdp
Ubuntuに固定IPアドレス設定
そのためにVirtualBoxにインストールするUbuntuには、ネットワーク設定でアダプター1は通常のNATに設定して、アダプター2をホストオンリーアダプターにして、Ubuntu側で固定IPアドレスを設定しておきます。ここでは例として、「192.168.56.101」を設定しておきます。このIPアドレスに対して外部から接続することになります。
Windows側にポート転送を設定
外部からWindows側で受け取ったRDPの接続要求を、Ubuntu側にポート転送するように設定します。このためには、管理者モードでPowerShellを起動して以下のコマンドを実行します。
netsh interface portproxy add v4tov4 listenport=3389 connectport=3389 connectaddress=192.168.56.101
ここで、「connectaddress」として先に設定した固定IPアドレスを設定しておきます。これでWindows10で受け取ったRDP用の3389/tcpのパケットが192.168.56.101に転送されるようになります。
実際に使う場合には、Windows10のWSL2で/usr/local/binディレクトリーに例えば”port-forward.sh”としてスクリプトを作成しておきます。
$ sudo vi /usr/local/bin/port-forward.sh
netsh.exe interface portproxy delete v4tov3 listenport=3389
netsh.exe interface portproxy add v4tov4 listenport=3389 connectport=3389 connectaddress=192.168.56.101
exit 0
$ sudo chmod +x /usr/local/bin/port-forward.sh
Windows10側にバッチ・スクリプトを作成
上記、参考に掲載した「【メモ】WSL2上のsshサーバに外部から接続する」の場合と同様に、Windows10側にバッチ・スクリプトを作成します。作成する場所は、%USERPROFILE%として 「port-forward.bat」という名前で作成しています。
WSL –exec bash /usr/local/bin/port-forward.sh
タスクスケジューラの設定
上記、参考に掲載した「【メモ】WSL2上のsshサーバに外部から接続する」の場合と同様に、タスクスケジューラを設定して先に作成したポートフォワード用のスクリプトを呼び出すようにしておきます。具体的な設定内容については、参考ページと同じになります。
RDPクライアントからの接続
設定が完了したら、一旦Windows10側を再起動して設定を反映しておきます。
これで、RDPクライアントから接続したいところですが、Windows10側のVirtualBoxにインストールしたUbuntuを起動していませんので、Windows10にログインしてVirtualBoxを起動してからUbuntu仮想マシンも起動しておきます。
これで外部から接続する準備ができましたからRDPクライアントから接続してみます。
ところが、このままでは画面のように「Authentication Required」として認証が要求されてパスワードを入力する必要があります。
Authentication Required画面の消去
上記の認証画面を消す方法ですが、GitHubにあるマイクロソフトのリポジトリー「microsoft/linux-vm-tools」では次のような方法が使用されています。
https://github.com/microsoft/linux-vm-tools/blob/master/ubuntu/18.04/install.sh#L89
# Configure the policy xrdp session cat > /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla <<EOF [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
そこで、上記の内容のファイルを/etc/polkit-1/localauthority/50-local.dディレクトリーに作成します。このlocalauthorityディレクトリーに入るにはroot権限が必要ですからsudo -iしてからファイルを作成しておきます。
準備ができたら一旦Ubuntuを再起動します。
無事に面倒な認証画面が表示されることもなく、RDPクライアントでUbuntuのデスクトップを使用できるようになりました。
実は、何がしたかったかと言うと。普段、Macで作業をしているのですが、事情により同時に起動しているWindows側を使うこともあって、一々画面を切り替えるのが面倒なので(せめて)Ubuntuの画面だけでも同時に表示して使おうとしたのでした。