简介:Unlocker 2.1.1 for VMware 是专门用来在 VMware Workstation/Player 14 和 Fusion 10 上解锁 macOS 安装能力的工具包,面向需要虚拟化运行苹果系统的 IT 运维、开发测试人员以及技术爱好者,能够解决虚拟机软件默认不支持 macOS 的常见限制。该版本已删除对 ESXi 6.x 的实验性支持,并特别提醒升级前必须先完整地卸载旧版 unlocker,否则可能导致 VMware 无法正常使用,建议使用者严格按说明顺序处理。压缩包共 21 个文件,约 15.44MB,主要包含 Windows 批处理脚本、Linux/macOS Shell 脚本、可执行程序、Python 辅助脚本与说明文档,分别覆盖不同平台下的安装、卸载、工具下载和配置校验等环节,方便在多种宿主机环境中快速部署。目前已有 4128 人次学习下载,适合需要搭建 macOS 虚拟机实验环境的中高级 VMware 用户;包内还附有更新日志、许可证及说明文本,可帮助理解版本迭代思路,是一套实用且完整的一站式虚拟化解锁工具集。
1. Unlocker2.1.1 for VMware:让 VMware 认得出 macOS 客户机
同事扔过来一个 .vmx,说里面装好了 macOS,可我按下“开启此虚拟机”,VMware 立刻弹出一句“此客户机操作系统不受支持”。这不是哪一步配错了,而是 VMware Workstation 本来就不把 macOS 放进可用客户机列表。Unlocker2.1.1 for VMware 起的作用就是解除这道限制:给 vmware-vmx 打完补丁之后,新建虚拟机向导里会出现 macOS 系统选项,已经导出的 vmx 也能正常引导。
这工具适合三类人:想在 PC 上装 macOS 虚拟机做开发、联调或打包验证的开发者;维护测试矩阵、需要定期重建 mac 客户机的测试工程师;还有手里攒了一批老 mac 虚拟机模板、升级 VMware 后全部打不开的存量用户。后面两种人最怕的不是装不上,而是补丁失效后不知道去哪里找原因。
2. 解锁的关键不在 guestOS 配置:为什么必须改 vmware-vmx 与虚拟 SMC
2.1 客户机类型白名单:VMware 为什么不认 macOS
VMware Workstation 启动虚拟机时,首先要判断客户机操作系统的类型。这个判断不是靠你填的字符串,而是靠 vmware-vmx 内置的类型表与各类型对应的设备模型。Windows、Linux 各发行版在类型表里有完整条目,支持模块会在虚拟机创建时自动挂载;macOS 的 Darwin 内核虽然也是 UNIX 系,但它的引导方式对固件和 SMC 的要求与普通 x86 系统差别很大,VMware 不打算在 Workstation 产品线上为它提供官方支持,于是类型表里根本没有它。
所以“新建虚拟机向导里选不到 macOS”不是界面做得不够好,而是底层设备模型不支持。即便你手动在 vmx 里写一行guestOS = "darwin20",虚拟机启动时 vmware-vmx 会按未知类型拒绝加载,报错信息往往还是“无效的客户机操作系统”。
你可以做个实验验证这道白名单:随便复制一份 Windows 虚拟机的 vmx,把 guestOS 改成 darwin20,然后启动。VMware 大多会在配置检查阶段直接弹窗报错,连硬件初始化都不会开始。这说明类型检查发生在引导之前,虚拟机根本没机会走到 Darwin 内核那里。
2.2 补丁改了什么东西
Unlocker 的思路是对 vmware-vmx 可执行文件做二进制补丁,把这个类型检查的判定路径打开。补丁落点通常是两处:一是把 darwin 类型放进允许枚举,二是让虚拟机固件层能模拟 macOS 引导需要的 SMC(系统管理控制器)状态。SMC 对 macOS 来说不是普通 PC 上的“南桥芯片”,它在引导早期要向系统固件报告设备信息,macOS 系虚拟机的 smc.version 字段取值和普通 PC 虚拟机完全不同。
这也解释了为什么“只改一行配置”总被证明无效:你写得再像,vmware-vmx 这个黑匣子本身不认识 darwin,它就按老流程走。相比之下,Unlocker 用脚本在可执行文件里做特征替换,vmware-vmx 运行时才会把 mac 客户机当作可支持对象去加载设备模型。
补丁过程听起来像是某种“本地破解”,其实脚本逻辑非常保守:先定位 vmware-vmx 文件,做一份完整备份,再在匹配的特征码位置替换若干字节。多数 unlocker 版本执行完会在同目录留下 backup 文件夹,里面是原始文件。这也是 uninstall 脚本能还原的原因——它找到那份备份,复制回去。
2.3 先分清三种状态:原始、解锁、恢复
拿到包后别急着双击。先搞清楚手里的 VMware 处于哪种状态:
- 原始状态:vmware-vmx 未被修改,macOS 选项不存在;
- 解锁状态:补丁已打入,向导里能选 macOS,且能启动 mac 虚拟机;
- 恢复状态:通过 uninstall 脚本把备份的原始 vmware-vmx 还原回去。
社区里大多数解锁包都带一对脚本:Windows 常见是 win-install.cmd 和 win-uninstall.cmd,Linux 常见是 install.sh / uninstall.sh。文件名各版本略有差异,但逻辑一致:install 前先备份当前 vmware-vmx,uninstall 时再还原。
想确认当前处于哪种状态,最直接的办法是比对文件哈希。Windows 上打开管理员命令行:
certutil -hashfile "C:\Program Files (x86)\VMware\VMware Workstation\vmware-vmx.exe" SHA256 certutil -hashfile "C:\path\to\unlocker\backup\vmware-vmx.exe" SHA256两个输出一致,说明是原始或已恢复状态;不一致,说明补丁还在。路径按实际安装位置调整,Program Files 有空格,要带引号。这套方法在 VMware 升级后尤其有用,不用每次靠“能不能开机”去猜补丁状态。
3. 在 VMware Workstation 上跑通 Unlocker 2.1.1:从关闭服务到验证可用
3.1 第一步,释放 vmware-vmx 的文件占用
Unlocker 要替换的文件是 vmware-vmx,它在虚拟机运行时一直被进程占用。如果 VMware 没关干净,脚本会在写文件时失败,常见表现是执行后看不到任何效果,日志里留下一句 cannot open/access。我一般的习惯是先退托盘图标,再由管理员权限的命令行把相关进程和服务停掉。
以 Windows 为例,管理员权限的命令提示符里执行:
:: 管理员权限执行:结束工作台与虚拟机主进程 taskkill /F /IM vmware-tray.exe taskkill /F /IM vmware-vmx.exe :: 停掉授权服务,不同版本服务名可能略不同 net stop "VMware Authorization Service"如果 taskkill 返回“没有找到进程”,反而说明本来就没在运行,这是正常的。会残留的往往是 vmware-vmx.exe,而不是托盘进程。新手如果分不清服务名,有个更省事的做法:注销当前 Windows 用户再登录,VMware 的后台进程会随会话一并清掉;或者直接重启宿主机后进命令行。相比之下我还是习惯 taskkill,不用动系统。
注意,“虚拟机设置”里的正常关机和这里杀进程不一样。vmware-vmx 关机后进程会自动退出,但只要 VMware Workstation 主界面还开着,托盘和授权服务就还在,补丁脚本同样可能写失败。所以这一步别偷懒。
3.2 第二步,执行安装脚本
把 unlocker 压缩包解压到不含空格、不含中文的路径,比如C:\tools\unlocker21。然后管理员命令行切到该目录,执行安装脚本:
cd /d C:\tools\unlocker21 dir win-install.cmd脚本会依次完成几件事:定位 VMware 安装目录、备份当前 vmware-vmx.exe 到包内的 backup 位置、对 vmware-vmx.exe 打补丁。有的版本还会同时处理 darwin.iso,那是给 mac 虚拟机装 VMware Tools 用的镜像,一并写入安装目录。
为什么强调用命令行而不是双击?双击 cmd 文件时,当前工作目录不一定是你解压的目录,脚本如果按相对路径找 VMware 安装路径或备份目录,就会找错。用cd /d切过去再执行,至少保证工作目录和脚本位置一致。如果 Win10/Win11 的安全策略拦了脚本,先右键脚本文件 → 属性 → 勾选“解除锁定”,再执行。
脚本如果正常,cmd 窗口里应当出现类似 backup existing vmware-vmx 的提示,然后进入 patching 过程。如果输出停在“无法打开文件、访问被拒绝”,十有八九是 VMware 进程没清干净。脚本不会自动重试,你需要把残留进程处理掉,再重新执行一次。
3.3 第三步,用新建虚拟机向导验证
跑完脚本,启动 VMware Workstation,新建虚拟机。到“客户机操作系统”那一步,如果看到 macOS 系列选项(一般按大版本列出,如 macOS 10.15 / macOS 11 / macOS 12),说明补丁已经写入。这一步不需要额外操作,只要下拉框出现了就是成功。
如果是旧的 macOS 虚拟机,直接双击 vmx 也能跑:VMware 不再报“不受支持”,而是进入正常引导流程。若到了这一步依旧被拒,大概率是补丁没写进去,回到第 5 章按清单排查。
验证时有个容易误判的点:向导里能看到 macOS 选项,但虚拟机启动后还是报“不支持”,这种一般是 vmx 里手动写错了 guestOS 值,或者硬件版本过高,和补丁本身无关。新建向导默认生成的 vmx 是最干净的,建议先用向导生成一台再改配置,别一上来就手写。
3.4 Linux 宿主机上的另一套执行顺序
标题是 for VMware,但这个解锁器同时被大量用在 Linux 版 Workstation 上。Linux 上的要点是先停服务,再动二进制。如果你跑的是带图形桌面的发行版,可以直接用 systemctl 管理 VMware 服务:
sudo systemctl stop vmware # 备份原始文件,出问题时可以快速回滚 sudo cp /usr/lib/vmware/bin/vmware-vmx /root/vmware-vmx.bak.$(date +%F) cd /opt/unlocker21 ls -l # 包内脚本命名不完全统一,通常是 install.sh 或 linux-install.sh,以实际解压内容为准 sudo ./install.sh sudo systemctl start vmware路径以实际安装位置为准,不同发行版的/usr/lib和/usr/local结构不一样。如果系统是老式 init 脚本管理 VMware,没有 systemd 单元,就执行sudo service vmware stop或直接调/etc/init.d/vmware stop,原理一样:先停服务,再补丁,再启动。
执行前记得确认脚本有执行权限。解压到 Linux 后文件权限可能丢失,先chmod +x install.sh再运行,避免出现 permission denied 这种不必要的报错。Linux 下脚本执行失败最常见的原因还是 VMware 服务未完全停止,和 Windows 下的体验几乎一样。
4. macOS 虚拟机装完后的关键配置:硬件版本与 .vmx 参数怎么调
4.1 硬件兼容性版本先别急着升
解锁成功后,新建虚拟机向导会询问硬件兼容版本。已有 vmx 的老用户常犯一个错:被 VMware 提示“此虚拟机的硬件版本较旧,是否升级?”后无脑点“是”。升级动作会重写虚拟设备集合,包括芯片组、ACPI 表、SMC 设备描述。macOS 引导对这些描述相当敏感,升级后如果新版本与 unlocker 补丁的特征不匹配,最容易出现启动阶段直接卡住,这不是配置问题,是版本组合问题。
| 场景 | 建议 | | 已有 macOS 虚拟机 | 保留原硬件版本,不做升级 | | 新建 macOS 虚拟机 | 采用宿主默认版本,通常为 15.x / 16.x | | 批量维护模板 | 所有模板统一版本,并在模板内记录 .vmx 差异 |
如果你的 VMware Workstation 已经升级到很新的版本,而 unlocker 还是 2.1.1 这个老版本,新建虚拟机时可以把硬件兼容版本手动往回调一档再创建,兼容性反而更稳。硬件版本不影响客户机里能跑什么系统,只影响虚拟设备集合的呈现方式。
4.2 .vmx 里需要手动校准的字段
用向导创建的 mac 虚拟机一般会自动写好 guestOS 与 SMC 相关字段,手工从 vmx 创建或从模板克隆时,就需要自己补。常见的一组字段如下:
guestOS = "darwin20" smc.version = "0" board-id.reflectHost = "TRUE" hw.model.reflectHost = "TRUE" serialNumber.reflectHost = "FALSE" smbios.reflectHost = "TRUE"guestOS决定 vmware-vmx 用哪套 Darwin 设备模型。macOS 11 对应 darwin20,macOS 12 对应 darwin21,对应关系要准确,写错高版本系统会引导失败。smc.version是踩坑率最高的字段。macOS 引导依赖虚拟 SMC 的模拟状态,取值为 0 时补丁后的 vmware-vmx 会走兼容路径;如果缺失,很多系统会卡在引导早期,连安装界面都到不了。board-id.reflectHost和hw.model.reflectHost把宿主的硬件标识透传给客户机,让 macOS 的配置流程更容易通过。serialNumber.reflectHost一般设成 FALSE,序列号保持虚拟机自身标识,避免多台克隆虚拟机出现硬件信息冲突。smbios.reflectHost让 DMI 信息更接近真实硬件,配合前几个字段可以避免部分系统版本在引导中期反复重启。
darwin 版本对应不需要死记,给一个查法:在已经能开的 mac 虚拟机里执行uname -r,拿到内核主版本号后对照:
| 系统版本 | guestOS 常见取值 | | macOS 10.15 | darwin19 | | macOS 11 | darwin20 | | macOS 12 | darwin21 | | macOS 13 | darwin22 | | macOS 14 | darwin23 |
不过,只要向导里能选对应系统版本,直接让向导生成 vmx 是最省事的,手写字段只在模板克隆和迁移场景才需要。顺便说一句,批量克隆时建议先确认模板 vmx 已包含上述字段再克隆,否则克隆出来的机器可能只有 guestOS 是 darwin,其他关键字段缺失,全部无法引导,排查起来非常累。
4.3 CPU、内存与图形加速的常用配法
内存方面,最低给 4GB,macOS 12 及以上建议 8GB 起。低于 4GB 时,安装阶段就可能出现进度条卡死,和补丁没关系,就是内存不足。CPU 核心数不要超过宿主逻辑线程数,常规 2 到 4 核足够。虚拟化设置里记得开启“虚拟化 Intel VT-x/EPT”或 AMD-V/RVI,macOS 对虚拟化支持的敏感度比 Windows 高不少。
磁盘控制器优先选 NVMe,SATA 也能用,但 NVMe 在 mac 客户机里的识别更干净,IO 表现也更接近真机。图形方面,打开“加速 3D 图形”并把显存调到 1GB 或 2GB,否则桌面动画会明显掉帧。不要手动把虚拟显卡型号改成真实 mac 型号,虚拟显卡就让它走虚拟显卡驱动。
网络适配器也有讲究。mac 客户机对虚拟网卡驱动的内置支持有限,e1000e 通常开箱即用,vmxnet3 在部分系统里需要额外装驱动才能识别。稳妥起见,第一次安装用 e1000e;如果后续做 CI 或传输大文件对网络性能敏感,再在装好系统、装好 VMware Tools 之后切换 vmxnet3。
5. Unlocker 高频问题排查:5 个从装不上到开不了机的坑
5.1 双击脚本一闪而过,补丁没有生效
现象:运行脚本后没有输出,或窗口一秒消失,重启 VMware 仍然没有 macOS 选项。
原因:Windows 权限不足,脚本没权限写 Program Files 下的 vmware-vmx;或者解压路径含空格、中文,脚本拼接路径时出错;实时防护拦截了脚本进程。
解决:右键“命令提示符”选择“以管理员身份运行”,先cd /d C:\tools\unlocker21再执行win-install.cmd。工作目录与脚本目录保持一致,路径保持纯英文无空格。执行前临时关闭杀毒实时保护,或者右键脚本文件勾选“解除锁定”。脚本正常时会在窗口停留并打印 backup 和 patching 字样,而不是一闪而过。
5.2 解锁后 macOS 选项依然是灰色
现象:向导里出现了 macOS 列表,但选择后“下一步”按钮置灰,或者只有几个旧版本可选。
原因:当前虚拟机的硬件兼容版本超出补丁能识别的范围;或者 2.1.1 这个版本太老,对新版 vmware-vmx 的特征段匹配不上。
解决:新建虚拟机第一步把硬件兼容版本切到 15.x 再试。如果目标系统版本不在列表里,选最接近的高版本,比如想装 macOS 13,先选 macOS 12,装好后多数情况能正常引导。如果两个办法都无效,说明补丁与当前宿主版本不兼容,需要换更新版 unlocker。这是版本匹配问题,不是操作问题,别反复重试消耗时间。
5.3 装系统时卡在 macOS 引导界面,或进度条中途反复重启
现象:macOS 安装开始后,虚拟机到引导界面就停住或自动重启,进度条永远走不完。
原因:SMC 参数没有正确写入;固件类型被设成了 BIOS;内存低于最低要求;补丁只生效了一半。
解决:确认虚拟机设置里的固件类型是 EFI,macOS 不支持 BIOS 引导;检查 vmx 里是否有smc.version = "0";内存调到 8GB;硬盘控制器换成 NVMe 再试。还有一个容易忽略的原因:VMware 的“加密虚拟机”选项会干扰 macOS 引导,把它关掉。如果 vmware.log 里一直出现 SMC reset 字样,优先检查 smc.version,而不是重装系统。
5.4 VMware 升级后解锁失效
现象:升级 Workstation 版本后,原来能开的 mac 虚拟机全体弹“不受支持”。
原因:升级包重新覆盖了 vmware-vmx 可执行文件,补丁被还原成原始状态。
解决:重跑解锁脚本即可。建议养成固定顺序:先备份当前 vmware-vmx 原始文件,再升级 VMware,升级完成后重跑 unlocker 安装脚本,最后打开一台测试虚拟机验证。不要反过来,先补丁再升级等于白打。
升级后不确定补丁是否还在,最快的判断办法是哈希对比。升级前后同一路径的 vmware-vmx 哈希如果变了,说明补丁被覆盖,需要重新执行补丁脚本。这套方法比等报错更主动。
5.5 杀毒软件把补丁后的虚拟机文件当病毒清除
现象:启动虚拟机时提示找不到 vmware-vmx.exe,打开杀毒软件隔离区,里面躺着一个同名文件。
原因:vmware-vmx.exe 被修改后与杀毒软件特征库里的原版不一致,被判定为高风险篡改。
解决:先从隔离区恢复文件;再把 VMware 安装目录和 unlocker 解压目录加入白名单;最后以管理员身份重跑一遍补丁。如果恢复失败,用 VMware 安装程序的“修复”功能还原原始文件,再重新打补丁。注意不要先跑 uninstall 再跑 install,那样可能把被隔离后残缺的文件当成“原始文件”备份,后续恢复时更麻烦。
6. 从解锁到可持续:用日志验证与固定流程避免反复翻车
6.1 vmware.log 里藏着最终判决
补丁成功与否,向导下拉框说了算;但“能选 macOS”不等于“能稳定启动”。我每台 mac 虚拟机安装时都会在虚拟机所在目录开一个终端,实时看日志:
# 在虚拟机所在目录执行 tail -f vmware.log正常引导的日志里,与 SMC 相关的状态会被客户机接受,日志段落是连续的、没有中断报错。如果看到 SMC 相关的 reset 或 error,说明虚拟 SMC 模拟没对上,别硬重启,回到第 5 章逐条排查。Windows 下也可以用 PowerShell 的 Select-String 在 vmx 所在目录检索关键字,效果一样。
日志还有一个用途:判断补丁之后虚拟机到底卡在哪一步。引导早期的问题多半在固件和 SMC,引导中后期的问题多半在磁盘控制器或显卡驱动。看日志定位,比重装系统有效率得多。
6.2 把解锁流程固化成一套固定动作
我会在每台宿主机上放一个 tools 目录,里面只放三样东西:unlocker 解压包、升级前备份的 vmware-vmx 原文件、记录 .vmx 关键字段的说明卡。所有 mac 虚拟机维护都按固定顺序走:改 vmx 前先备份 → 运行补丁 → 用一台探针虚拟机开机验证 → 再打开业务虚拟机。流程走顺之后,问题基本集中在版本不匹配这一类,操作层面反而很少翻车。
我的习惯是,每次手工改过 vmx,就把改动过的字段复制到同级 notes.txt,并写明当时用的 VMware 版本和 unlocker 版本。下次升级、迁移、换机器,只要按 notes 里的版本组合复现,不依赖记忆。这个习惯帮我省掉了大量重复排查时间,希望你也能少踩几个坑。
本文还有配套的精品资源,点击获取