2022款幻15折腾Linux KVM虚拟机+显卡穿透+硬盘直通记录
人在家里闲的久了总会多少憋出点毛病来,不找事来做总觉得浑身难受。所以最近一段时间我都在Windows和Linux间反复横跳(指Linux搞炸了又回到Windows下用几天,然后再回过头来装Linux),闲得蛋疼了属于是。
但是这一周折腾Linux的过程却异常的顺利,基本没出什么致命的错误。于是就一步步走到KVM+显卡直通这一步了。
读前提示+免责声明:注意标题,这只是个人记录,并非教程。本文只是如实记录了这一周下来我在Linux上安装各种软件+KVM的操作过程。(作为一个存档)并非真正教程。很多软件包的安装也只是针对幻15这个型号。
本人只是Linux入门新手,大部分操作都基于官方wiki+小部分个人摸索,如有错误还请多多指出,在评论区交流。定备份好重要数据。由于Linux更新快,操作内容请以wiki为准。
目录:
1.开头
2.发行版选择
3.安装系统+设置
4.奥创中心的替代品
5.KVM + 显卡直通 + 硬盘直通
6.随时间更新的补充项
开头
先说一下机器配置
CPU:6800HS
显卡:3060 Laptop
硬盘:西数 512G+三星 1TB(虚拟机直通单块硬盘需要)
内存:40G(开虚拟机大内存是刚需)
网卡:MT7922 无线网卡
发行版选择
得益于前几次踩过的坑,直接选择了基于Arch的Manjaro + KDE(因为懒,而且怕Arch配置的时候搞出什么岔子来)。Manjaro对于我来说到目前为止都很稳定,KVM配置也很顺利。Manjaro直接安装在三星的硬盘上,西数的后面用来做直通硬盘给虚拟机。
安装系统+设置
安装前先在windows下将显卡模式切换成混合模式,独显直连安装会引发很多后续问题。启动项选择开源驱动,自带的闭源驱动会出问题。
(另外记得插好网线,默认下无线网卡是暂时用不了的)
安装进入系统后第一件事情:更新软件+更新内核
可能你看到这篇文章的时候Manjaro官方的安装镜像已经更新了。但是我就因为安装后没有立即更新系统,就遇到了安装浏览器导致glibc损坏的问题,不过还好进命令行模式救回来了。更新完记得重启。
另外在幻15要使用5.17以上的内核(后面的优化软件会用到),我这里直接更新到5.19内核。

重启,然后安装专有显卡驱动:

之后再次重启电脑。
(注:有时候会遇到卡在重启界面比较久的情况,耐心等一下就行了)
其他的软件就不用多说了,这里主要是针对这台电脑做出的一些特定软件安装。
补充:要安装base-devel包来准备好基础环境,后面很多地方会用到。
无线网卡问题:mt7922的网卡驱动实际上已经被合并到5.18以及更新的内核里了,但是manjaro下还缺少控制它的工具。所以:
我把这两个工具一装上,就能在右下角看到WiFi了

(注意:该型号的网卡的蓝牙目前还是无解的状态)
音响问题:如果不用外接声卡或者音响的话,你会发现默认状态下音量调节只能调节高音喇叭。
原因出在系统默认配置下,只能控制其中两个喇叭,按照这篇教程就能解决问题:https://wiki.archlinux.org/title/ASUS_Zenbook_UX431
打开HDAJackretask

按照图里面的方法设置,点击Install boot override,然后重启。如果还不解决的话就把两个设置换过来(即Back和LFE互换)
到目前为止,硬件已经差不多安顿完了,想要人脸识别的可以安装Howdy,在这里就不详细的陈述了。接下来才是比较重要的部分
4.奥创中心的替代品
在Windows上有奥创中心可以设置电脑的键盘灯,电脑模式,风扇曲线,切换显卡等。那么在Linux下也有相对应的替代品:asusctl和supergfxctl(两者是同一个项目)
注意,asusctl对于幻15的支持还稍微欠缺,主要是自定义风扇曲线无法使用。
另外,在linux下,AMD CPU的笔记本电脑还不支持英伟达显卡的功率增强,意味着这台电脑的显卡最高只能跑在80瓦的功率。但是个人认为并无大碍,因为BIOS缺陷,导致这台机器的显卡增强模式还不如普通模式,具体情况可以看我前两篇文章。
asus-linux项目官网:https://asus-linux.org/(有问题可以先看官网FAQ)
asusctl和supergfx:https://gitlab.com/asus-linux
安装:
以下所有的命令都源于官方的readme,请以随时查看并官方的命令为准。
这时候在终端输入asusctl应该能得到以下输出

