VMware Workstation提示/dev/vmmon不存在,执行修复命令均失败求助
解决VMware Workstation启动时/dev/vmmon找不到的问题
兄弟,你碰到的这个问题我简直太熟悉了——根源就是Secure Boot在搞鬼!系统更新后,VMware的vmmon和vmnet这俩核心内核模块因为没被正确签名,直接被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
然后用刚才生成的密钥给vmmon和vmnet签名:
# 签名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




