見出し画像

Virtual Desktopを有線で使う方法

どういうこと?

そのまんまです。
本来無線で使うVirtual Desktop (以下VD) を有線で使います。
このnoteではQuest + VDのみをターゲットとしますが、Quest + Air Link, Steam LinkやPico + VDでも同じ方法でできると思います。
Picoでは使えない可能性があります。Issue #493にて報告されています。

本末転倒では?

それはそう。この記事が役立つ人はおそらくVRユーザーの0.1%にも満たないと思います。
Virtual Desktopの便利機能 (Index Emulation等) と有線接続の安定性を同時に受けたい欲張りな方や、ネット環境が貧弱で無線VR体験が悪い人にはオススメかもしれません。

追記ログ

2024/05/12 13:25: 大幅加筆修正 (参考にさせていただいたページ等を書くのを完全に忘れていました。ごめんなさい!!)


概要

Genymobile開発の「gnirehtet」というソフトウェアを使用してリバーステザリングをQuestに対して行います。
これにより、Quest上の (IPv6を除いた) 通信をPCで中継できるようになり、またVDのみならず、Steam LinkやAir Linkを有線USB接続で実行できるようになります。

ちなみにGenymobileは本社をサンフランシスコに置いたAndroid絡みのおもしろ企業で、
有名なものでいえばPCからAndroidを操作したり画面を見たりできる「scrcpyや、
Android エミュレーター「Genymotionを開発したところです。

「Genymotion」の名を見たことある人は結構多い気がします。

やり方

少々手間ですががんばりましょう。
おおよそこちらの記事と内容は同一なので詳しい方はそっちを見たほうが楽かもしれません。
gnirehtet公式の説明書 兼 導入ガイドはこちらから

Questを開発者モードにする

