夜神模拟器和wsl2冲突解决
先秦王今天不熬夜
编辑于 2022年09月19日 18:26

先上干货

1. 打开cmd

2. 运行 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

3. 运行 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

4. 运行 wsl --shutdown

5. 运行 bash

----

6. 运行bcdedit /set hypervisorlaunchtype auto (部分同学需要补充这条命令,见评论区)

下面我讲讲过程

我遇到该问题的背景:

我的Windows需要使用一些linux机的功能,所以安装了wsl2的ubuntu子系统。(看这篇文章的同学应该都安装了wsl2了吧,我就不赘述了。)

小米机械狗产品cyberdog铁蛋,遥控器必须是装了APP的小米手机,还必须是小米10以上的一些新机子(有强制消费的嫌疑)。

买手机之前,我想到可以用电脑模拟器的方式来解决,于是安装了夜神模拟器。但是可惜没有小米10的支持(10月27号仅仅支持到小米9,以后更新可能会有支持。)

时间2021.10.27

第一次运行模拟器时的情况:

在第一次运行夜神模拟器时,弹窗提醒我的电脑打开了Hyper-V功能,模拟器无法正常工作。并提供了一键处理功能。

我对这种一键(黑箱)处理一向比较畏惧,了解Hyper-v后(windows自带的虚拟机),也猜到了大概是wsl2启动了它,并跟模拟器冲突了。但没办法哪怕弄坏wsl2也得试试这个模拟器,毕竟少买一个手机太香了。结果就是使用了一键处理后,不出意外地发现我的wsl没法使用了(不作就不会die)。

此处省略亿点点折腾。。

-------------------------------------------------

一、确认bios设置虚拟机功能仍旧打开。(这一步后来看没什么必要)

  • wsl 官网曾提醒设置bios虚拟机支持:

Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS.

按住shift点击重启按钮,可以打开高级启动页面,选择BIOS。

重启后我发现BIOS虚拟机(VT)设置一直是开启的状态,所以那个一键处理,应该没有关闭这里的设置。

二、重新打开"适用于Linux的Window子系统&#​34;选项。

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

三、重新打开Hyper-v。

  • 上一步完成后,wsl2子系统仍旧提示BIOS设置有问题,经查询资料其实是没有打开Hyper-V的原因:

注意这里不要在"启用或关闭Windows功能&#​34;(命令optionalfeatures)中勾选Hyper-v。

因为最新版的VM是自依赖HyperV的。下面是wsl官网的提示:

Additionally, if you have 3rd party hypervisors installed (Such as VMware or VirtualBox) then please ensure you have these on the latest versions which can support HyperV (VMware 15.5.5+ and VirtualBox 6+) or are turned off.

请直接cmd运行:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

四、重启wsl。

好了,看到这里基本已经解决问题了,但还差一步。

在我重启计算机之后ubuntu不报错了,但是仔细一看,怎么连账户都不显示了!直接黑屏卡死。 直接在命令行中单独输入wsl,也出现了同样卡死现象。

黑屏

这时我输入wsl -l -v 查看子系统状态,输出是正常的。其实此时只差最后一步,重启wsl。

先(关闭wsl功能)cmd运行命令:

wsl --shutdown

再运行: bash

到这里我的wsl恢复了正常,问题解决。

----

补充:(经过评论区反应)

部分同学还需要增加这条指令,恢复hypervisor

bcdedit /set hypervisorlaunchtype auto