另外这个工具自带了一个GUI,应该能在设置选项卡里面找到

到现在还差显卡切换的功能没有实现了,所以下一步就是安装supergfxctl。其实和上面的安装过程没什么区别
然后重启,使其生效。重启后在终端输入supergfxctl应该能看到输出

supergfxctl也有GUI可以选,官方的是GENOME桌面扩展,然后有大神自制了KDE桌面的版本:https://gitlab.com/Jhyub/supergfxctl-plasmoid。
另外如果你是用的是Arch系,可以直接通过AUR来进行安装

效果图是作者本人的截图,我就不安装了,因为显卡切换的场景用的比较少。
另外根据supergfx的readme描述,有两种切换模式可以选,一种是无需重启,另一种需要重启。具体的设置方法是编辑GRUB启动命令。

当后面的值为1时,切换显卡需要重启。后面的值为0时,只需要注销系统再登录即可。我这里改成1 ,readme中也没有说明1和0会对系统别的部分产生什么影响,我自己两个都设置了一遍也没发现什么区别。所以.......我自己也是被蒙在鼓里。
(谷歌了一下,发现大家说法各不相同。不过要记住这篇文章只是我在幻15上折腾的一个记录,很多操作我只能保证对这台电脑起作用。所以就没必要纠结那么多)
无论如何,修改完成之后,重新生成GRUB后重启(每个发行版的指令不同)
到现在,整台电脑的使用体检基本上已经到位了。接下来就是难点:KVM+显卡直通虚拟机
5.KVM + 显卡直通 + 硬盘直通
先声明:我对KVM的理解程度是“专业级别的一窍不通”,都是按照各种readme和wiki进行的(所以请随时参照wiki)。有些操作和命令到底管不管用?我也不懂,但是到最后就是能用(笑)。不过再次:文章只是记录,不是教程。
前置准备:第二台显示器,外接一套键盘鼠标。因为到时候这两者都是虚拟机独占的。
既然我对KVM不精通,那还是直接端上wiki链接罢
KVM:https://wiki.archlinux.org/title/KVM
QEMU:https://wiki.archlinux.org/title/QEMU
Virt-Manager:https://wiki.archlinux.org/title/Virt-Manager
从上到下流程走一遍之后,应该就能在看到虚拟机管理器了:

在安装完成之后,可以先试着新建并启动一个虚拟机,遇到什么错误的话Google一下。
显卡直通 + 硬盘直通:
先上wiki链接:https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF,下面所有操作都是根据官方wiki来的。
第一步:设置显卡模式(supergfx的readme文件提及的操作)
前面已经安装好了supergfxctl,那么就要先将独立显卡调整到“计算”模式,确保等下隔离显卡时不会出现问题。
(注:本步骤的“有用性”存疑,需要进一步验证。具体原因后面会写到)
第二步:开启IOMMU支持
再次编辑GRUB文件(方法和上面相同,编辑完成后记得重新生成GRUB,重启)


(注:在写这篇文章的时候,上面这行命令对我失效了,没有显示IOMMU启用,但是在下面的IOMMU分组操作中,IOMMU已经被事实上的启用了)
第三步:检查IOMMU分组情况
全部复制粘贴到终端中,回车运行。如果IOMMU被启用了应该能得到以下输出。

注意IOMMU Group,独立显卡显卡有两个设备,都在Group 15,而需要直通的硬盘在Group 20.一定要注意该设备是否独占了一个组,只有这样才能确保直通成功。
在这台笔记本上还不错,IOMMU分配符合预期。那么就把这几行信息完整的复制下来(原因是需要末尾的那一串ID)
第四步:开始直通设备
(注:下面这些步骤相对官方wiki有改动,但是会更加方便一些)
wiki上是通过加载模块的形式来完成直通,但是我在教程视频里找到了通过GRUB命令来隔离PCI设备的方法。从命令上来说,两者命令其实并无差别(但是前者会更加安全一些?)再次,再次打开GRUB文件。

把刚才得到的设备ID填入,保存并重新生成GRUB文件,但不要重启,还有一步。
(这里的开机命令是按序执行的,按理说应该是“设置显卡模式,开启IOMMU,隔离设备”,但是设备最终都会被隔离出来,那么前面的设置显卡模式意义真的存在吗?希望有人来解答一下)
除此之外还需要加上一层保险,确保隔离是成功的