adbを使用したUSBデバッグ機能を使ってリバーステザリングを張る都合上、開発者モードが必須です。
このnoteに書きまとめるには長すぎ & 複雑であるため、以下のページを参考に開発者モードを有効化してください (丸投げスタイル

gnirehtetをダウンロードする

GitHubのReleasesページから最新のJavaもしくはRustビルドをダウンロードしてください。
本noteではJavaビルドを使用するため、追加でOpenJDKをインストールする必要があります。

ダウンロードしたzipを適当な場所に展開してください。

Q. Rust版とJava版の違いは何?
A. 作り方が違うだけです。
公式ではRust推奨。
Rust版の方がCPUとメモリの消費量が少なく、またJavaランタイム環境を必要としません。
Rust版で問題が起こった時のためにJava版が残されています。
とりあえずRust版を試してみて、何かおかしいようならJava版を使ってみてください。
ですが、Questに対して使用する場合はRust版だとなぜか特定条件下で非常に不安定になります。
セットアップの手間は少し増えますが、必ずJava版をダウンロードしてください。

詳細は https://github.com/Genymobile/gnirehtet#flavors

JREをインストールする

インストールするJRE (JDK) は (多分) なんでもいいです。というよりJRE 8があればいいっぽい。
古くからMinecraftを遊んでる方ならもしかしたら既に入ってるかもしれません。

本noteではMicrosoft Build of OpenJDKを使用します。
ダウンロードページから最新のWindows向けインストーラーをダウンロードし、指示に従ってインストールしてください。

「郵便番号」って何?って思いましたが、これ「zip」のことだったんですね。機械翻訳…

インストール完了後は一度PCを再起動してください。

java.exeに対してPATHが通っていれば多分なんでもいいのでお好きなもので構わないと思います。

adb用ツールをダウンロードする

こちらのページから「SDK Platform-Tools for Windows をダウンロード」をクリックし、利用規約に同意して最新のリリースをダウンロードしてください。

ダウンロードしたzipを展開し、「platform-tools」ディレクトリ内にある以下のファイルをgnirehtet.exeがあるディレクトリに配置してください。

  • adb.exe

  • AdbWinApi.dll

  • AdbWinUsbApi.dll

めんどくさかったら全部ドラッグしても大丈夫です。

起動用ファイルを弄る

「gnirehtet-run.cmd」をメモ帳などで開き、中の「run」を「autorun」に差し替えるだけです。
これは「今繋がっているものも含め、今後接続する全てのデバイスに対して自動的にリバーステザリングを張るオプション」です。
gnirehtetを起動した後にQuestを接続するため、この設定にしないとリバーステザリングが張られません。

gnirehtetを起動する前にQuestを接続する場合はrunのままでもいいと思いますが、autorunはrunの効果も含むため変えておいて損はないです。
VR遊びを終えたらちゃんとCtrl-Cなどで落としましょう。
詳細はGitHub - gnirehtet READMEをどうぞ。

ここまで出来たらほとんど終わりです。
次にVDを使用する際の最低限の設定です。

VDの設定を (少し) 弄る

PC側VDの設定は「Automatically Adjust Bitrate」をオフにしておくぐらいです。
有線接続といってもVDから見たら無線接続と変わらないので、LAN環境が弱い場合最大ビットレートが大幅に制限されてUSB接続のメリットが潰れます。
ついでに「Preferred Codec」を「H.264」か「H.264+」にしておくと遅延が減らせて嬉しいかも。
HEVCでも10ms程度しか変わらないので好みの範囲です。

Quest側VD (以下クライアント) は少し弄る必要があります。
SETTINGSタブ内「Use optimal resolution」「Background music when disconnected」をオフにしてください。
それぞれ「PC接続時にPC側の解像度を変更する設定」「PC未接続時に音楽を流す設定」です。

STREAMINGタブ内「Synchronous Spacewarp」「Video buffering」をオフにしてください。
それぞれ「FPS低下時のフレーム補間」「映像のバッファリング」です。
有線接続の場合バッファリングをしてもそこまで変わらないどころか (微量とはいえ) 遅延が増えるのでオフにしても問題ないならオフにしておくとお得。

もしRust版を使用する場合は追加でSETTINGSタブ内「Microphone Passthrough」を必ずオフにしてください。
バグ?により非常に高頻度でセッションが切られます。

https://twitter.com/SzlyNe_/status/1789388081998495841 , GitHub Issue #483

STREAMINGタブ内「VR Bitrate」を最大値まで上げてください。
単純にその方が綺麗になるからです
「GPUは強いけどネットワークが弱い」という理由でGraphics QualityやFrame Rateを上げ渋っている方はついでに上げてあげるといいと思います。
ただし上げた分だけフレームレートは低下し、またエンコード/デコード遅延も増加するため、GPU性能自身の許容できる遅延の幅と相談して設定してください。

ただし、Java版では150Mbps以上の通信を流そうとすると不安定になるようです。
余裕を持って100 - 120Mbpsぐらいに設定しておくのがいいんじゃないでしょうか。自身の画質許容幅と相談してください。
ちなみにAir Linkでは200Mbpsが公式でサポートしている最大値です。

VR接続をする

  1. gnirehtet-run.cmdを起動

  2. QuestとPCをUSBで有線接続

  3. (USBデバッグを許可 & VPN接続を許可)

  4. VD接続

ぶっちゃけgnirehtet起動してUSB繋いでVD繋ぐだけなので人によっては1ステップしか増えません。私がそうです

gnirehtetを起動 & 有線接続

さきほど改変したgnirehtet-run.cmdを起動するだけです。
その後Questを被った状態でQuestとPCをUSBケーブルで接続してください。Questを被ってないとUSBデバッグのプロンプトに気付けなかったりするためです。PC画面とかUSBポートは鼻の隙間などから気合で見てください。

初回接続の場合はUSBデバッグの許可とVPN接続の許可が求められます。
必ずどちらも許可してください。
USBデバッグは「このコンピューターからのUSBデバッグは常に許可する」みたいな奴を押しておくと今後が楽。

一回gnirehtetを有効化するとそれ以降Quest OSが「有線経由のネットワーク接続を優先するようになる」ため、Quest単体ではインターネットに接続することができなくなります。
回避方法はおそらく無く、Questを再起動することで解決できます。
アップデートなどはリバーステザリングを張る前に行うことをおすすめします。

有線接続モードであっても一応WiFiには繋がった表示になります。
勘違いしやすいので注意。これAndroid OSでもそうなんでしょうか?

VPN接続のプロンプトに関しては挙動がいまいち分からず、もしかしたら画面が暗転して出てこないように見える可能性があります。
もしUSBデバッグ許可後画面が暗転したなら以下のRedditの投稿に従ってVPN接続を許可してください。

https://www.reddit.com/r/OculusQuest/comments/nxe88k/virtual_desktop_working_over_usb/
今はもう起こらないかも?不明。

VD接続

gnirehtetが起動していて、正しくリバーステザリングが張られていることを確認した上で通常通りVirtual Desktopを起動してPCと接続してください。

PCと接続した状態で、PC側のインターネットを切断 (LANケーブルを抜く、WiFiをオフにするなど) してもVDセッションが維持されていれば成功です。お疲れ様でした。
以降はgnirehtetを起動 → USB接続 → VD接続の順番で行うことで有線でVirtual Desktopが使えます。

なお、何らかの拍子でUSB接続が切れると当然ネットワーク接続が切れるしVDセッションも切れるので簡単にUSBが抜けたりしないようにしてください。

Q. Quest単機でネット繋がらないんだけど

再起動するか、PCと接続した状態でインターネットに接続してください。

Quest OSの仕様なのか一度リバーステザリングを張ると有線でのインターネット接続を優先する挙動になり、PCと接続していない状態ではインターネットに接続できなくなります。

Q. なんかVD切れまくるんだけど

PCもQuestも再起動しましたか?
セットアップ後どちらも一回は再起動しないとVDとセッションをうまく張れません。
また、セットアップ後も何らかの切っ掛けでセッションをうまく張れなくなって接続と切断を繰り返すようになる可能性があります。
その場合もPCとQuestを両方再起動してあげれば直るはずです。
(憶測100%. 要検証.)

Rust版を入れていませんか?Java版を入れてみてください。
理由は不明ですが、Rust版gnirehtetでMicrophone Passthroughを使うと妙に不安定になります。
このバグ?は既に各所で報告されているようですが、半年近く放置されているので公式での解決は望めなさそうです。

参考資料

完全に書くのを失念していました。該当者様には大変申し訳ないです。


この記事が気に入ったらサポートをしてみませんか?