この記事では、Minecraftのような視点移動を伴うゲームソフトウェアをリモートデスクトップで使う方法を説明します。
このような視点移動を実際に実装するとなると、「マウスの移動を検出→それに従って視点を移動→マウスを再び中心に戻す」という動作をすることになります。この「戻す」動作によって、例えば左右どちらかに延々とマウスを動かしてぐるぐる回転するといった操作が可能になるわけですが、リモートデスクトップではこの「戻す」動作が問題になることがあります。
というのは、リモートデスクトップソフトウェアによっては、クライアント側のマウスに連動してリモート側のマウスが動くような動作になっているため、リモート側でマウスを「戻す」という命令が出されたとしても、それがクライアント側に反映されずマウスの位置を変えられないからです。これにより例えばマイクラでいえばずっと下を向き続けてしまうといった不具合が発生します。
この記事では、これを解決するためのいくつかの方法を紹介します。
ゲーム以外のソフトウェアであっても、何かしらマウス移動に不具合のあるソフトウェアだったら、もしかしたらこの記事が役に立つかもしれません。
MoonlightとSunshineを使う
基本的にはこれがメインで紹介する(おすすめの)方法になります。
Moonlightは、NVIDIAのGameStream機能を利用したクライアントソフトウェアとして当初は実装された、オープンソースソフトウェアです。つまり、 ホスト側にはNVIDIA GPUが必要でした。そこで、NVIDIA以外の環境でも動作するサーバー側ソフトウェアとしてSunshineが作られました。そんな中でNVIDIAがGameStreamを廃止することになったため、NVIDIA環境でもSunshineがちょうど代替手段になったという感じです(多分)。
SunshineはWindows/macOS/Linuxに対応しています。
Moonlightは上記の3つのほかに、Android/iOS/ChromeOSにも対応しています。
今回はクライアント側(Moonlight)がWindows、リモート側(Sunshine)がLinuxという想定でいってみます。
Moonlightのインストールは簡単です。
Sunshineもインストール自体はそんなに難しくないです。ただ、Flatpakパッケージは色々と使いづらかった("sunshine"だけで起動できないとか)ので、個人的にはdebパッケージやAppImageのほうがいいのではないかと思いました。
Sunshineでは、キーボード・マウス入力を送信するため、通常はrootだけに制限されている/dev/uinput(これに加えてタッチなどは/dev/uhid)への読み書きアクセスが必要になります。このため、debなどを使ったパッケージインストールではudevのルールが設定され、ログイン中(←systemdに明るくないので詳しい条件は理解できていません)のユーザーは読み書きが可能になります(このudevの設定は旧バージョンのドキュメントにも書いてあります)。物理デバイスではなくsudoやsshやRDPでログインしたユーザーでsunshineを起動すると「ログイン中」判定にならず、以下のようなエラーが出てマウス・キーボード入力が一切通りません。(ただしds5に関しては正常動作時も出ている?)
[2025-05-26 14:25:41.873]: Warning: Unable to create virtual mouse: 許可がありません
[2025-05-26 14:25:41.873]: Warning: Unable to create virtual keyboard: 許可がありません
[2025-05-26 14:25:41.873]: Warning: Gamepad xone is disabled due to 許可がありません
[2025-05-26 14:25:41.874]: Warning: Gamepad ds5 is disabled due to 許可がありません
[2025-05-26 14:25:41.874]: Warning: Gamepad switch is disabled due to 許可がありません
しかしVNC経由の場合は(設定にもよりますが)通る可能性があります。例えば手元のLinux Mint(Cinnamon)はディスプレイを接続しない状態でも:0でXorgが起動しており、ここに立てたx11vncに接続してsunshineを実行した場合はできました。自宅のヘッドレスマシン用ならこの方法がいいかもしれません(少なくとも自分はこの環境で、これ以外の方法がわからないです)。ちなみにx11vncとsunshine+moonlightは完全に同時に接続・使用できます。
Remote SSH Headless Sunshine Setup | LizardByteではuinputのアクセス権を調整することでssh経由などで使えるようにする方法が書いてあります。
sudo sunshineでもuinputへのアクセスは通るようになりますが、ユーザーがrootになるせいか画面が表示されないような挙動になることもあります(このあたり?)。これ以外にもXvfbなどの独立したディスプレイでSunshineを動かそうとして色々試したのですが、仮にuinputへのアクセスが通ったとしても入力が全てメインのディスプレイである:0に送られてしまう(元のPCに直接USBで刺したマウス・キーボードを動かしているようなイメージ)ようで、うまくいきませんでした。過去にはXTestを用いた入力も実装されていたようですが、現在は削除されています(Add XTest input fallback (#997) · LizardByte/Sunshine@8227e8f · GitHub)。
全体的にx11vncなどよりも低いレイヤでマウス・キーボード等を制御しているため、良くも悪くもそのへんの違いが出ているのかなという感じです。もっと全体的なことを言うと、今はX11からWaylandへの過渡期なので色々と不自由なのはしょうがないのかなという感じもします。
Sunshineでのアスペクト比の設定
Moonlightで接続した際、画面の両側(左右、あるいは上下)に黒いエリアができてしまうことがあります。これはどうやらMoonlight側の問題ではなく、Sunshine側で実際と異なるアスペクト比でストリーミングがされてしまっているようです。
https://www.reddit.com/r/cloudygamer/comments/10poiyv/sunshine_resolution_issues/あたりに色々書いてあって、qresとかいうものを使うといけるというような話もあったのですが、Sunshine側のデフォルトが16:9らしく、ディスプレイを16:9にすればいいとのことだったのでXorg側の設定をいじって16:9にしたら解決しました。
ソフトウェア側での設定
これはMoonlight+Sunshineに限らず全ての方法に言えることですが、物理ディスプレイではなくリモートデスクトップでプレイする場合は、(GPUとディスプレイが直接ケーブルで接続されていることが必要な)描画のハードウェアアクセラレーション的なものは基本的に動作しなくなります。ゲームの描画・動作が遅かったり不自然だったりするときはそういう系のオプションを変えると改善することがあります。
垂直同期(VSync)をoffにすることなども改善につながる可能性があります。
Parsec
Parsecも、Moonlight+Sunshineに似たソフトウェアで、ゲーム向けを想定した高パフォーマンスなリモートデスクトップ機能を提供します。
ただし、サーバー側はLinux非対応(Windows/macOSは対応)(クライアントはWindows/macOS/Linux/Android対応)なので今回は試しませんでした。
ParsecにはImmersive modeという機能があり、これを有効にすると(ただしマウスに関してはデフォルトで既に有効?)Moonlightと同様にマウスがリモートデスクトップ内にロックされる形になり、Minecraftなどがプレイできるはずです。
商用利用は有料ですが、個人利用かつサーバー側がLinux以外なら、Moonlightと同等におすすめできる選択肢です。
Chromeリモートデスクトップ
リモートデスクトップソフトウェアとしてはこれも有名です。多くの環境で動作するのはありがたいです。
Chromeリモートデスクトップには「相対マウスモード」があり、これを使うと一応視点移動はできるようになるものの、マウスカーソルが常に表示された状態になる(マイクラでいえば画面中央に常にマウスポインタが居座る(ちなみに通常プレイでもごく稀に不具合で一時的にこの状態になることもある))ため、あまり快適ではありません。また、パフォーマンスもあまり良くないです。
RealVNC
メジャーどころのVNC実装です。RealVNCにはRelative Pointer Motionというオプションがあって、これを有効にするとマイクラ等がプレイできるようになるという情報も実際見かけます。しかし、Windows(クライアント、RealVNC)+Linux(サーバー、x11vnc)で試したら、このオプションはグレーアウトしていました。おそらく、VNCを独自拡張してこの機能を実装している気がするので、サーバー側もRealVNCにすれば動くのではないかと思うんですが、RealVNCのサーバー側を無料で動かす方法がわからなかった(active subscriptionがないみたいなエラーが出た)のでやめました。
いずれにせよ、VNCはそこまでパフォーマンスに重きを置いたプロトコルではないので、MoonlightとかParsecとかのほうが速いんじゃないでしょうか。
TigerVNC
相対マウスモードに関するissueは[REQUEST] Mouse synchronization/grabbing/capture/wrapping · Issue #619 · TigerVNC/tigervnc · GitHubなどが立っていて色々書いてありますが、現状だと試した限りはそういう動作はしてくれないみたいです。
RemoteRelativeInput
これ自体はリモートデスクトップのソフトウェアではなく、Windowsのリモートデスクトップクライアント向けに補助的に動作するもので、サーバー・クライアント両側にインストールすることでサーバー側のマウスの動きをクライアント側に同期してくれます。リモートデスクトップのウインドウのタイトルを指定して使用します。
サーバー側には(Linuxの場合)xdotoolが必要です。
一応動作はしましたが、相対モード時はマウスが非表示になるのが非常に使いづらいです。常に一人称視点のゲームならいいですが、そうでないとメニュー操作時などに操作が困難になります。
仮想マシンの「マウス統合」
リモートデスクトップと仮想マシンは用途として異なりますが、機能的に関連があるので取り上げます。
仮想マシンにおいても、最初に述べたような「ホストOS側(←リモートデスクトップにおいてはクライアント側のイメージ)のマウスに連動してゲストOS側のマウスが動く」ような動作が存在します。VirtualBoxだと「マウス統合」などと呼ばれています。これが有効になっているとやはりマイクラなどは動かないと思います。
仮想マシンにおいてはむしろこの「マウス統合」はオプション的な機能で、無いほうが普通なイメージなので、無効にするのは簡単だと思います。
VMwareはほぼ使ったことがないのですが、例えばVMwareでマイクラがプレイ出来ない(マウスの動作がおかしい)場合の対応方法 | mc.server-memo.netなどで説明されていました。