You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VMware Workstation提示/dev/vmmon不存在,执行修复命令均失败求助

解决VMware Workstation启动时/dev/vmmon找不到的问题

兄弟,你碰到的这个问题我简直太熟悉了——根源就是Secure Boot在搞鬼!系统更新后,VMware的vmmonvmnet这俩核心内核模块因为没被正确签名,直接被Secure Boot拦在了门外,所以才会弹出找不到/dev/vmmon的错误,后续那些命令执行失败也都是连锁反应:

  • 执行sudo mokutil --import MOK.der出错:要么是你没生成正确的MOK密钥/路径不对,要么是之前导入过但没完成密钥验证流程;
  • sudo modprobe vmmon失败:本质是模块没被Secure Boot信任,内核拒绝加载;
  • sudo vmware-modconfig --console --install-all出错:要么是缺编译依赖(比如内核头文件没装),要么是编译好的模块还是过不了Secure Boot的签名校验。

下面给你两种解决思路,按需选择:

一、快速临时解决:关闭Secure Boot

这是最快见效的方法,适合不想折腾的情况:

  • 重启电脑,按对应按键进入BIOS/UEFI界面(不同品牌不一样:联想一般是F2,戴尔F12,华硕Del,惠普F10);
  • 在界面里找到「Secure Boot」选项,把它改成「Disabled」;
  • 保存设置重启,再打开VMware试试,虚拟机应该能正常启动了。

二、永久解决:给VMware模块签名(保留Secure Boot)

如果不想关Secure Boot,就给模块做合法签名,让内核信任它:

步骤1:先装编译依赖

VMware需要编译适配当前内核的模块,所以得先装内核头文件和编译工具:

# 如果你用Ubuntu/Debian系发行版
sudo apt install linux-headers-$(uname -r) build-essential gcc make

# 如果你用Fedora/RHEL系发行版
sudo dnf install kernel-devel-$(uname -r) kernel-headers-$(uname -r) gcc make

步骤2:生成并导入MOK密钥

MOK是「Machine Owner Key」,用来让Secure Boot信任我们自己签名的模块:

# 生成密钥对,设置一个密码(一定要记牢,后面重启要用到)
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VMware Modules/"

# 导入密钥,输入刚才设置的密码
sudo mokutil --import MOK.der

如果提示密钥已存在,不用管,直接继续下一步就行。

步骤3:重启完成MOK验证

重启电脑后,会进入一个蓝色的MOK管理界面:

  • 选择「Enroll MOK」;
  • 选「Continue」;
  • 输入刚才设置的密码;
  • 选「Yes」确认签名;
  • 系统会自动重启,这时候Secure Boot就信任你的密钥了。

步骤4:签名并加载VMware模块

先让VMware重新编译适配当前内核的模块:

sudo vmware-modconfig --console --install-all

然后用刚才生成的密钥给vmmonvmnet签名:

# 签名vmmon模块
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /lib/modules/$(uname -r)/misc/vmmon.ko

# 签名vmnet模块
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /lib/modules/$(uname -r)/misc/vmnet.ko

最后加载模块:

sudo modprobe vmmon
sudo modprobe vmnet

现在再打开VMware,就能正常启动虚拟机了!

注意事项

  • 每次系统更新内核后,都需要重新执行「步骤4」的操作(因为新内核会生成新的模块文件),你可以把签名命令写成一个脚本,下次直接运行就行;
  • 如果vmware-modconfig还是报错,可能是你的VMware版本太老,不兼容新内核,试试升级到最新版的VMware Workstation。

内容的提问来源于stack exchange,提问作者cong

火山引擎 最新活动