
簡介unlocker208 是面向需要在 VMware Workstation 上運行 macOS 的開發(fā)者與測試人員的必備補丁用于解除虛擬機對蘋果系統(tǒng)的限制使新建虛擬機時能選中 Apple 機型并正常引導啟動。壓縮包共 18 個文件、約 9.61MB由 8 個 sh 腳本、3 個 exe 程序、3 個 cmd 批處理、3 個 py 腳本和 1 份 readme 說明構成sh 與 cmd 分別對應 Linux、macOS 與 Windows 下的安裝、卸載和工具更新exe 為封裝好的可執(zhí)行文件py 腳本承擔補丁與客戶機工具下載的核心邏輯readme 則記錄了適用產(chǎn)品版本、依賴條件與已知限制。目前已有 2474 人學習。讀者可從中獲得覆蓋 Workstation、Player、Fusion 與 ESXi 的多平臺打補丁與還原方案以及新硬件版本虛擬機啟動異常時的參數(shù)調(diào)整與排錯思路便于快速搭建 macOS 實驗環(huán)境。1. 一臺能跑 macOS 10.12.6 的虛擬機卡在了補丁這一步去年幫某實驗室整理一套跨平臺測試環(huán)境需要在一臺 Windows 主機上用 VMware 起一個 macOS 10.12.6 虛擬機跑幾個只有舊系統(tǒng)才能驗證的構建腳本。VMware 裝好、鏡像也備齊了新建虛擬機時客戶機操作系統(tǒng)那一欄從頭翻到尾就是沒有 Apple Mac OS X。后來才想起 unlocker208 這個必備補丁——它做的事不復雜把 vmwarebase.dllWindows或 vmware-vmxLinux里被屏蔽的蘋果客戶機類型打回來讓向導重新出現(xiàn) Apple Mac OS X 10.12 的選項。聽起來像一步到位的事實際翻車點不少雙擊腳本閃退、打完補丁向導里依舊沒有蘋果選項、虛擬機開機走到白蘋果就黑屏。這套環(huán)境在跨平臺開發(fā)和老系統(tǒng)兼容測試里很常見下面按平臺把安裝、配置和排查一步步寫清楚。2. 版本對齊unlocker208 和 VMware 11/12 的對應關系unlocker 這個工具的版本號不是隨便起的每一個 2.0.x 都綁死了它能處理的 VMware 大版本。它做的事情是往 VMware 的二進制文件里改字節(jié)、補字符串把客戶機列表里原本被關掉的 Apple Mac OS X 類型重新打開。VMware 每次大版本升級vmwarebase.dll 和 vmware-vmx 的內(nèi)部結構、字符串偏移都會變腳本拿著舊版本的偏移去改新版本的文件輕則改完沒效果重則把 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 15unlocker 版本對應 Workstation對應 Player覆蓋的 macOS 客戶機2.0.711710.10 / 10.112.0.811 / 127 / 1210.11 / 10.122.0.9141410.13 及以后這張表里最容易踩的坑是「版本越新越好」的直覺。有人主機上是 Workstation 15翻出一份 unlocker208 就往上懟腳本跑完提示成功重啟 VMware 卻直接報初始化失敗因為補丁改到了錯誤的代碼段。反過來Workstation 12 上用了更高版本的 unlocker同樣會因為找不到目標偏移而中途退出。unlocker 的版本要跟著 VMware 走不是跟著 macOS 走。還有一個細節(jié)Workstation 和 Player 共用同一套內(nèi)核組件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 # 真正改寫二進制字節(jié)的程序 ├── 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是入口腳本本身不直接改字節(jié)而是先停服務、備份原文件、再調(diào)用unlocker.exe做二進制修改。tools目錄里的兩個 iso 是裝完系統(tǒng)之后才用的負責分辨率自適應、剪貼板共享和鼠標不丟幀跟打補丁本身沒關系但裝 macOS 的整個流程里繞不開它。10.12.6 對應的是darwin.isodarwinPre15.iso留給 10.11 及更早的系統(tǒng)別拿錯。2.3 動手前的三項檢查第一項VMware 必須完全退出。光關主窗口不夠后臺的vmware-vmx.exeWindows或vmware-vmxLinux進程、授權服務、NAT 服務都可能還掛著它們會鎖住vmwarebase.dll和vmware-vmx腳本寫不進去就會中途失敗。第二項確認 VMware 的實際安裝路徑。Windows 默認在C:\Program Files (x86)\VMware\VMware WorkstationLinux 通過 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打補丁本身只有一兩分鐘真正決定成敗的是執(zhí)行前的準備和執(zhí)行時的姿勢。Windows 上最常見的翻車是「雙擊」Linux 上最常見的翻車是「路徑參數(shù)沒傳對」。兩個平臺的處理邏輯一樣停服務、備份、改寫、重啟差別只在腳本和路徑寫法。3.1 Windows右鍵管理員權限是第一步先說為什么不能雙擊。Windows 下雙擊一個.cmd文件當前工作目錄會被設成C:\Windows\System32腳本里所有相對路徑都會失效unlocker.exe找不到窗口一閃就關。正確做法是用管理員身份打開命令提示符先cd到腳本所在目錄再執(zhí)行。:: 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. 執(zhí)行安裝腳本腳本內(nèi)部會調(diào)用 unlocker.exe 改寫二進制 win-install.cmdcd /d里的/d是跨盤符切換用的從 C 盤切到 D 盤必須加否則cd只會在當前盤符里找目錄。三條net stop里VMware Authorization Service最關鍵它持有授權庫文件NAT 和 DHCP 服務停掉是為了讓vmware-vmx不被占用。腳本執(zhí)行后正常會依次輸出備份、打補丁、完成三類信息如果中途只看到備份沒有打補丁多半是unlocker.exe沒有被正確調(diào)用。執(zhí)行完之后用一條命令確認補丁是否落盤:: 查看備份是否生成同名 .bak 文件就是補丁前的原件 dir C:\Program Files (x86)\VMware\VMware Workstation\vmwarebase.dll*輸出里應該同時出現(xiàn)vmwarebase.dll和vmwarebase.dll.bak后者的修改時間就是補丁執(zhí)行的時間。如果只有.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 完全退出、服務全停的狀態(tài)下做否則文件被占用ren會報拒絕訪問。還原完之后再按 3.3 的方式重啟服務。3.2 Linux路徑參數(shù)不能省Linux 上的腳本是lnx-install.sh它需要知道 VMware 裝在哪兒。有的打包版本會要求把安裝根目錄作為第一個參數(shù)傳進去不傳就默認當前目錄結果當然找不到vmware-vmx。執(zhí)行前先看腳本開頭幾行的用法說明再按實際路徑傳參。# 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 目錄執(zhí)行參數(shù)是 VMware 安裝根目錄 cd /opt/tools/unlocker208/linux sudo ./lnx-install.sh /usr/lib/vmware2/dev/null || true的作用是服務不存在時把錯誤吞掉、命令繼續(xù)往下走避免因為某個服務名對不上就中斷整段腳本。sudo不能省/usr/lib/vmware歸 root 所有普通用戶寫不進去腳本會在備份階段就報權限錯誤。如果安裝時用的是發(fā)行版?zhèn)}庫里的 VMware 包路徑可能不是/usr/lib/vmware用which vmware或ls /usr/bin/vmware反查實際位置。執(zhí)行完之后同樣確認.bak是否生成# 查看 vmware-vmx 和它的備份確認補丁寫過 ls -l /usr/lib/vmware/bin/vmware-vmx*Linux 下要盯的還有一個隱藏問題腳本內(nèi)部靠python命令調(diào)用二進制補丁邏輯新一些的發(fā)行版默認只有python3沒有python這個別名腳本跑到一半就會停住。這個放到第 5 章細說先記住如果輸出里出現(xiàn)python: command not found就是它。還原同樣走自帶腳本# 還原把補丁前的二進制換回來 cd /opt/tools/unlocker208/linux sudo ./lnx-uninstall.sh /usr/lib/vmware3.3 打完補丁之后的收尾重啟服務和主程序補丁寫進磁盤不代表 VMware 會用上它。已經(jīng)在內(nèi)存里跑著的進程仍然持有舊二進制的句柄必須先把 VMware 徹底退干凈再重新啟動新建虛擬機向導里才會出現(xiàn) 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 會提示許可證問題。如果圖省事直接把機器重啟一遍也行效果一樣只是慢一點。重啟之后先別急著建虛擬機打開新建向導翻一下客戶機操作系統(tǒng)列表看到Apple Mac OS X并且版本下拉里有10.12說明補丁這一步已經(jīng)成了剩下的就是 vmx 參數(shù)的事。4. vmx 參數(shù)配置讓 macOS 10.12.6 認下這塊虛擬硬盤打補丁解決的是「VMware 愿不愿意讓你選 Mac」vmx 參數(shù)解決的是「macOS 愿不愿意在這臺虛擬機上開機」。這兩件事經(jīng)常被混為一談結果就是補丁打成功了、向導里也有 Apple 選項了虛擬機一開機走到白蘋果進度條一半就黑屏重啟或者直接掉出一個禁止符號。4.1 為什么只打補丁不夠VMware 用 SMC系統(tǒng)管理控制器模擬蘋果主板上的那顆芯片順便把 board-id、機型標識這些信息一并虛擬出來。macOS 在啟動早期會檢查 SMC 版本和 board-id 是否匹配不匹配就直接選擇關機。unlocker 只是把客戶機類型解鎖了并沒有改動這些虛擬硬件的默認值所以第一次開機大概率會卡在校驗這一步。這也是為什么網(wǎng)上大量教程在講完 unlocker 之后都會補一句「記得在 vmx 里加 smc.version 0」。10.12.6 這個版本對這一行尤其敏感缺了它白蘋果進度條基本走不過三分之一。4.2 關機后往 vmx 里補三行vmx 文件在虛擬機目錄里文件名和虛擬機同名擴展名是.vmx。編輯之前必須先把虛擬機關機運行狀態(tài)下改這個文件VMware 退出時會把內(nèi)存里的配置寫回去手改的內(nèi)容會被覆蓋。# 追加到虛擬機配置文件 macOS10126.vmx 末尾編輯前先關機 smc.version 0 board-id.reflectHost TRUE hw.model iMac17,1smc.version 0是繞開 SMC 版本校驗的關鍵行把版本號偽造成一個 macOS 認得的舊值讓啟動流程能繼續(xù)往下走。board-id.reflectHost TRUE讓虛擬機把主機的 board-id 映射過去白蘋果進度條走完之后不容易掉到禁止符。hw.model指定虛擬出來的 Mac 機型iMac17,1對應 2015 款的 27 寸機型能正常跑 Sierra也能讓后續(xù)裝 VMware Tools 時的分辨率適配更順。三行都加上之后保存再開機。如果還是掉禁止符把hw.model換成MacPro6,1再試一次不同主機 BIOS 下機型識別的表現(xiàn)會有差異這是玄學部分多試一兩個值通常能過。4.3 硬件面板里要調(diào)的五個選項vmx 參數(shù)之外虛擬機的硬件配置也有幾個默認值不適合 macOS。新建完虛擬機、還沒第一次開機之前進設置面板按下面的建議調(diào)一遍選項建議值原因硬盤類型SATAmacOS 安裝器不認默認的 SCSI 控制器會找不到磁盤光驅類型SATA安裝介質要從 SATA 通道識別SCSI 下經(jīng)常讀不到USB 控制器xHCIEHCI 下鍵鼠容易漂移或完全沒反應顯存128 MB安裝界面和后續(xù)分辨率都靠它低于 64 MB 會花屏內(nèi)存4 GB 起低于 2 GB 安裝器大概率卡在語言選擇界面安裝介質這邊常見做法是拿到官方的InstallESD.dmg之后轉成虛擬機可用的磁盤格式或者做成啟動盤再掛給虛擬機。這一步和 unlocker 無關但順序上要排在補丁和 vmx 參數(shù)之后否則裝到一半發(fā)現(xiàn)客戶機類型不對前面白忙。5. 常見問題排查補丁打了還是沒蘋果選項、開機掉禁止符5.1 補丁跑完新建向導里沒有 Apple Mac OS X現(xiàn)象win-install.cmd或lnx-install.sh執(zhí)行完沒有報錯重啟 VMware 之后新建虛擬機客戶機列表里仍然只有 Windows、Linux、其他這幾項。原因最常見的兩種情況一是 VMware 在打補丁時沒有完全退出vmwarebase.dll被后臺進程占用腳本跳過了改寫步驟但沒報錯二是補丁版本和 VMware 版本對不上腳本找到了文件但偏移量不對改了個寂寞。解決先確認進程。Windows 下打開任務管理器把所有帶 VMware 字樣的進程結束掉包括vmware.exe、vmware-vmx.exe、vmware-authd.exeLinux 下用ps -ef | grep vmware查一遍。然后重新以管理員/root 身份跑一次安裝腳本這次盯著輸出看有沒有patching之類的字樣。如果輸出里明確寫了 backup 但沒寫 patch回去核對第 2 章的版本對照表。5.2 Windows 上雙擊腳本一閃就沒現(xiàn)象雙擊win-install.cmd黑窗口閃一下就關閉VMware 安裝目錄里沒有任何.bak文件生成。原因雙擊時當前工作目錄被設成C:\Windows\System32腳本里用相對路徑找unlocker.exe找不到直接退出另外雙擊默認不帶管理員權限即使找得到文件也寫不進 本文還有配套的精品資源點擊獲取