Ubuntu22.04 で リモートデスクトップ

この記事では以下を紹介

- [GUI でリモートデスクトップサーバーを有効化 ( gnome-remote-desktop.service )](#gui-でリモートデスクトップサーバーを有効化--gnome-remote-desktopservice-)
- [CUI でリモートデスクトップサーバーを有効化 ( xrdp )](#cui-でリモートデスクトップサーバーを有効化--xrdp-)
- [GUI で操作するリモートデスクトップクライアント ( Remmina )](#gui-で操作するリモートデスクトップクライアント--remmina-)
- [CUI で起動するリモートデスクトップクライアント ( rdesktop / xfreerdp )](#cui-で起動するリモートデスクトップクライアント--rdesktop--xfreerdp-)

# 環境


- Ubuntu 22.04 LTS Linux


# GUI でリモートデスクトップサーバーを有効化 ( gnome-remote-desktop.service )

Ubuntu22.04 には リモートデスクトップ機能が備わっているが、MS-Windowsのリモートデスクトップのようなものではなく、 VNC 的な利用となる。物理デスクトップ側でローカルログオンしている状態でないといけない。その状態で、物理デスクトップの画面をミラーするもの。

「設定」-「共有」-「リモートデスクトップ」を ON にする。バグのためこのスイッチを一旦 OFF にして ON にし直さないとダメという話もあるが、未検証。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/c8aa8e2f-6ede-ad10-adca-643b8a392369.png)

ここでパスワードがランダム?に決められているが、このままだと以下のようにエラーが出ていて、接続ができない。

```
$ systemctl --user status gnome-remote-desktop.service
● gnome-remote-desktop.service - GNOME Remote Desktop
     Loaded: loaded (/usr/lib/systemd/user/gnome-remote-desktop.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-05-31 19:20:58 JST; 47min ago
   Main PID: 15590 (gnome-remote-de)
      Tasks: 20 (limit: 9229)
     Memory: 24.7M
        CPU: 477ms
     CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/gnome-remote-desktop.service
             └─15590 /usr/libexec/gnome-remote-desktop-daemon

 5月 31 19:20:58 mayo systemd[699]: Started GNOME Remote Desktop.
 5月 31 19:20:58 mayo gnome-remote-desktop-daemon[15590]: Cannot load libcuda.so.1
 5月 31 19:20:58 mayo gnome-remote-desktop-daemon[15590]: Cannot load libnvidia-encode.so.1
 5月 31 19:20:58 mayo gnome-remote-de[15590]: RDP server started
 5月 31 19:21:58 mayo gnome-remote-de[15590]: Couldn't retrieve RDP username: Credentials not set
 5月 31 19:21:58 mayo gnome-remote-de[15590]: Couldn't retrieve RDP username: Credentials not set
 5月 31 20:04:37 mayo gnome-remote-de[15590]: Couldn't retrieve RDP username: Credentials not set
 5月 31 20:04:37 mayo gnome-remote-de[15590]: Couldn't retrieve RDP username: Credentials not set
 5月 31 20:05:26 mayo gnome-remote-de[15590]: Couldn't retrieve RDP username: Credentials not set
 5月 31 20:05:26 mayo gnome-remote-de[15590]: Couldn't retrieve RDP username: Credentials not set
```
パスワードを適当に変更すると、以下のような認証画面が出る。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/27a9e568-e0fe-1b56-83aa-1bfd4ed1850b.png)

ここでユーザのパスワードを入れると、"Credentials" がセットされるようで以下のようにエラーがでなくなる。

```
$ systemctl --user status gnome-remote-desktop.service
● gnome-remote-desktop.service - GNOME Remote Desktop
     Loaded: loaded (/usr/lib/systemd/user/gnome-remote-desktop.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-05-31 20:10:01 JST; 2min 43s ago
   Main PID: 19267 (gnome-remote-de)
      Tasks: 18 (limit: 9229)
     Memory: 61.6M
        CPU: 9.097s
     CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/gnome-remote-desktop.service
             └─19267 /usr/libexec/gnome-remote-desktop-daemon

 5月 31 20:10:01 mayo systemd[699]: Starting GNOME Remote Desktop...
 5月 31 20:10:01 mayo systemd[699]: Started GNOME Remote Desktop.
 5月 31 20:10:02 mayo gnome-remote-desktop-daemon[19267]: Cannot load libcuda.so.1
 5月 31 20:10:02 mayo gnome-remote-desktop-daemon[19267]: Cannot load libnvidia-encode.so.1
 5月 31 20:10:02 mayo gnome-remote-de[19267]: RDP server started
 5月 31 20:10:04 mayo gnome-remote-desktop-daemon[19267]: [20:10:04:725] [19267:19283] [WARN][com.winpr.negotiate] - AcceptSecurityContext status SEC_I_CONTINUE_NEEDED [0x00090312]
 5月 31 20:10:04 mayo gnome-remote-desktop-daemon[19267]: [20:10:04:824] [19267:19283] [WARN][com.winpr.negotiate] - AcceptSecurityContext status SEC_I_COMPLETE_NEEDED [0x00090313]
 5月 31 20:10:05 mayo gnome-remote-de[19267]: [RDP.CLIPRDR] Client capabilities: long format names
 5月 31 20:10:05 mayo gnome-remote-de[19267]: [RDP.RDPGFX] CapsAdvertise: Accepting capability set with version RDPGFX_CAPVERSION_106, Client cap flags: H264 (AVC444): false, H264 (AVC420): false
```

ここで他の Ubuntu22.04 から Remmina で接続しようとすると、以下のように表示され、「はい」とすると接続できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/c99cf4cd-d462-ccaf-2f37-d82a0a249d66.png)

リモートデスクトップ中は、物理ディスプレイ側はログオフすることなく、ログオンしたまま両方で同じ表示がなされ、同時に操作できる。その間、タスクバーにはリモートデスクトップでの共有がなされている表示が出る。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/ce290bac-cb7d-5d8c-00e3-318b3ad7abd0.png)


