黑蘋果的重中之重:BootLoader 引導程式,從 Clover 遷徙到 OpenCore 似乎是無法避免的趨勢。而這段時間以來 OpenCore 的教學文章也變多了,內容之豐富詳細更勝於以往 Clover 的教學資源,OpenCore 的開機選單不僅能做到與白蘋果幾可亂真,在客製化的美化程度也不輸 Clover。在前一篇文章中只有提到 OpenCore 的開機最基本設置,也就是讓 OpenCore 最起碼能跑起來進系統的最低設置。這篇文章會更近一步整理出 OpenCore 會用到的客製化常用項目。本文章將隨著時間與版本資訊的變化隨時更新
零:起手式,準備工作
需要準備以下檔案
- OcBinaryData 官方資源檔:要客製化 OpenCore 需要用到一些外部資源,例如圖像、文字、聲音檔。官方已有提供一組預設(下載位置),這組預設並不會隨著 OpenCore 版本一併發布,有需要的話得自行下載。下載解壓縮之後,將 Resources 放到 EFI/OC/Resources 目錄下。
- ProperTree:編輯 config.plist 的輕量級好用工具,就不用下載龐大的 Xcode 了(下載)。
- EFI-Agent:掛載 EFI 的好用工具(下載)。
- OpenCanopy Generator:產生 OpenCore 客製化圖像資源檔的好用工具(下載 dmg 檔案)
- HackinTool:好用的黑蘋果工具,在本文中只用來做 16 進位<-> 10 進位轉換(下載)。
- IORegistryExplorer:查找 IOReg 路徑的工具,最早是由蘋果官方提供,不過網路上搜尋一下也有(下載)。在本文中用來查找音效的 HDACodecAddress 位址值。
- OpenCore Config Properties Calculator:我個人開發的小工具,方便設定下面提到 PickerAttributes, ExposeSensitiveData, ScanPolicy, csr-active-config 四種加總屬性。
起手式:使用 EFI-Agent 掛載 EFI 卷冊,將上述下載的 Resources 放入 EFI/OC/Resources 之後,用 ProperTree 查看或編輯 EFI\OC\config.plist。
開始進入正題。先記得一個基本概念:OpenCore 的 config.plist 中,與開機選單功能和美化有關的項目是「Misc」和 「UEFI」兩個。
一、設置圖文化介面
使用 OpenCanopy Cenerator,選定一張喜歡的 3840x2160 圖片,轉檔成 Background.icns ,放到 EFI/OC/Resources/Image/ 底下,OpenCore 開機選單的底圖就完成了。
1. Misc->Boot 底下:
(1) HideAuxiliary:Boolean 布林型,是否隱藏輔助項目,預設 False。所謂輔助項目,指的是放在EFI/OC/Tools 底下的工具。如果希望在開機選單顯示的話,除了該目錄底下要放置對應的 .efi 工具程式之外,config.plist 的 Misc->Tools 也要有對應的項目,以及 HideAuxiliary 設定為 False (不隱藏),三者缺一不可。相對的,如果不想顯示,只要這一項設定 True 開機選項就不會出現。
(2) PickerMode: String 字串值,介面類型,有三種值:
- Builtin:內建的文字介面。
- External:圖形介面,需使用外部資源,以及必須啟用 OpenCanopy.efi:(config.plist ->UEFI->Driver 底下有 OpenCanopy.efi,和 EFI\OC\Drivers 底下有 OpenCanopy.efi 檔案)
- Apple:Apple 內建的圖形介面,黑蘋果內當然不起作用,會自動變成 Builtin。
(2) PickerAttributes:Number 數值型,複合加總的表示法,有 7 種屬性。預設 17。這個項目會定義開機選單要出現哪些東西。有點麻煩的是,官方文件說明用 16 進位表示,但給的 Sample.plist 卻是數值型,意思就是要自行轉換
- 0x0001 — OC_ATTR_USE_VOLUME_ICON,使用卷冊的 .VolumeIcon.icns 檔案作為圖示。若卷冊內沒有 .icns 檔案,則會自動依照卷冊類型套用 Resources/ 底下的 icns 資源檔。然而 OpenCanopy 並不支援讀取 /System/Volumes/Data/ 卷冊下的檔案,若遇到這種情況(例如系統卷冊),可以將 .VolumeIcon.icns 放在 /System/Volumes/Preboot/ 底下。預設情形 Preboot 不掛載,可用 diskutil list 查詢 Preboot 位置(diskXsY),再用 sudo diskutil mount diskXsY 即可 。
- 0x0002 — OC_ATTR_USE_DISK_LABEL_FILE,使用卷冊的LABEL檔為標示。
- 0x0004 — OC_ATTR_USE_GENERIC_LABEL_IMAGE,使用卷冊的LABEL Image 檔為圖示。
- 0x0008 — OC_ATTR_HIDE_THEMED_ICONS,使用內建的 .icns 作為圖示,必須在啟用 OC_ATTR_USE_VOLUME_ICON 的前提下才能生效。
- 0x0010 — OC_ATTR_USE_POINTER_CONTROL,顯示並使用滑鼠控制。
- 0x0020 — OC_ATTR_SHOW_DEBUG_DISPLAY,顯示 Debug 訊息,必須使用 Debug 版的 OpenCore。
- 0x0040 — OC_ATTR_USE_MINIMAL_UI,使用最少的項目圖示,不顯示關機及重開機,此設定對 OpenCanopy 圖型介面與 Builtin 文字介面街有效。
以預設值 Number 17 為例,轉換為 16 進位(Hex)為 0x0011,再對照上面的表,就是 OC_ATTR_USE_VOLUME_ICON(0x0001)+ OC_ATTR_USE_POINTER_CONTROL(0x0010),意即啟用滑鼠控制,以及用卷冊的 .icns 作為顯示項目。
像這樣,只需用一個數字來表示多種屬性的開啟/關閉的設定方式還有好幾個,得用上 HackinTool 的計算機功能。常寫程式的人對這類設計司空見慣(一變數就能表達多屬性),但是對一般人來說可能會覺得很頭痛。
(3) PickerVariant:String 字串值,OpenCore 開機選單使用哪一套圖示集,預設值 Auto:
- Auto:根據 DefaultBackground 顏色的設置,自動選擇對應的圖標集。
- Default:預設的圖示集(無前綴字)。
- Old:前綴字 Old 圖示集。
- Modern:前綴字 Modern 圖示集。
- XXXX(自行填寫):前綴字 XXX 的圖示集。
用一張圖說明即可一目瞭然:查看 Resources/image 底下的圖示集(適用於 OpenCore 0.6.9 以前的版本)。
圖示集的檔名和定義:
- Cursor — 滑鼠游標 (強制尺寸,最大到 144x144)。
- Selected — 已選項目 (強制尺寸 144x144)。
- Selector — 選擇項目 (強制尺寸,最大到 144x40)。
- Left — 向左 (強制尺寸, 40x40)。
- Right — 向右 (強制尺寸, 40x40)。
- HardDrive — 包含作業系統分區的硬碟圖示 (強制尺寸, 128x128)。
- Background — 置中背景圖。
- Apple — Apple 系統分區圖示 OS (128x128)。
- AppleRecv — Apple 恢復分區圖示 (128x128)。
- AppleTM — Apple Time Machine 分區圖示 (128x128)。
- Windows — Windows 系統分區圖示 (128x128)。
- Other — 客制入口 (see Entries, 128x128)。
- ResetNVRAM — Reset NVRAM 工具圖示 (128x128)。
- Shell — UEFI Shell (128x128)。
- Tool — 工具 (128x128)。
補充說明:OpenCore 0.7.0 以後的主題設置
OpenCore 0.7.0 以後主題檔案放置方式有些許變化,置於 Resources/image 底下後加上目錄做區分。
PickerVariant:String,可填入以 Resources/image 為根的相對路徑,
- 例如上圖若想使用 BsxImacBlue 主題,則填入 Blackosx\BsxImacBlue。
- 填入 Auto 時,預設使用 Acidanthera\GoldenGate 主題。
(4) ShowPicker:Boolean 布林值,顯示選擇器。若要對選單進行操作,必須為 True。填 False 時則會跳過選單,直接會進入系統開機,實現與白蘋果相同的開機邏輯。
(5) Timeout:Number 整數值,進入 OpenCore 停留幾秒後仍無動作即自動進入開機程序。
2. Misc->Security 底下:
(1) AllowNvramReset:Boolean 布林值,OpenCore 開機選單是否顯示 Reset NVRAM 項目。若想要選單清爽一點,則設定為 False。
(2) ExposeSensitiveData:Number 整數值,複合加總的表示法,有 4 種屬性,在系統中暴露敏感資料的程度。有四個項目
- 0x01 — 將可列印的引導路徑以 UEFI 變數型態暴露。
- 0x02 — 將 OpenCore 版本以 UEFI 變數暴露。
- 0x04 — 將 OpenCore 版本顯示在 OpenCore 的開機選單畫面。
- 0x08 — 將 OEM 資訊作為一組 UEFI 變數暴露。
這邊又是複合加總的方式了。以設定值 6 來說,是 0x02 和 0x04 加總,意思就 OpenCore 的版本除了進系統之後可用 NVRam 指令查看之外,還會在開機選單顯示。
(3) ScanPolicy:Number 整數值,複合加總的表示法,有 16 種屬性,開機掃描的可開機的檔案系統(FS)與裝置類型(DEVICE)。項目很多,看了都暈了,直接把原文貼出來吧!(好用工具:ScanPolicy Generator)
- 0x00000001 (bit 0) — OC_SCAN_FILE_SYSTEM_LOCK, restricts scanning to only known file systems defined as a part of this policy. File system drivers may not be aware of this policy. Hence, to avoid mounting of undesired file systems, drivers for such file systems should not be loaded. This bit does not affect DMG mounting, which may have any file system. Known file systems are prefixed with OC_SCAN_ALLOW_FS_.
- 0x00000002 (bit 1) — OC_SCAN_DEVICE_LOCK, restricts scanning to only known device types defined as a part of this policy. It is not always possible to detect protocol tunneling, so be aware that on some systems, it may be possible for e.g. USB HDDs to be recognised as SATA instead. Cases like this must be reported. Known device types are prefixed with OC_SCAN_ALLOW_DEVICE_.
- 0x00000100 (bit 8) — OC_SCAN_ALLOW_FS_APFS, allows scanning of APFS file system.
- 0x00000200 (bit 9) — OC_SCAN_ALLOW_FS_HFS, allows scanning of HFS file system.
- 0x00000400 (bit 10) — OC_SCAN_ALLOW_FS_ESP, allows scanning of EFI System Partition file system.
- 0x00000800 (bit 11) — OC_SCAN_ALLOW_FS_NTFS, allows scanning of NTFS (Msft Basic Data) file system.
- 0x00001000 (bit 12) — OC_SCAN_ALLOW_FS_LINUX_ROOT, allows scanning of Linux Root (EXT) file systems. (OC 改版前為 OC_SCAN_ALLOW_FS_EXT)
- 0x00002000 (bit 13) — OC_SCAN_ALLOW_FS_LINUX_DATA, allows scanning of Linux Data file systems. (OC 改版新增)
- 0x00004000 (bit 14) — OC_SCAN_ALLOW_FS_XBOOTLDR, allows scanning the Extended Boot Loader Partition as defined by the Boot Loader Specification. (OC 改版新增)
- 0x00010000 (bit 16) — OC_SCAN_ALLOW_DEVICE_SATA, allow scanning SATA devices.
- 0x00020000 (bit 17) — OC_SCAN_ALLOW_DEVICE_SASEX, allow scanning SAS and Mac NVMe devices.
- 0x00040000 (bit 18) — OC_SCAN_ALLOW_DEVICE_SCSI, allow scanning SCSI devices.
- 0x00080000 (bit 19) — OC_SCAN_ALLOW_DEVICE_NVME, allow scanning NVMe devices.
- 0x00100000 (bit 20) — OC_SCAN_ALLOW_DEVICE_ATAPI, allow scanning CD/DVD devices and old SATA.
- 0x00200000 (bit 21) — OC_SCAN_ALLOW_DEVICE_USB, allow scanning USB devices.
- 0x00400000 (bit 22) — OC_SCAN_ALLOW_DEVICE_FIREWIRE, allow scanning FireWire devices.
- 0x00800000 (bit 23) — OC_SCAN_ALLOW_DEVICE_SDCARD, allow scanning card reader devices.
- 0x01000000 (bit 24) — OC_SCAN_ALLOW_DEVICE_PCI, allow scanning devices directly connected to PCI bus
預設值是 0,也就是全部都掃描,但如此一來開機就會變慢。官方的建議值是 0x10F0103(十進位的 17760515)。拆解之後是
OC_SCAN_FILE_SYSTEM_LOCK
OC_SCAN_DEVICE_LOCK
OC_SCAN_ALLOW_FS_APFS
OC_SCAN_ALLOW_DEVICE_SATA
OC_SCAN_ALLOW_DEVICE_SASEX
OC_SCAN_ALLOW_DEVICE_SCSI
OC_SCAN_ALLOW_DEVICE_NVME
OC_SCAN_ALLOW_DEVICE_PCI
前兩個(OC_SCAN_FILE_SYSTEM_LOCK、OC_SCAN_DEVICE_LOCK)必須啟用,後面對應的檔案系統與裝置類型才能使用。觀察發現官方的推薦值規避 Windows,意即不會引導 Windows 作業系統。然而卻也少了 USB,需要 USB 的場合(例如 USB 安裝碟)就麻煩了。
網路上的推薦值是 19857667(十進位),轉成 16 進位是 0x012F0103,也就是官方建議值加上 OC_SCAN_ALLOW_DEVICE_USB 即加入 USB 項目。若是想要以 macOS USB 安裝碟開機進入安裝程序的話,則填入 19858179(十進位),也就是 16 進位的 0x012F0303,即再加上 OC_SCAN_ALLOW_FS_HFS 的屬性,因為系統安裝碟通常都是 HFS 檔案系統。其他實測部分:
- 引導 GPT 硬碟上的 Windows 時,OC_SCAN_ALLOW_FS_ESP 須啟用。
- 引導 Ubuntu 需啟用 OC_SCAN_ALLOW_FS_LINUX_ROOT,且 Drivers 加入 OpenLinuxBoot.efi。
若不想這麼麻煩的話,直接填 0 就好了,開機也稍微變慢一點點而已。
以上是與開機介面美化/優化有關的設定。
二、設定開機音效
OpenCore 也能做到像白蘋果那樣,進入開機時出現 Chime 音效,也就是「噹~~~~」的開機音效(音效示範)。不過有個前提,只能從主板的音效裝置輸出,不能通過其他裝置(例如 USB 音效卡、HDMI 音效)輸出聲音。
設定方式如下(參考來源:dortania.github.io ):
1. EFI/OC/Drivers 底下必須要有 AudioDxe.efi 檔案。
2. 找出設備的 HDACodecAddress:
必須在已驅動主板音效的環境下,執行 IORegistryExplorer,找出 HDEF 的位置(1.),在底下第一個出現 IOHDACodecDevice@xx (2.),右邊的 IOHDACodecAddress 的值,就是我們需要的 Codec 的值。
以 GA-Z77X-UP4 TH 這張板子來說,主板音效卡是 ALC892,找到的 CodecAddress 是 0x02 (十進位也是 2)。不過另一張板子 Z490 VISION G 找到的是 0x0(十進位也是 0),筆電的部分 HP Probook 430 G2/G3 也都是 0x0 (數字0),所以這個數字會因主板而異。
3. UEFI -> Audio 設置:
(1) AudioCodec:Number 數值型,填入上個步驟找到的值,記得要轉換成 10 進位。
(2) AudioDevice:String 字串型,填入裝置的路徑。複製 DeviceProperties 底下的音效路徑。以 Z77X-UP4 TH 來說是 PciRoot(0x0)/Pci(0x1B,0x0),Z490 VISION G 是 PciRoot(0x0)/Pci(0x1F,0x3)。
(3) AudioOut:Number 數值型,音效的輸出埠。主機板上的音效輸出埠大多不止一個,例如前置、中置、後置,以及主板上的 HD Audio 接腳也算一個。想知道主板有幾個音效埠有點麻煩,官網的方案是使用 DEBUG 模式查找 Log。例如 Log 顯示板子有 5 個輸出埠,那麼 AudioOut 的值就落在 0 ~ (5-1) 之間,至於哪個數字對應哪個音效輸出埠,還是得自己踹。
- 以 Z77X-UP4 TH 跟 Z490 VISION G 來說,0~3 是主板後方的音效埠。主板 HD Audio 接腳(從主板拉一條線到機殼前面板)是 4。
- HP Probook 430 G2 的 0 是揚聲器,1 是耳機埠,HP Probook 430 G3 則是相反,0 是耳機埠、1 是揚聲器。
(4) AudioSupport:Boolean 布林值,True 為啟用音效輸出功能。一旦啟用且音效能正常運作時,開機進入 OpenCore 選單的速度會變慢。
(5) MinimumVolume:數值型,一律填 70。
(6) PlayChime:String 字串值:強制播放填 Enabled。
- Auto:根據 NVRam 的值進行播放與否。
- Enabled:一律播放 Chime 音效。
- Disabled:一律不播放 Chime 音效。
(7) VolumeAmplifier:Number 數值型,音效等化倍率。看了文件半天都不知道怎麼算出來的,就乾脆一律填 154。
2022.01.11 補充:OpenCore 0.7.7 版以後,開機音效的設定方式出現了重大變化。取消 AudioOut、MinimumVolume、VolumeAmplifier 三項,增加 AudioOutMask、DisconnectHda、MaximumGain、MinimumAssistGain、MinimumAudibleGain 五項。至於該怎麼設定呢?全依照預設值就行了。
AudioOutMask 填入 -1 表示會盡可能輸出至所有的輸出埠,取代原來的 AudioOut 只能指定一個輸出埠的設定。另外,取消了 MinimumVolume 參數,那開機音效的音量怎麼設定呢?其實這部分已經跟 macOS 系統音量連動,變成跟白蘋果一樣的方法,黑蘋果又更像白蘋果了。
4. Misc -> Boot
(1) PickerAudioAssist:布林值,是否啟用聲音輔助說明。是給視障的人輔助使用的,在開機選單操作時,每次切換開機項目就會播報一次,操作速度會變慢很多。若不想那麼吵的話,填 False。當然了,要啟動聲音輔助說明,前提是上述 UEFI -> Audio 設定正確,並且 AudioSupport 設定為 True 才有效果。
補充:若依照上述設定方式、AudioOut 都踹完了還是沒聲音,可朝以下方式查找問題:
- config.plist->UEFI->Audio ->SetupDelay 設定為 500000 試試看
- 使用取樣頻率 48000 Hz 的音效檔 OCEFIAudio_VoiceOver_Boot.mp3 試試看(預設是 44100 Hz)。HP Probook 430 G3 的音效裝置 Conexant CX20724 就必須使用 48000 Hz 的音效檔。
- 使用 Debug 模式,且一併更換 AudioDxe.efi 為 Debug 版,用 Debug 模式生成 Log 之後, 看是什麼問題,再上網找答案。
留言列表