サイトアイコン Boot macOS

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

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

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

Corpnewtさんのhackintoshデスクトップのためのバニラガイドから、今回は「Haswellマシンのためのconfig.plistの作り方」のページをご紹介します。ちなみにこのガイドでは、 Haswell Skylake Kaby Lake Coffee Lakeのconfig.plistの作り方が解説してあります。他のCPUを使う場合はそれを見てください。また、Config.plistの基礎編もご覧ください。世代の近いCPUではそれぞれかなりの部分が共通です。Haswellは実際のiMacで採用されていて、歴代CPUの中でも互換性が高いと評判です。なので特殊な設定はありません。(ここから抄訳)...
corpnewtさんのバニラガイド~Haswell用config.plist - Boot macOS
Corpnewtさんのhackintoshデスクトップのためのバニラガイドから、今回は「Skylakeマシンのためのconfig.plistの作り方」のページをご紹介します。ちなみにこのガイドでは、 Haswell Skylake Kaby Lake Coffee Lakeのconfig.plistの作り方が解説してあります。他のCPUを使う場合はそれを見てください。また、Config.plistの基礎編もご覧ください。世代の近いCPUではそれぞれかなりの部分が共通です。Skylakeは実際のiMacで採用されているので、互換性が高く特殊な設定はありません。(ここから抄訳)(訳注:元記事ではClover Conf...
corpnewtさんのバニラガイド~Skylake用config.plist - Boot macOS
Corpnewtさんのhackintoshデスクトップのためのバニラガイドから、今回は「Kaby Lakeマシンのためのconfig.plistの作り方」のページをご紹介します。ちなみにこのガイドでは、 Haswell Skylake Kaby Lake Coffee Lakeのconfig.plistの作り方が解説してあります。他のCPUを使う場合はそれを見てください。また、Config.plistの基礎編もご覧ください。世代の近いCPUではそれぞれかなりの部分が共通です。Kaby Lakeは実際のMacのモバイルモデルで採用されているので、互換性が高く特殊な設定はありません。(ここから抄訳)(訳注:元...
corpnewtさんのバニラガイド~Kaby Lake用config.plist - Boot macOS
Corpnewtさんのhackintoshデスクトップのためのバニラガイドから、今回は「Coffee Lakeマシンのためのconfig.plistの作り方」のページをご紹介します。ちなみにこのガイドでは、 Haswell Skylake Kaby Lake Coffee Lakeのconfig.plistの作り方が解説してあります。他のCPUを使う場合はそれを見てください。Config.plistの基礎編もご覧ください。世代の近いCPUではそれぞれかなりの部分が共通です。Coffee Lakeは実際のMacでの搭載実績がないため、iGPUを使う部分が少し複雑になっています。iGPUを使わなければほぼKaby Lake以前と...
corpnewtさんのバニラガイド~Coffee Lake用config.plist - Boot macOS

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

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の意味を説明します。

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>

以上のようになります。

モバイルバージョンを終了