Redditのhackintosh掲示板で丁寧に質問に答えてくれているCorpnewtさんが、hackintoshのためのバニラデスクトップガイドというページを用意してくれています。バニラなインストールのためのガイドとして優れています。今回は「config.plistの基礎」というページをご紹介します。
またCorpnewtさんのガイドには、CPUごとのconfig.plistの内容が解説されていますが。とても参考になります。以下で紹介しておきました。
(ここから基礎編の抄訳)
config.plistは、/Volumes/EFI/EFI/CLOVER/config.plist にあります。Hackintosh初心者が苦労するファイルの一つです。
Table of Contents
これは何か?
config.plistはXMLで書かれたpropertyリストです。 XMLはマークアップ言語でHTMと似ています。
構造
Cloverは、config.plistに正しいパーツが正しい場所に書かれていることを前提にして参照します。configの順番やスコープはとても大事で、間違った場所に書かれた情報はCloverに伝わりません。
データタイプ
いくつかのメインのデータタイプがあります。一般的なものを紹介します。注意:ここでは開始タグしか示さない場合があります。実際には終了タグも必要です。
Strings(文字列)
<string>This is a string</string>
Stringsはそのままです。
Integers(整数値)
<integer>1</integer>
数字そのものです。
Data(base64データ)
<data>RXh0ZXJuYWw=</data>
上のstringsに似ていますが、これは何らかのデータをbase64で表現したものです。この例は、ASCII文字列のデータをbase64で表示したものです。次のターミナル操作でこの例のbase64を元のデータに戻してASCII文字として表示できます。
echo RXh0ZXJuYWw= | python -m base64 -d && echo
この結果、「External」という文字が表示されます。&&を使って文字列が表示された後に改行しています。これで見やすくなっています。
ASCII文字からbase64へはこのようにして変換できます。
echo External | base64
この結果、RXh0ZXJuYWw= が得られます。
(訳注:4の整数倍の個数になるよう=を足しているようです。またbase64 -Dコマンドでもデコードできるようです。)
Booleans(論理型)
<true/> or <false/>
これはboolean値です。
Arrays(配列)
<array> <string>Bob</string> <string>Jim</string> <string>Chris</string> </array>
アイテムの unordered list です。
Dictionaries(辞書)
<dict> <key>Name</key> <string>Bob</string> <key>Age</key> <integer>20</integer> <key>Knows XML</key> <true/> </dict>
これはdictionaryです。keyとvalueがセットです。keyは文字です。
例
True/Falseを書き換える
最初の例では、boolean valueをtrueからfalseに書き換えてみます。KextsToPatchエントリーはDisabledがfalseなので機能しています。
<dict> <key>Comment</key> <string>External icons patch</string> <key>Disabled</key> <false/> <key>Find</key> <data> RXh0ZXJuYWw= </data> <key>InfoPlistPatch</key> <false/> <key>Name</key> <string>AppleAHCIPort</string> <key>Replace</key> <data> SW50ZXJuYWw= </data> </dict>
たくさん記載されていますが、まずはkeyの意味を説明します。
- Comment – なんのパッチなのかを示す単なるコメントです
- Disabled – 逆な感じを受けますが、パッチを無効にするかしないかの指定です。trueだと無効になり、falseだと有効です。
- InfoPlistPatch – Cloverに、Info.plistなのか、kextのバイナリーなのか、どちらの方にパッチを当てようとしていることを伝えます。falseなのでバイナリーです
- Name – パッチを当てようとしているkextの名前です
- Find – バイナリの中で検索すべきbase64データです
- Replace – findデータを置き換えるためのデータです(発見できた場合)
Cloverは、AppleAHCIPort kextの中の、RXh0ZXJuYWw= (デコードするとExternalという文字です)というデータを探して SW50ZXJuYWw= (デコードするとInternalという文字です)に置き換えます。そこ結果、(通常はexternalドライブと考えられる)ホットプラグ可能なドライブが、internalドライブとしてデスクトップに表示されます。このパッチは、起動時に自動的に当てられます。そして非破壊です、すなわちAppleAHCIPort kextを書き換えなません。
このパッチを無効にするには、Disabledキーをfalseからtrueにすれば良いです。
<dict> <key>Comment</key> <string>External icons patch</string> <key>Disabled</key> <true/> <key>Find</key> <data> RXh0ZXJuYWw= </data> <key>InfoPlistPatch</key> <false/> <key>Name</key> <string>AppleAHCIPort</string> <key>Replace</key> <data> SW50ZXJuYWw= </data> </dict>
簡単でしょ?
Arrayに新しいdictを追加する
以下のようなconfig.plistのconfig.plist -> ACPI -> DSDT -> Patchesに新しいパッチを追加してみます。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>ACPI</key> <dict> <key>DSDT</key> <dict> <key>Fixes</key> <dict> <key>FixHPET</key> <true/> <key>FixIPIC</key> <true/> <key>FixRTC</key> <true/> <key>FixTMR</key> <true/> </dict> <key>Patches</key> <array> <dict> <key>Comment</key> <string>change OSID to XSID (to avoid match against _OSI XOSI patch)</string> <key>Disabled</key> <false/> <key>Find</key> <data> T1NJRA== </data> <key>Replace</key> <data> WFNJRA== </data> </dict> <dict> <key>Comment</key> <string>change _OSI to XOSI</string> <key>Disabled</key> <false/> <key>Find</key> <data> X09TSQ== </data> <key>Replace</key> <data> WE9TSQ== </data> </dict> </array>
まずはACPIがあり、その下位にDSDTがあることがわかります。DSDTの下に、Fixesがあり、それと並んでPachesがあります。今はFixesセクションはおいておきます。Pachesだけに注目します。
まずは、<key>Patches</key>の下に、開始タグ (<array>) があり、2個のdictionariesがあります。上で説明したのに似た内容が書いてあるます(Comment, Disabled, Find, Replaceという項目があります)。dictionariesの後に、arrayの終了タグ(</array>)があります。ここでは.<array> と </array>タグの間に新しいdictionaryを追加します。こんなdictionaryです。
<dict> <key>Comment</key> <string>change SAT0 to SATA</string> <key>Disabled</key> <false/> <key>Find</key> <data> U0FUMA== </data> <key>Replace</key> <data> U0FUQQ== </data> </dict>
まずはarrayには順番がありません、どこに入れても良いです。ここでは最後に追加します。すると:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>ACPI</key> <dict> <key>DSDT</key> <dict> <key>Fixes</key> <dict> <key>FixHPET</key> <true/> <key>FixIPIC</key> <true/> <key>FixRTC</key> <true/> <key>FixTMR</key> <true/> </dict> <key>Patches</key> <array> <dict> <key>Comment</key> <string>change OSID to XSID (to avoid match against _OSI XOSI patch)</string> <key>Disabled</key> <false/> <key>Find</key> <data> T1NJRA== </data> <key>Replace</key> <data> WFNJRA== </data> </dict> <dict> <key>Comment</key> <string>change _OSI to XOSI</string> <key>Disabled</key> <false/> <key>Find</key> <data> X09TSQ== </data> <key>Replace</key> <data> WE9TSQ== </data> </dict> <dict> <key>Comment</key> <string>change SAT0 to SATA</string> <key>Disabled</key> <false/> <key>Find</key> <data> U0FUMA== </data> <key>Replace</key> <data> U0FUQQ== </data> </dict> </array>
以上のようになります。