corpnewtさんのバニラガイド~config.plistの基礎

Redditのhackintosh掲示板で丁寧に質問に答えてくれているCorpnewtさんが、hackintoshのためのバニラデスクトップガイドというページを用意してくれています。バニラなインストールのためのガイドとして優れています。今回は「config.plistの基礎」というページをご紹介します。

またCorpnewtさんのガイドには、CPUごとのconfig.plistの内容が解説されていますが。とても参考になります。以下で紹介しておきました。


(ここから基礎編の抄訳)

config.plistは、/Volumes/EFI/EFI/CLOVER/config.plist にあります。Hackintosh初心者が苦労するファイルの一つです。

これは何か?

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>

以上のようになります。

返信を残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)