Skip to content

Instantly share code, notes, and snippets.

@coke12103
Created June 17, 2021 17:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save coke12103/45355c88ae936602bb04f6f750f17a07 to your computer and use it in GitHub Desktop.
Save coke12103/45355c88ae936602bb04f6f750f17a07 to your computer and use it in GitHub Desktop.
windows in ArchLinuxでVRCをRadeonでもやってみた

windows in ArchLinuxでVRCをRadeonでもやってみた

この文章はTLに唐突に流れてきたwindows in ArchLinuxで無線フルトラするを見て深夜にテンション爆上がりでやったことを翌日の深夜にまとめたものです。 文章はほとんど書かないので読みにくいかもしれませんがご了承を。

はじめに

わたしは普段はArchLinuxで生活していて、WindowsとはVRをするまでほとんど無縁でした。 VRChatも初めのうちはArchLinux上のProtonでデスクトップモードで遊んでいたほどです。

しかし、LinuxでVRをするためにはValve IndexやHTC Viveなど、ネイティブでSteam VRに対応したヘッドマウントディスプレイが必要であり、Oculus QuestはLinuxには公式で非対応。 一応、非公式の無線化をするためのソフトウェアの1つがLinux対応を進めてはいるもののそちらも実用段階とは言えません。

そのためわたしは、PCにSSDをもう1本追加してそこにWindowsをインストールする方法でデュアルブートしてVRを楽しんでいました。 しかし毎回再起動するのは結構面倒です。できることならLinuxの上でVRCをしたい...

そんな時ふとMisskeyのTLに流れてきたこの記事、すごくやりたいことに近いのではないか。 そう思ってやってみたら以外といい感じだったので文章として残したい。そんな感じで書いてます。

基本的な手順は元記事の通りなので、この文章では基本的には元記事に参照を投げつつRadeon環境で読み替えるべき場所とわたしが引っかかった場所のみを詳しく書いていきます。

環境

構成は以下の通り。

項目
ホストOS ArchLinux
ゲストOS Windows 10 Home
CPU Core i5 8600(6C6T)
RAM 32GB
GPU1 RX480
GPU2 UHD Graphics 630
ストレージ HDDを120GB割り当て

わたしは容量が足りなかったのでストレージにHDD使っていますが、VR空間上でわかりやすくモタツキを感じるのでSSDを推奨します。 CPUも6C6Tのうち4C4Tを割り当てましたがそちらもやや不足を感じました。

ネットワークドライバーはNetworkManager、Questの無線化はALVRを利用します。

必要なものの準備

元記事を参考にRadeon + Intel iGPU環境で必要なものだけ入れていきます。

optimus-managerはNVIDIA環境ではないのでいりません。

sudo pacman -S mesa vulkan-radeon xf86-video-amdgpu vulkan-intel intel-media-driver qemu libvirt ovmf ebtables dnsmasq bridge-utils virt-manager

AMDGPUドライバではKMSは自動で有効になっているので有効化の手順はしなくていいですが、不安なら/etc/mkinitcpio.confMODULESの中にamdgpuを入れてあげてsudo mkinitcpio -Pしましょう。

IOMMUの有効化とグループの確認

基本的に元記事の通りです。 追記したらgrub-mkconfigでgrubの設定を更新してから再起動すれば有効化されます。

有効化の確認は

dmesg|grep -e DMAR -e IOMMU

で良いのですが、有効化に失敗している場合でも何か出力されることがあるのでArchWikiにある出力例などと見比べて有効化されてるか確認することをおすすめします。

IOMMUグループの確認は元記事のcheckgroup.shがそのまま使えます。使いましょう。

vfio-pciモジュールのロードは本当にそのままなので書きません。

GPUを分離するスクリプト

Radeon環境ではoptimus-managerが利用できないため、方法はこれしかありません。

元記事のswitchgpu.shがそのまま使えます。PCIデバイスIDは1002:67dfって感じのやつです。わたしは間違えて01:00.0って入れたので書いときます。

また、わたしの環境だけかもしれませんが、BIOSでPCIe側のグラフィックで起動する設定にしているとGPU分離時にSDDMがGPU側に付いてるディスプレイに出力しようとしてフリーズするので内蔵グラフィックで起動するようにしておきます。

仮想ブリッジを作成

NetworkManagerでの作成を書きます。

  • 仮想ブリッジの作成
nmcli con add type bridge ifname enp2s0 master br0
nmcli con mod bridge-br0 ipv4.method manual ipv4.address "192.168.1.11/24" ipv4.gateway "192.168.1.1" ipv4.dns 192.168.1.4
nmcli con modify bridge-br0 bridge.stp no

ipv4.address, ipv4.gateway, ipv4.dnsは現在のホストマシンのネットワーク設定をそのまま入れます。

  • 仮想ブリッジと物理NICを繋げる
nmcli con add type ethernet con-name br-slave-1 ifname enp2s0 master br0
nmcli con up br-slave-1
nmcli con up bridge-br0
  • 物理NICの設定を削除
nmcli con del '有線接続 1'
systemctl restart NetworkManager

その後

ここから先の手順はすべて元記事と同じです。 強いて言うならRadeonのドライバーは自分で入れる必要があります。

VRCを起動できるまでのセットアップはここまでの手順と比べればすごく簡単です。 実機Windows環境と同等なほどスムーズに進みます。

実際にVRCしてみて

わたしの環境では、CPUパワーが足りてない点、ディスクがHDDという点で多少カクカクはしましたが、それでも普通にプレイ可能でした。 40人近く人が居るPublicにも行ってみましたが特にクラッシュ等もなく、スペックが確保できるなら割と現実的かなって感じです。

おわりに

ここまでの手順はかなり複雑で大変でしたがそれでもすごく面白かったです。 実際、始めた時にはこんなに普通に遊べるとは思っていませんでした。

わたしの環境ではホスト側のスペック不足、手持ちのQuestが壊れていてそれの応急処置に使っていた荒技がVM上だとできない、などの理由で実用ラインには届きませんでしたが、それらの要因がなければ間違いなく常用していたと思います。

最後に、すばらしい元記事を書いてくださったSumiさんに最大限の感謝を。

参考

https://qiita.com/Sumi-Sumi/items/0900d6accd9a7f9d02c2 https://wiki.archlinux.jp/index.php/OVMF_%E3%81%AB%E3%82%88%E3%82%8B_PCI_%E3%83%91%E3%82%B9%E3%82%B9%E3%83%AB%E3%83%BC https://wiki.archlinux.jp/index.php/Kernel_Mode_Setting https://github.com/Askannz/optimus-manager https://github.com/powwu/pso2-na-linux/wiki/Dedicated-GPU-on-VM https://lab.unicast.ne.jp/2017/03/10/centos-7-3-nmcli-bonding-and-bridge-setting/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment