简介:unlocker208 是面向需要在 VMware Workstation 上运行 macOS 的开发者与测试人员的必备补丁,用于解除虚拟机对苹果系统的限制,使新建虚拟机时能选中 Apple 机型并正常引导启动。压缩包共 18 个文件、约 9.61MB,由 8 个 sh 脚本、3 个 exe 程序、3 个 cmd 批处理、3 个 py 脚本和 1 份 readme 说明构成:sh 与 cmd 分别对应 Linux、macOS 与 Windows 下的安装、卸载和工具更新,exe 为封装好的可执行文件,py 脚本承担补丁与客户机工具下载的核心逻辑,readme 则记录了适用产品版本、依赖条件与已知限制。目前已有 2474 人学习。读者可从中获得覆盖 Workstation、Player、Fusion 与 ESXi 的多平台打补丁与还原方案,以及新硬件版本虚拟机启动异常时的参数调整与排错思路,便于快速搭建 macOS 实验环境。
1. 一台能跑 macOS 10.12.6 的虚拟机,卡在了补丁这一步
去年帮某实验室整理一套跨平台测试环境,需要在一台 Windows 主机上用 VMware 起一个 macOS 10.12.6 虚拟机,跑几个只有旧系统才能验证的构建脚本。VMware 装好、镜像也备齐了,新建虚拟机时客户机操作系统那一栏从头翻到尾,就是没有 Apple Mac OS X。后来才想起 unlocker208 这个必备补丁——它做的事不复杂,把 vmwarebase.dll(Windows)或 vmware-vmx(Linux)里被屏蔽的苹果客户机类型打回来,让向导重新出现 Apple Mac OS X 10.12 的选项。听起来像一步到位的事,实际翻车点不少:双击脚本闪退、打完补丁向导里依旧没有苹果选项、虚拟机开机走到白苹果就黑屏。这套环境在跨平台开发和老系统兼容测试里很常见,下面按平台把安装、配置和排查一步步写清楚。
2. 版本对齐:unlocker208 和 VMware 11/12 的对应关系
unlocker 这个工具的版本号不是随便起的,每一个 2.0.x 都绑死了它能处理的 VMware 大版本。它做的事情是往 VMware 的二进制文件里改字节、补字符串,把客户机列表里原本被关掉的 Apple Mac OS X 类型重新打开。VMware 每次大版本升级,vmwarebase.dll 和 vmware-vmx 的内部结构、字符串偏移都会变,脚本拿着旧版本的偏移去改新版本的文件,轻则改完没效果,重则把 VMware 主程序改到起不来。
所以装之前先做一件事:把主机上 VMware 的版本号确认下来,再对照表挑 unlocker 的版本。手上这份 unlocker208,配的就是 Workstation 11/12 和 Player 7/12,覆盖的 macOS 客户机正好落到 10.11 和 10.12。10.12.6 是 Sierra 的最后一个维护版本,VMware 12.5 才开始在官方支持列表里正式写上 Sierra,两者是配套的,这也是为什么很多老教程里写 macOS 10.12.6 时都点名 unlocker208。
2.1 版本对照表:别拿 2.0.8 去撬 Workstation 15
| unlocker 版本 | 对应 Workstation | 对应 Player | 覆盖的 macOS 客户机 |
|---|---|---|---|
| 2.0.7 | 11 | 7 | 10.10 / 10.11 |
| 2.0.8 | 11 / 12 | 7 / 12 | 10.11 / 10.12 |
| 2.0.9 | 14 | 14 | 10.13 及以后 |
这张表里最容易踩的坑是「版本越新越好」的直觉。有人主机上是 Workstation 15,翻出一份 unlocker208 就往上怼,脚本跑完提示成功,重启 VMware 却直接报初始化失败,因为补丁改到了错误的代码段。反过来,Workstation 12 上用了更高版本的 unlocker,同样会因为找不到目标偏移而中途退出。unlocker 的版本要跟着 VMware 走,不是跟着 macOS 走。
还有一个细节:Workstation 和 Player 共用同一套内核组件(vmware-vmx),所以同一个 unlocker 版本能同时覆盖两者,但前提是它们的大版本号落在表里。如果主机上装的是 Workstation 12.5.x 这类小版本更新,2.0.8 一般都能正常工作,因为小版本之间二进制布局变化不大;跨大版本就不要再试了。
2.2 解压后目录里有什么,每个文件什么时候用
解压 unlocker208 之后,目录结构大致是这样,不同人打包方式略有差异,但关键文件名基本固定:
# unlocker208 解压后的典型目录结构 unlocker208/ ├── windows/ │ ├── win-install.cmd # Windows 打补丁入口 │ ├── win-uninstall.cmd # Windows 还原入口 │ ├── win-update-tools.cmd # 把新版 darwin 工具推进虚拟机 │ └── unlocker.exe # 真正改写二进制字节的程序 ├── linux/ │ ├── lnx-install.sh # Linux 打补丁入口 │ ├── lnx-uninstall.sh # Linux 还原入口 │ └── lnx-update-tools.sh └── tools/ ├── darwin.iso # macOS 10.12 及以后用的 VMware Tools └── darwinPre15.iso # 10.11 及以前用的旧版win-install.cmd和lnx-install.sh是入口脚本,本身不直接改字节,而是先停服务、备份原文件、再调用unlocker.exe做二进制修改。tools目录里的两个 iso 是装完系统之后才用的,负责分辨率自适应、剪贴板共享和鼠标不丢帧,跟打补丁本身没关系,但装 macOS 的整个流程里绕不开它。10.12.6 对应的是darwin.iso,darwinPre15.iso留给 10.11 及更早的系统,别拿错。
2.3 动手前的三项检查
第一项,VMware 必须完全退出。光关主窗口不够,后台的vmware-vmx.exe(Windows)或vmware-vmx(Linux)进程、授权服务、NAT 服务都可能还挂着,它们会锁住vmwarebase.dll和vmware-vmx,脚本写不进去就会中途失败。
第二项,确认 VMware 的实际安装路径。Windows 默认在C:\Program Files (x86)\VMware\VMware Workstation,Linux 通过 bundle 安装默认在/usr/lib/vmware。如果当初装到了 D 盘或者自定义目录,后面所有命令里的路径都要跟着换。
# Linux:确认安装目录和核心二进制是否存在 ls -ld /usr/lib/vmware ls -l /usr/lib/vmware/bin/vmware-vmx:: Windows:确认主程序位置,路径里有空格,引号不能省 dir "C:\Program Files (x86)\VMware\VMware Workstation\vmwarebase.dll"第三项,动手之前先把整个 VMware 安装目录冷备一份。这比事后逐个找.bak还原快得多,尤其当补丁改坏、VMware 起不来的时候,整目录换回去是最省事的后悔药。
# Linux:整目录冷备,日期后缀方便回滚时挑版本 sudo cp -a /usr/lib/vmware /usr/lib/vmware.bak.$(date +%Y%m%d):: Windows:整目录复制一份做冷备 xcopy "C:\Program Files (x86)\VMware\VMware Workstation" "D:\backup\vmware-ws" /E /I /H/E表示连空目录一起复制,/I表示目标不存在时按目录处理,/H表示连隐藏文件一起带上。备份完之后再开始打补丁,出任何问题都有退路。
3. 两个平台的打补丁流程:Windows 的 win-install.cmd 与 Linux 的 lnx-install.sh
打补丁本身只有一两分钟,真正决定成败的是执行前的准备和执行时的姿势。Windows 上最常见的翻车是「双击」,Linux 上最常见的翻车是「路径参数没传对」。两个平台的处理逻辑一样:停服务、备份、改写、重启,差别只在脚本和路径写法。
3.1 Windows:右键管理员权限是第一步
先说为什么不能双击。Windows 下双击一个.cmd文件,当前工作目录会被设成C:\Windows\System32,脚本里所有相对路径都会失效,unlocker.exe找不到,窗口一闪就关。正确做法是用管理员身份打开命令提示符,先cd到脚本所在目录再执行。
:: 1. 用管理员身份打开命令提示符,先切到 unlocker 解压后的 windows 目录 cd /d D:\tools\unlocker208\windows :: 2. 停掉 VMware 的后台服务,否则 vmwarebase.dll 会被占用 net stop "VMware Authorization Service" net stop "VMware NAT Service" net stop "VMware DHCP Service" :: 3. 执行安装脚本,脚本内部会调用 unlocker.exe 改写二进制 win-install.cmdcd /d里的/d是跨盘符切换用的,从 C 盘切到 D 盘必须加,否则cd只会在当前盘符里找目录。三条net stop里,VMware Authorization Service最关键,它持有授权库文件;NAT 和 DHCP 服务停掉是为了让vmware-vmx不被占用。脚本执行后正常会依次输出备份、打补丁、完成三类信息,如果中途只看到备份没有打补丁,多半是unlocker.exe没有被正确调用。
执行完之后用一条命令确认补丁是否落盘:
:: 查看备份是否生成,同名 .bak 文件就是补丁前的原件 dir "C:\Program Files (x86)\VMware\VMware Workstation\vmwarebase.dll*"输出里应该同时出现vmwarebase.dll和vmwarebase.dll.bak,后者的修改时间就是补丁执行的时间。如果只有.dll没有.bak,说明脚本在备份阶段就失败了,这时候不要急着重跑,先去看脚本窗口里的报错。
万一补丁打完 VMware 起不来,还原也很直接:
:: 方式一:跑自带的还原脚本 cd /d D:\tools\unlocker208\windows win-uninstall.cmd :: 方式二:手动把 .bak 改回原名(VMware 完全退出后操作) ren "C:\Program Files (x86)\VMware\VMware Workstation\vmwarebase.dll.bak" vmwarebase.dll ren "C:\Program Files (x86)\VMware\VMware Workstation\vmware-vmx.exe.bak" vmware-vmx.exe手动还原要在 VMware 完全退出、服务全停的状态下做,否则文件被占用,ren会报拒绝访问。还原完之后再按 3.3 的方式重启服务。
3.2 Linux:路径参数不能省
Linux 上的脚本是lnx-install.sh,它需要知道 VMware 装在哪儿。有的打包版本会要求把安装根目录作为第一个参数传进去,不传就默认当前目录,结果当然找不到vmware-vmx。执行前先看脚本开头几行的用法说明,再按实际路径传参。
# 1. 确认 VMware 装在 /usr/lib/vmware ls -ld /usr/lib/vmware ls -l /usr/lib/vmware/bin/vmware-vmx # 2. 停止 VMware 相关服务,服务不存在时也不中断 sudo systemctl stop vmware.service 2>/dev/null || true sudo systemctl stop vmware-workstation-server.service 2>/dev/null || true # 3. 进入 unlocker 的 linux 目录执行,参数是 VMware 安装根目录 cd /opt/tools/unlocker208/linux sudo ./lnx-install.sh /usr/lib/vmware2>/dev/null || true的作用是服务不存在时把错误吞掉、命令继续往下走,避免因为某个服务名对不上就中断整段脚本。sudo不能省,/usr/lib/vmware归 root 所有,普通用户写不进去,脚本会在备份阶段就报权限错误。如果安装时用的是发行版仓库里的 VMware 包,路径可能不是/usr/lib/vmware,用which vmware或ls /usr/bin/vmware反查实际位置。
执行完之后同样确认.bak是否生成:
# 查看 vmware-vmx 和它的备份,确认补丁写过 ls -l /usr/lib/vmware/bin/vmware-vmx*Linux 下要盯的还有一个隐藏问题:脚本内部靠python命令调用二进制补丁逻辑,新一些的发行版默认只有python3,没有python这个别名,脚本跑到一半就会停住。这个放到第 5 章细说,先记住如果输出里出现python: command not found,就是它。
还原同样走自带脚本:
# 还原:把补丁前的二进制换回来 cd /opt/tools/unlocker208/linux sudo ./lnx-uninstall.sh /usr/lib/vmware3.3 打完补丁之后的收尾:重启服务和主程序
补丁写进磁盘不代表 VMware 会用上它。已经在内存里跑着的进程仍然持有旧二进制的句柄,必须先把 VMware 彻底退干净再重新启动,新建虚拟机向导里才会出现 Apple 选项。
:: Windows:把之前停掉的服务重新拉起来 net start "VMware Authorization Service" net start "VMware NAT Service" net start "VMware DHCP Service"# Linux:服务重新启动,然后重新打开 VMware sudo systemctl start vmware.service 2>/dev/null || true顺序上建议先起服务再开主程序,尤其是 Windows 下授权服务没起来的时候,VMware 会提示许可证问题。如果图省事,直接把机器重启一遍也行,效果一样,只是慢一点。重启之后先别急着建虚拟机,打开新建向导翻一下客户机操作系统列表,看到Apple Mac OS X并且版本下拉里有10.12,说明补丁这一步已经成了,剩下的就是 vmx 参数的事。
4. vmx 参数配置:让 macOS 10.12.6 认下这块虚拟硬盘
打补丁解决的是「VMware 愿不愿意让你选 Mac」,vmx 参数解决的是「macOS 愿不愿意在这台虚拟机上开机」。这两件事经常被混为一谈,结果就是补丁打成功了、向导里也有 Apple 选项了,虚拟机一开机走到白苹果进度条一半就黑屏重启,或者直接掉出一个禁止符号。
4.1 为什么只打补丁不够
VMware 用 SMC(系统管理控制器)模拟苹果主板上的那颗芯片,顺便把 board-id、机型标识这些信息一并虚拟出来。macOS 在启动早期会检查 SMC 版本和 board-id 是否匹配,不匹配就直接选择关机。unlocker 只是把客户机类型解锁了,并没有改动这些虚拟硬件的默认值,所以第一次开机大概率会卡在校验这一步。
这也是为什么网上大量教程在讲完 unlocker 之后,都会补一句「记得在 vmx 里加 smc.version = 0」。10.12.6 这个版本对这一行尤其敏感,缺了它,白苹果进度条基本走不过三分之一。
4.2 关机后往 vmx 里补三行
vmx 文件在虚拟机目录里,文件名和虚拟机同名,扩展名是.vmx。编辑之前必须先把虚拟机关机,运行状态下改这个文件,VMware 退出时会把内存里的配置写回去,手改的内容会被覆盖。
# 追加到虚拟机配置文件 macOS10126.vmx 末尾,编辑前先关机 smc.version = "0" board-id.reflectHost = "TRUE" hw.model = "iMac17,1"smc.version = "0"是绕开 SMC 版本校验的关键行,把版本号伪造成一个 macOS 认得的旧值,让启动流程能继续往下走。board-id.reflectHost = "TRUE"让虚拟机把主机的 board-id 映射过去,白苹果进度条走完之后不容易掉到禁止符。hw.model指定虚拟出来的 Mac 机型,iMac17,1对应 2015 款的 27 寸机型,能正常跑 Sierra,也能让后续装 VMware Tools 时的分辨率适配更顺。
三行都加上之后保存,再开机。如果还是掉禁止符,把hw.model换成MacPro6,1再试一次,不同主机 BIOS 下机型识别的表现会有差异,这是玄学部分,多试一两个值通常能过。
4.3 硬件面板里要调的五个选项
vmx 参数之外,虚拟机的硬件配置也有几个默认值不适合 macOS。新建完虚拟机、还没第一次开机之前,进设置面板按下面的建议调一遍:
| 选项 | 建议值 | 原因 |
|---|---|---|
| 硬盘类型 | SATA | macOS 安装器不认默认的 SCSI 控制器,会找不到磁盘 |
| 光驱类型 | SATA | 安装介质要从 SATA 通道识别,SCSI 下经常读不到 |
| USB 控制器 | xHCI | EHCI 下键鼠容易漂移或完全没反应 |
| 显存 | 128 MB | 安装界面和后续分辨率都靠它,低于 64 MB 会花屏 |
| 内存 | 4 GB 起 | 低于 2 GB 安装器大概率卡在语言选择界面 |
安装介质这边,常见做法是拿到官方的InstallESD.dmg之后转成虚拟机可用的磁盘格式,或者做成启动盘再挂给虚拟机。这一步和 unlocker 无关,但顺序上要排在补丁和 vmx 参数之后,否则装到一半发现客户机类型不对,前面白忙。
5. 常见问题排查:补丁打了还是没苹果选项、开机掉禁止符
5.1 补丁跑完,新建向导里没有 Apple Mac OS X
现象:win-install.cmd或lnx-install.sh执行完没有报错,重启 VMware 之后新建虚拟机,客户机列表里仍然只有 Windows、Linux、其他这几项。
原因:最常见的两种情况,一是 VMware 在打补丁时没有完全退出,vmwarebase.dll被后台进程占用,脚本跳过了改写步骤但没报错;二是补丁版本和 VMware 版本对不上,脚本找到了文件但偏移量不对,改了个寂寞。
解决:先确认进程。Windows 下打开任务管理器,把所有带 VMware 字样的进程结束掉,包括vmware.exe、vmware-vmx.exe、vmware-authd.exe;Linux 下用ps -ef | grep vmware查一遍。然后重新以管理员/root 身份跑一次安装脚本,这次盯着输出看有没有patching之类的字样。如果输出里明确写了 backup 但没写 patch,回去核对第 2 章的版本对照表。
5.2 Windows 上双击脚本一闪就没
现象:双击win-install.cmd,黑窗口闪一下就关闭,VMware 安装目录里没有任何.bak文件生成。
原因:双击时当前工作目录被设成C:\Windows\System32,脚本里用相对路径找unlocker.exe找不到,直接退出;另外双击默认不带管理员权限,即使找得到文件也写不进 `
本文还有配套的精品资源,点击获取