Mac mini(M1)でもWindowsからRDPでリモートデスクトップしたい！

# 概要
MacではVNCがビルトインされているので、VNCでリモートデスクトップを行うのに特に困ることはないのですが、どうしてもVNCクライアントを入れるのが嫌だったので、xrdpを使って対応させにいきました。
すでにIntel版のMacでxrdpをインストールする方法は世に出ています。
その[手順](https://ryancreecy.com/2019/10/29/xrdp-on-mac.html
)をベースにApple Silicon(arm64)向けに変えた手順で紹介します。
未確認ですが、M1チップのMacbook Air/Proでも同じ手順で動作すると思います。

# 検証環境
Mac mini(M1)
--> Mem 16GB SSD 512GB
macOS Big Sur Version 11.1

# 手順
## brewの準備
まずはbrewを入れましょう
既に入っている方はスキップしてください
https://brew.sh/index_ja

## OpenSSLのインストール
xrdpをビルドするために必要なOpenSSLをインストールしましょう
export系コマンドはバージョンやパスによって異なると思うので、installした後に出てくるメッセージをよく確認してください。
```
$ brew install openssl
$ echo 'export PATH="/opt/homebrew/opt/openssl@1.1/bin:$PATH"' >> ~/.zshrc
$ export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
$ export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"
```

## ビルド系のツールをインストール
```
$ brew install automake
$ brew install libtool
$ brew install pkgconfig
$ brew install nasm
```

## XQuartzのインストール
通常のXQuartzをインストールするとのちのビルドでarm64がなくコケルので、githubからαバージョンのイメージをダウンロードしてインストールしましょう
自分がダウンロードしたバージョンは、XQuartz-2.8.0_alpha2でした。おそらくそれ以降のバージョンであれば、大丈夫だと思います。
https://github.com/XQuartz/XQuartz/releases

ダウンロードしたら、パッケージをインストールしてください。
インストールしたら一度ログアウトして、ログインしなおしてください。

## VNCの有効化
バックエンドにVNCを使って、RDPを行うのでVNCをシステム環境設定から有効にします。

システム環境設定 -> 共有 -> 画面共有にチェック
その中のコンピュータの設定を開いて、
ほかのユーザが画面操作の権限を要求することを許可
VNC使用者が画面を操作することを許可にチェックを入れてください。
その横にあるパスワード欄にパスワードを適当に決めて入力してください。のちに使用します。

## xrdpのダウンロード
https://github.com/neutrinolabs/xrdp/releases

リリースから最新のアーカイブファイルを落として解凍してください。
一応以下にコマンド例

```
$ tar -xvf xrdp-0.9.15.tar.gz
$ rm xrdp-0.9.15.tar.gz
```

## xrdpのビルド&インストール
たぶんこれでうまくいくはずです。。。
PKG_CONFIG_PATH=の部分は、環境やバージョンによって違う可能性があるので、opensslをインストールしたときのパスを要チェックです。
```
$ cd xrdp-0.9.15/
$ ./bootstrap
$ ./configure PKG_CONFIG_PATH=/opt/homebrew/opt/openssl@1.1/lib/pkgconfig
$ make
$ sudo make install
```

## Configを用意する
適当なテキストエディタで、/etc/xrdp/xrdp.iniを開いて編集しましょう。
configの作例を載せておきます。こだわりのない人はこれで大丈夫だと思います。
```
$ sudo vim /etc/xrdp/xrdp.ini
```

listenするアドレスとポート、使用するセッションの形式を弄れば後はデフォルトのままで大丈夫です。

```
[Globals]
; xrdp.ini file version number
ini_version=1

; fork a new process for each incoming connection
fork=true

; ports to listen on, number alone means listen on all interfaces
; 0.0.0.0 or :: if ipv6 is configured
; space between multiple occurrences
; ALL specified interfaces must be UP when xrdp starts, otherwise xrdp will fail to start
;
; Examples:
;   port=3389
;   port=unix://./tmp/xrdp.socket
;   port=tcp://.:3389                           127.0.0.1:3389
;   port=tcp://:3389                            *:3389
;   port=tcp://<any ipv4 format addr>:3389      192.168.1.1:3389
;   port=tcp6://.:3389                          ::1:3389
;   port=tcp6://:3389                           *:3389
;   port=tcp6://{<any ipv6 format addr>}:3389   {FC00:0:0:0:0:0:0:1}:3389
;   port=vsock://<cid>:<port>
port=tcp://0.0.0.0:3389

この辺はデフォルトのままなので中略

;
; Session types
;

; Some session types such as Xorg, X11rdp and Xvnc start a display server.
; Startup command-line parameters for the display server are configured
; in sesman.ini. See and configure also sesman.ini.
#[Xorg]
#name=Xorg
#lib=libxup.so
#username=ask
#password=ask
#ip=127.0.0.1
#port=-1
#code=20

#[Xvnc]
#name=Xvnc
#lib=libvnc.so
#username=ask
#password=ask
#ip=127.0.0.1
#port=-1
#xserverbpp=24
#delay_ms=2000
; Disable requested encodings to support buggy VNC servers
; (1 = ExtendedDesktopSize)
#disabled_encodings_mask=0


[vnc-any]
name=vnc-any
lib=libvnc.dylib
ip=127.0.0.1
port=5900
username=ask
password=ask
#pamusername=asksame
#pampassword=asksame
#pamsessionmng=127.0.0.1
#delay_ms=2000

#[neutrinordp-any]
#name=neutrinordp-any
#lib=libxrdpneutrinordp.so
#ip=ask
#port=ask3389
#username=ask
#password=ask

中略
```

## 起動して接続
以下のコマンドで起動します。自動で起動するわけではないので、ブートしたときに起動してほしい人は、以下のコマンドが実行されるようにすればいいと思います。
```
$ sudo /usr/local/sbin/xrdp
```
一応ログのパスも
```
$ sudo cat /var/log/xrdp.log 
```

起動したら、接続してみましょう。IPアドレスを指定するだけで接続できると思います。
また初めに以下の画像のような画面が現れるので、usernameはMacのユーザー名、
passwordはユーザーのパスワードではなく、先ほどVNCの有効化の時に決めたパスワードを入れてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/207108/2472bcb2-2eb0-f151-5562-0dc25146b77d.png)

後はOKを押せば、Macの画面が表示されると思います。

お疲れ様でした！

## まとめ
案の定苦労したので、メモして公開してみました。
結構怪しげな手順なので、動いた報告、動かなかった報告、こうすれば動いたよ報告、お待ちしております。
個人的に知りたい情報はディスプレイをつないでいない状態で、解像度を変更する方法と、最初のVNCの部分を省略する方法だったりします。


# おまけ　4K出力したい

自分はふだん4K環境で作業することが多いので、以下のようなダミーディスプレイ機器を買って使用してます。

"https://www.amazon.co.jp/gp/product/B07SLHPYYQ/"