打开文件,在MODULES后按顺序填入以下命令。

保存退出,重新生成配置信息
到现在为止,设备隔离应该就已经完成了,重启检验一下效果。如果不出什么问题的话,现在应该已经变成了AMD的显卡,而且在磁盘管理中也看不到另一块硬盘的影子了


第五步:为开启虚拟机做好准备
外接好显示器到幻15的HDMI口上(C口输出还没测试),接好鼠标键盘,准备好windows镜像(注:如果安装win11的话,还需要安装一个软件TPM模块,Google教程有)

按照提示创建好虚拟机,中间的步骤要注意:1.虚拟硬盘不用创建,因为是直通nvme硬盘。2.最后一步勾上“安装前自定义”
启动固件

固件有好几种,大部分情况下都是选择OVMF_CODE,如果要安装win11的话,要选择带“secure”标识的支持安全启动的固件。
CPU设置

在这里把套接字(Socket)设置成1,然后设置核心数,每个核心的线程数。
这里如果忘记改的话,举个例子:我在创建向导里面设置了12线程,但是他默认的结构是“12个插槽,插了12个单核的CPU”,然后windows又不支持那么多CPU,导致进系统一看只有两个线程还死慢。
另外由于I和A家的CPU线程分布各有不同,想要获得最高性能有可能需要手动将线程与核心绑定,但是在这里AMD的默认分布性能已经足够好了,就不折腾那么多。
关于CPU拓补结构,在wiki的PCI-Passthrough教程文章下面有详细介绍。
PCI和USB设备
努力了这么久就是为了这一刻。点击左下角添加硬件,添加PCI主机设备。分别添加显卡和硬盘(特别是注意显卡要穿透两个)



然后就是USB键盘鼠标。在终端下面
然后通过拔插设备来判断对应的USB设备(在这里就是外接的USB键盘鼠标),加进虚拟机


另外还有一个设置,关掉内置的虚拟显卡。

不选None的话,到时候Host也会显示画面,外接显示器也会显示画面,然后你的鼠标还没办法在两个屏幕直接横穿。
引导项:
这里可以等下再设置,不算大问题,但是提前设置就方便一些

上面的SATA设备是我们的系统安装镜像,等到系统安装完成以后可以取消引导或者删除他。然后下面的就是我们的nvme硬盘。
TPM:对win11有效,在添加硬件一栏可添加一个软件TPM模块(前面安装过了的话)
开机
接上显示器(激动的心颤抖的手,期待奇迹的发生)开启虚拟机
如果一切都没问题的话,第二个显示器应该就会有输出,并提示按下任意键进行CD/DVD引导。接下来就和正常安装windows没啥区别了。
另外这个时候,你外接的USB键鼠就应该是被虚拟机独占的状态。


性能实测
既然都是直通运行,那么性能自然不会很差了,这里就不做太多测试。
但是可以安装VirtIO驱动来提高网卡的性能

补充:如果想把显卡换回给Linux?hmmmmm,这个我没想过。不过按照道理,应该把GRUB和mkinitcpio里的改动删掉,然后重新生成就好了。
6.随时间补充的部分
2022年8月14号:
不懂为什么莫名其妙把linux的电池电量显示搞崩了,可能是因为内核读取到了错误的电池信息,无论何时都显示“已连接电源但功率不足”。解决方法:直接把内核降级到5.18后恢复正常,另外其他功能未损坏。
把显卡换回到linux下,实际上只用把GRUB里面显卡的id给删掉就好了,mkinitcpio不用动也行,我就把GRUB的设置复制两行,需要的时候注释掉其中一行再生成GRUB就行。
2022年8月21号:
还是花点钱换掉了联发科的网卡,换成AX210。结果相当Amazing啊,使用体验直线上升。
说来也没啥毛病,毕竟iwd原本就是intel的(逃)
对了,KVM直通以后可以考虑用HDMI欺骗器+Looking Glass的方案来实现一个显示屏使用。
另外Looking Glass支持键鼠、文字剪切板在虚拟和实体机中无缝切换。这样就可以不用单独直通USB键鼠了。
感谢阅读,有什么问题或者错误可以在评论区提出来。以上的操作仅保证在本人的的硬件和软件条件下生效。
2022年9月22号:
Linux5.19.9内核添加了电池电量显示bug的修复。