## 問題点

日本語キーボードに完全に対応できていない。`|`キーや変換・無変換キーなどが使用できない。

# CUI でリモートデスクトップサーバーを有効化 ( xrdp )

上のGUIでやるやりかたとは異なって、以前からある馴染みのあるやりかた。
これはリモート側でデスクトップを専有する。
そして物理デスクトップ側は同じユーザはログオフしておかないといけない。
確認していないが、TCP/IPポートが競合するため上のGUIでやるやりかたとはそのままでは共存できない。

インストール

```

$ sudo apt install xrdp

```
実行

```
$ sudo systemctl start xrdp

```

停止
```
$ sudo systemctl stop xrdp

```

実行している状態で、 Remmina から接続する。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/51f70e6d-69a5-eca5-4cbc-e427c07bfbed.png)

接続できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/65a2fe58-6054-b923-81bc-95caf5a32a2e.png)

通常のメニューが出てきていないので「アクティビティ」を押して画面下のアイコンから操作します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d906e2a6-54dd-81b2-0992-cebea051a4f5.png)


キーボードグラブボタンを押してからWindowsキー(Superキー)を押す、ないし右Ctrlキーを押してからWindowsキーを押す、ことでも同様の操作ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d38752ef-6866-8746-18c2-677ad28f4c30.png)


画面解像度はToggle dynamic resolution update を有効にして、ウィンドウサイズを変えると画面解像度を大きくすることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/ba6832a4-3ef9-e83d-8d04-3ee1fea2c3e8.png)






# GUI で操作するリモートデスクトップクライアント ( Remmina )

こちらは RDP クライアント。

インストール

```
$ sudo apt install remmina
```
一度起動すると常駐する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e2267fe8-0f77-878f-2b22-4759b336025d.png)


## 日本語キーボードの問題

上記の「GUI でやるやりかた」に接続する時に、日本語キーボードの`|`や 変換・無変換キーなどが使えない。Remmina側の問題かと思い、以下のように設定したが解消しない(Auto Detectの設定のままで日本語キーボードは問題なく設定できているようです)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/8ffa7fef-4b84-5ee2-2434-b0722b3ef8e9.png)

実は「GUI でやるやりかた」に接続する場合はサーバー側のバグが原因らしい。



cf., 「Ubuntu 22.04 - おなかすいたWiki！」
https://wiki.onakasuita.org/pukiwiki/?Ubuntu%2022.04


# CUI で起動するリモートデスクトップクライアント ( rdesktop / xfreerdp )

## rdesktop

上記CUIのリモートデスクトップサーバに接続しました。

```
$ rdesktop  192.168.42.5
```
日本語キーボードはOK。FreeRDP の操作としてウィンドウ画面からキーストロークを送ったり画面スケールモードを指定したりするなどの機能などは特に無いようだ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/ae4543bd-991b-b689-9fd1-8d283458fc01.png)


上記GUIのリモートデスクトップサーバには接続できませんでした。
```
Autoselecting keyboard map 'ja' from locale
Core(warning): Certificate received from server is NOT trusted by this system, an exception has been added by the user to trust this specific certificate.
Failed to initialize NLA, do you have correct Kerberos TGT initialized ?
Failed to connect, CredSSP required by server (check if server has disabled old TLS versions, if yes use -V option).
```

試してないが MS-Windows などへの接続も、同様のエラーが出るらしい。
この問題に関しての資料：
https://github.com/rdesktop/rdesktop/issues/28

## xfreerdp

インストール
```
$ sudo apt install freerdp2-x11

```
実行

```
$ xfreerdp /u:nanbuwks /v:192.168.42.5
[08:46:44:023] [928037:928038] [WARN][com.freerdp.crypto] - Certificate verification failure 'self-signed certificate (18)' at stack position 0
[08:46:44:023] [928037:928038] [WARN][com.freerdp.crypto] - CN = GNOME, C = US
Password: 
[08:46:48:067] [928037:928038] [INFO][com.freerdp.gdi] - Local framebuffer format  PIXEL_FORMAT_BGRX32
[08:46:48:067] [928037:928038] [INFO][com.freerdp.gdi] - Remote framebuffer format PIXEL_FORMAT_BGRA32
[08:46:48:087] [928037:928038] [INFO][com.freerdp.channels.rdpsnd.client] - [static] Loaded fake backend for rdpsnd
[08:46:48:087] [928037:928038] [INFO][com.freerdp.channels.drdynvc.client] - Loading Dynamic Virtual Channel rdpgfx
[08:46:48:152] [928037:928038] [WARN][com.freerdp.client.x11] - xf_lock_x11_:	[1] recursive lock from xf_sw_end_paint
[08:46:48:153] [928037:928038] [WARN][com.freerdp.client.x11] - xf_lock_x11_:	[1] recursive lock from xf_sw_end_paint

```

上記CUIでのリモートデスクトップサーバーに接続したところ。日本語キーボードはOK。FreeRDP の操作としてウィンドウ画面からキーストロークを送ったり画面スケールモードを指定したりするなどの機能などは特に無いようだ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/1e313aaf-2eed-7e44-6a0c-6f19bc6b35de.png)


rdesktop だと上記 GUI でのリモートデスクトップサーバに接続できませんでしたが、xfreerdp だとOKでした。MS-Windows への接続もこちらだと OK なはず?