Kali Linux on Raspberry Pi にRDP接続すると黒い画面になる

# 前提

Raspberry Pi 4 Model B にKali Linuxをインストールしています。
Kaliインストール用のイメージは[公式サイト](https://www.kali.org/get-kali/#kali-arm)から取得しています。

また、Windowsからssh接続ができている状態です。Macからでも同様の症状です。

# 問題

ssh接続からコマンドでrdp関係のソフトをインストールすれば動くはず！

```:bash
apt install kali-desktop-xfce xorg xrdp tigervnc* xfe4 dbus-x11 xorgxrdp
```

ところが、ログイン後に黒い画面になってしまい、しばらくすると勝手に接続が切れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/53d18bf3-6a02-cd6c-d520-9b3df553c7db.png)
▼▼▼▼▼▼
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/f47e27ba-f9bf-bce1-dce7-b99a13155ed2.png)
▼▼▼▼▼▼
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/aa127304-657c-f282-d982-1e5044bd6e4e.png)

Raspberry Pi を再起動して、最初だけ`C:\WINDOWS\system32\mstsc.exe`で接続できるのですが、なぜか２度目からこのように真っ黒になり、困っていました。

# 検証した項目

Windows側から`nmap <ip-of-kali-linux>`を実行してみる。
※(\<ip-of-kali-linux\>はプレースホルダ)

```:output
Starting Nmap 7.80 ( https://nmap.org ) at 2021-06-28 03:22 ???? (?W???)
Nmap scan report for <ip-of-kali-linux>
Host is up (0.0081s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3390/tcp open  dsc
MAC Address: DC:A6:32:FD:16:F6 (Raspberry Pi Trading)
```

ご覧のように、ちゃんとssh用のポートとRDP用のポートは開いています。

kali側から`sudo netstat -plnt | grep rdp`を実行してみる。

```:output
tcp        0      0 0.0.0.0:3390            0.0.0.0:*               LISTEN      197638/xrdp
tcp6       0      0 :::3350                 :::*                    LISTEN      197627/xrdp-sesman
```

このコマンドでもkali側のポートが開いていることが分かります。

kali側で`tail -f /var/log/syslog`を実行しながらWindows側からRDP接続を試す。

```
[WARN ] local keymap file for 0xe0010411 found and doesn't match built in keymap, using local keymap file
[ERROR] xrdp_mm_connect_chansrv: connect failed trying again...
[ERROR] xrdp_mm_connect_chansrv: error in trans_connect chan
```

怪しかった部分は、たった３行。WARNとかERRORとかいう文字列はここ以外に見つからない。しかし、これでGooglっても何も収穫無し。

# 結果

`journalctl -xe`を実行すると、`Invalid MIT-MAGIC-COOKIE-1 keyError: cannot open display ':0'`というエラーが出ていたので、これで検索してみました。結果、[ここ](https://unix.stackexchange.com/questions/199891/invalid-mit-magic-cookie-1-key-when-trying-to-run-program-remotely)で見つけた方法で回復しました。

それは、下記のコマンドです。

```
export DISPLAY=desktop:0
xhost +local:
```

xhostのコマンドリファレンスは[こちら](https://manpages.debian.org/jessie/x11-xserver-utils/xhost.1.en.html)です。

# RDP画面

素晴らしい。Rasberry Piでリモートとか重たそうでしたが、意外とサクサクです。[高級SDカード](https://www.amazon.co.jp/dp/B07LCMP4B8/)を使ってるからかもです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/976dd78d-bbf0-3ce2-8b1a-f61c9ff615d6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134703/72865028-fa8c-fe75-a08e-ddc79fac2e4a.png)

# xhost

環境変数`DISPLAY`を設定していないと、下記のようなエラーが帰ってきました。

```
❯ sudo xhost
xhost:  unable to open display ""
```

# to be continue...

後から見つけましたが、このあたりが参考になりそうなので、関連ツールを調べてみようと思います。

- [xauthコマンドでXサーバの接続が許可されているかどうかを調べる](https://www.atmarkit.co.jp/flinux/rensai/linuxtips/560usexnest.html)
- [`https://kali.sh/xfce4.sh`の使い方](https://news.mynavi.jp/itsearch/article/hardware/3648)
- [xrdp | debian](https://packages.debian.org/bullseye/xrdp)
- [xhost | debian](https://manpages.debian.org/stretch/x11-xserver-utils/xhost.1.en.html)
- [DebianEdu | HowTos for networked clients](https://wiki.debian.org/DebianEdu/Documentation/Buster/HowTo/NetworkClients?highlight=%28xrdp%29#Remote_Desktop)

**Excelsior!**