Virtual Desktopを有線で使う方法
どういうこと?
そのまんまです。
本来無線で使うVirtual Desktop (以下VD) を有線で使います。
このnoteではQuest2,3 + VDのみをターゲットとしますが、Quest2,3 + Air Link, Steam LinkやPico4 + VDでも同じ方法でできると思います。
Pico4では使えない可能性があります。Issue #493にて報告されています。
もしPico4をお持ちの方がこれを見ているのなら、実際に検証して結果をコメントなりTwitterなりで教えて下さると幸いです。
これVDである必要ある?
それはそう。多分VDである必要性はそこまでなく、またこの記事が役に立つVRユーザーの方は全体の1%にも満たないんじゃないかな、と思います…
Virtual Desktopの便利機能 (Index Emulation等) と有線接続の安定性を同時に受けたい欲張りな方や、ネット環境が貧弱で無線VR体験が悪い人にはオススメかもしれません。
追記ログ
2024/05/12 13:25: 大幅加筆修正 (参考にさせていただいたページ等を書くのを完全に忘れていました。ごめんなさい!!)
05/26 23:55: 大幅加筆修正 2
08/19 19:52: 修正
概要
Genymobile開発の「gnirehtet」というソフトウェアを使用してリバーステザリングをQuestに対して行います。
これにより、Quest上の (IPv6を除いた) 通信をPCで中継できるようになり、またVDのみならず、Steam LinkやAir Linkを有線USB接続で実行できるようになります。
フルトラと併用できる?
できます。 (Quest2 + HaritoraX, Standable v2で検証済み)
Vive TrackerやHaritoraX Wirelessなどでの検証結果をお待ちしております。
無限Linkケーブルと併用できる?
できます。 (Quest2 + 充電器 + CtoCケーブルセットで検証済み)
ただし商品ページにもありますがQuest3だとOS側充電制御により? 途中からバッテリー消費量が充電量を上回ってしまうことがあるようで、無限プレイは厳しそうです。
検証の際、制作者の@en129様より無限Linkケーブルの提供を頂きました。
ありがとうございます!
無限Linkケーブルはen129様のBoothより購入できます。
やり方
少々手間ですががんばりましょう。
おおよそこちらの記事と内容は同一なので詳しい方はそっちを見たほうが楽かもしれません。
gnirehtet公式の説明書 兼 導入ガイドはこちらから
Questを開発者モードにする
adbを使用したUSBデバッグ機能を使ってリバーステザリングを張る都合上、開発者モードが必須です。
このnoteに書きまとめるには長すぎ & 複雑であるため、以下のページを参考に開発者モードを有効化してください (丸投げスタイル
gnirehtetをダウンロードする
GitHubのReleasesページから最新のJavaもしくはRustビルドをダウンロードしてください。
本noteではJavaビルドを使用するため、追加でOpenJDKをインストールする必要があります。
ダウンロードしたzipを適当な場所に展開してください。
JREをインストールする
インストールするJRE (JDK) は多分なんでもいいです。というよりJRE 8があればいいっぽい。 あまりにも古すぎるとダメです。
具体的にはバージョン55.0以上のクラスファイルが読み込めるJava 11以上が必要となります。
本noteではMicrosoft Build of OpenJDKを使用します。
ダウンロードページから最新のWindows向けインストーラーをダウンロードし、指示に従ってインストールしてください。
ぶっちゃけjava.exeに対してPATHが通っていれば多分なんでもいいのでお好きなもので構わないと思います。
インストール完了後は一度PCを再起動してください。PATHが通りません。
もし java に対して古いJavaが通っているようならgnirehtet-run.cmdの先頭にある「java」を新たにインストールしたOpenJDKのjava.exeのパスに書き換えてあげる必要があります。
adb用ツールをダウンロードする
こちらのページから「SDK Platform-Tools for Windows をダウンロード」をクリックし、利用規約に同意して最新のリリースをダウンロードしてください。
ダウンロードしたzipを展開し、「platform-tools」ディレクトリ内にある以下のファイルをgnirehtet.jarがあるディレクトリに配置してください。
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 (以下クライアント) は少し弄る必要があります。
STREAMINGタブ内「Synchronous Spacewarp」「Video buffering」をオフにしてください。
それぞれ「FPS低下時のフレーム補間」「映像のバッファリング」です。
有線接続の場合バッファリングをしてもそこまで変わらないどころか (微量とはいえ) 遅延が増えるのでオフにしても問題ないならオフにしておくとお得。
STREAMINGタブ内「VR Bitrate」を100Mbps以上まで上げてください。単純にその方が綺麗になるからです
「GPUは強いけどネットワークが弱い」という理由でGraphics QualityやFrame Rateを上げ渋っている方はついでに上げてあげるといいと思います。
ただし上げた分だけフレームレートは低下し、またエンコード/デコード遅延も増加するため、GPU性能と自身の許容できる遅延の幅と相談して設定してください。
ただし、Java版では150Mbps以上の通信を流そうとすると不安定になるようです。
余裕を持って100 - 120Mbpsぐらいに設定しておくのがいいんじゃないでしょうか。自身の画質許容幅と相談してください。
ちなみにAir Linkでは200Mbpsが公式でサポートしている最大値です。
VR接続をする
gnirehtet-run.cmdを起動
QuestとPCをUSBで有線接続
(USBデバッグを許可 & VPN接続を許可)
VD接続
ぶっちゃけgnirehtet起動してUSB繋いでVD繋ぐだけなので人によっては1ステップしか増えません。私がそうです
gnirehtetを起動 & 有線接続
さきほど改変したgnirehtet-run.cmdを起動するだけです。
その後Questを被った状態でQuestとPCをUSBケーブルで接続してください。Questを被ってないとUSBデバッグのプロンプトに気付けなかったりするためです。PC画面とかUSBポートは鼻の隙間などから気合で見てください。
初回接続の場合はUSBデバッグの許可とVPN接続の許可が求められます。
必ずどちらも許可してください。
USBデバッグは「このコンピューターからのUSBデバッグは常に許可する」みたいな奴を押しておくと今後が楽。
VPN接続のプロンプトに関しては挙動がいまいち分からず、もしかしたら画面が暗転して出てこないように見える可能性があります。
もしUSBデバッグ許可後画面が暗転したなら以下のRedditの投稿に従ってVPN接続を許可してください。
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. なんかPCと接続できないんだけど (QuestからVDが見えない)
USBを刺し直してgnirehtetを再起動し、再度リバーステザリングを張ってください。必要に応じてVD Streamerを再起動も。
切っ掛けは不明ですが、何らかのタイミングでVD Streamerと正常に通信できなくなることがあるようです。
Q. なんかPCと接続できないんだけど (切断されまくる)
PCとQuestを再起動して再度リバーステザリングを張ってください。
セットアップ後どちらも一回は再起動しないとVDとセッションをうまく張れません。
また、セットアップ後も何らかの切っ掛けでセッションをうまく張れなくなって接続と切断を繰り返すようになる可能性があります。
その場合もPCとQuestを両方再起動してあげれば直るはずです。[要検証]
Rust版でMicrophone Passthroughを使っていませんか?Java版を入れてみてください。
理由は不明ですが、Rust版gnirehtetでMicrophone Passthroughを使うと妙に不安定になります。
このバグ?は既に各所で報告されているようですが、半年近く放置されているので公式での解決は望めなさそうです。
Q. なんか異様に重い
あらかじめQuest側VDのSTREAMING→Show Performance Overlayにチェックを入れておいて、どのLatencyが高いか調べておく必要があります。
Encoding, NetworkingのLatencyが異様に高い場合:
gnirehtetのウィンドウにフォーカスを当ててみてください。
Windowsの持っている? 「フォーカスが当てられているウィンドウに対してCPU時間を多く割り振る」仕様を使ったものです。要検証。
また、adb.exeとjavaw.exeのCPU優先度を「通常以上」か「高」にすると改善されるかもしれません。そのかわりVRゲームやその他ツール類 (XSOverlayとか) が重くなるかもしれないです。
GameのLatencyが高い場合:
ゲームの設定を下げてみてください。
CPU性能が足りていなくて重い場合はどうしようもないです。
DecodingのLatencyが異様に高い場合:
わかりません。(◞‸◟)
左手メニューボタンを2回押してVDに戻ったあともう一回メニューボタン2回押しでVRに戻ってくると直ってることが多いです。
PCとの相性によってはコーデックを変えると改善されるケースもあるようです (ソース: フレンド) 。
Q. たまに落ちるんだけど
USBを刺し直してgnirehtetを再起動し、再度リバーステザリングを張ってください。マジで原因不明。
多分何かのタイミングでgnirehtetのプロセスが固まってしまうことが原因な気はしますが、それにしても再現性がなさすぎる…。
参考資料
完全に書くのを失念していました。該当者様には大変申し訳ないです。
zenn.dev - [上級者向け]PCとUSB3接続したQuest2/3でVirtualDesktop/SteamLinkが利用可
本noteを書くにあたって、とても参考になりました。
ありがとうございます。
Reddit - How do I use virtual desktop with a wired connection?