Moonlight でリモートデスクトップしてみる



## Moonlight でゲームストリーミング

[Moonlight](https://Moonlight-stream.org/) は、nVidia によるゲームストリーミングサービスです。 低遅延でリモートでゲームをプレイすることができます。
ご自分の Windows PC 上でのゲームをリモートでプレイすることができます。  
nVidia のビデオカードが必要です(GTX/RTX 600+ 以上)。古い技術なので最近の nVidia のカードなら問題ないかと思われます。  
クライアントアプリケーションは OSS で、さまざまなデバイスでリリースされています。

屋内のLANでのWiFi(11ax)でですが、クライアントとして Android+USB 直結コントローラーでプレイしていますが十分快適にプレイできています。  
遅延は計測がとても難しいので具体的な数値は控えますが、体感ではほぼ問題ないかと思われます。
(11ac/5GHz以上は必須で。数フレームとかいうレベルでのズレは無さそうです。)
フレーム自体はドロップなく60fpsで表示されています。
解像度は4kでもいけます。

ゲーム用で十分な速度が出るならリモートデスクトップ接続としても使用しても使えるのではないかというお話です。  
むしろリモートデスクトップとしては最速な環境になるのではと。
実際に使用してみたところ動画やその他のコンテンツも遅延なく表示され快適です。

## VNC,RDP,Moonlight 使い分け

リモートデスクトップ接続とはいえ有名どころからマイナーなものまで色々ですが、
大抵のデバイスでも対応しているなど汎用性の高さなどから VNC,RDP,Moonlight の 3 つで行ってみます。

用途分けとしては

- VNC とにかくどんな状況でも繋がる。ただし遅い。
- RDP windows 操作としては快適。画面サイズも周辺デバイスもドライブも対応できる。
- Moonlight 速い。ゲームや動画などフルフレームで使いたい時。

ゲームということでは steam link もとても良いですが steam 依存のためちょっと割愛します。

### VNC

現状 [RealVNC](https://www.realVNC.com/en/) が使いやすいかなと思います。

サインインしておけば無料で 5 台までマネージしてくれるのも便利です。

### RDP

windows 操作するならともかく必須。  
サーバーセットアップは今更なので割愛します。

クライアントとしては、Mac の場合 Microsoft 製よりも [Parallels Client](https://www.parallels.com/jp/products/ras/capabilities/RDP-client/)（無料）の方が日本語キーボードの問題などもクリア出来ているので使いやすいかもしれません。  
ローカルファイルもネットワークドライブで接続可能。  
スマートカードも対応しているのでクライアントでカードリーダー＆マイナンバーカードで eTax の署名も出来ます。  
とにかく接続の良さでは最強です。

ただ画面を取られてしまうので次に Moonlight を起動するとかが難しくなるのがちょっと難点です。VNC はいけます。

### Moonlight

Moonlight は性能については前述した通りですが、ゲーム向けのリモート接続でなので少々癖があるため対応が要ります。  
とりあえず指示に従ってサーバー・クライアントをセットアップしてください。

#### 基本セットアップ

Moonlightを使用するには、GeForce ExperienceでGameStreamを有効にする必要があります。GeForce Experienceは、NVIDIA グラフィックス ドライバに含まれています(が、入ってないときは別途インストールしてください)。

1. [GeForce Experience](https://www.nvidia.com/ja-jp/geforce/geforce-experience/) をインストールします。

2. GeForce Experienceを起動します。設定画面>SHIELD画面>GAMESTREAMをオンにする。

3. クライアントに[Moonlight](https://moonlight-stream.org/)をインストールします。
デバイスは使いたいものでお好きに。

4. クライアントにてサーバーのIPを指定して登録します。

5. クライアントに表示されるPINコード(数字４桁)をサーバーに入力します。

手元に windows の画面も無くて PIN コード入れられないなんて時は VNC から操作すればなんとかなります。
何はなくともまずは VNC ですね。

セットアップ後、クライアントからゲームの一覧しか出てこないのですが、リモートデスクトップするにはゲームが起動しては困るのでリモートデスクトップ用のアプリを登録します。
サーバーにて[Moonlightのドキュメント](https://github.com/moonlight-stream/moonlight-docs/wiki/Setup-Guide#using-moonlight-to-stream-your-entire-desktop)に従い(なんでもよいかと思うのですが) `\windows\system32\mstsc.exe` を登録します。

クライアントからは登録した`mstsc`を選択して接続します。

これでデスクトップに接続出来るのですが、マウスがキャプチャされたままなので使いづらいです。
とりあえず抜けるには `Ctrl+Alt+Shift+Z`

以下操作コマンド

```
Ctrl+Alt+Shift+Q - ストリーミングセッションを終了（ホストPC上のゲームは続行）
Ctrl+Alt+Shift+Z - マウスとキーボードのキャプチャを切り替え
Ctrl+Alt+Shift+X - フルスクリーンモードとウィンドウモードを切り替え
Ctrl+Alt+Shift+S - パフォーマンス統計オーバーレイを開く（Steam LinkやRaspberry Piではサポートされていません）
Ctrl+Alt+Shift+M - マウスモードを切り替え（ポインターキャプチャまたは直接制御）
Ctrl+Alt+Shift+V - ホストにクリップボードのテキストを入力
Ctrl+Alt+Shift+D - ストリームウィンドウを最小化
Ctrl+Alt+Shift+C - リモートデスクトップマウスモードでローカルカーソルの表示を切り替え（ゲームストリームの制限のため、リモートカーソルは常に表示されます）
Ctrl+Alt+Shift+L - マウスポインターをビデオ領域にロックするかどうかを切り替え（「ゲームではなくリモートデスクトップ用にマウスを最適化」のチェックボックスが有効になっている必要があります）
```

このままでは使いづらいので、マウスキャプチャされないようにするためクライアント設定で「ゲームではなくリモートデスクトップにマウスを最適化」を ON にします。
これでマウスキャプチャされることなく快適操作できます。

windows 操作的な時は RDP、動画・ゲームなどは Moonlight とうまく使い分けてください。

## 宅外ネットワーク越し

細かいポートオープンなど面倒です。

[Tailscale](https://tailscale.com/) 入れて解決。


P.S.

MoonlightがあればAndroidだろうがFireTVだろうがMacだろうが家中どこからでもゲームが出来て快適だよって話。
(宅外からでもネット環境よければ結構いけます)
Androidにコントローラーつければ快適。
コントローラーはXbox系で揃えておけば問題ないっす。