この文章は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.conf
のMODULES
の中にamdgpu
を入れてあげてsudo mkinitcpio -P
しましょう。
基本的に元記事の通りです。
追記したらgrub-mkconfig
でgrubの設定を更新してから再起動すれば有効化されます。
有効化の確認は
dmesg|grep -e DMAR -e IOMMU
で良いのですが、有効化に失敗している場合でも何か出力されることがあるのでArchWikiにある出力例などと見比べて有効化されてるか確認することをおすすめします。
IOMMUグループの確認は元記事のcheckgroup.sh
がそのまま使えます。使いましょう。
vfio-pciモジュールのロードは本当にそのままなので書きません。
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環境と同等なほどスムーズに進みます。
わたしの環境では、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/