9900Kのsleep問題〜原因はiGPUのデバイスID

更新:ここで紹介した対策は10.14.4で不要になりました。以下は10.14.3以前の情報です。不要になった理由は、9900K CPUがmacOSでサポートされるようになったからだと思われます。10.14.4以降では、以下で説明しているデバイスIDも9900Kの本来の値で問題ありません。本来の値はWhateverGreen.kextが自動で設定してくれますので、config.plistにデバイスIDを書く必要がありません。


ASUSのZ390マザーボードで作ったHackintoshのその後の報告です。sleep/shutdownが全て完璧に動くようになりました。最初の記事はこちらです。(今回の対策を追記してあります)

その後、シャットダウンが不完全な問題を解決すべく試行錯誤したところで、EmuVariableUefi-64.efiを使うことで解決しました。

sleepがまだ不完全

一時はこれで解決したかに見えたのですが、sleepからの復帰がおかしいです。iGPUを使うと、sleepで画面が消えた後、キーボード押下で画面が復帰します。ただし、画面が消えるだけで、CPUファンは回転し続けています。一方、グラフィックスカード(dGPU)を使うと、sleepで画面が消えた後、しばらくはキーボード押下で画面復帰するのですが、15秒くらい経つと画面が復帰しなくなります。さらに放置するとCPUファンの回転も中止しますが、やはり復帰しません。また、この状態ですとJPEGファイルのクイックルックも効かないようです。

という状態で、しばらく頓挫していたのですが、ようやく解決したので報告します。たまたま hackintosher.comで紹介されていたconfig.plistを使ってみたらsleepが機能するようになったので、それと、問題を引き起こしているconfig.plistとの比較からの結論です。

UHD Graphics 630のデバイスID

Intel UHD グラフィックス630は、MacBook Pro 2018やMac mini 2018で使用されています。なのでmacOSの標準ドライバーでサポートされています。でも、UHD 630のデバイスIDはCPUごとに微妙に違います。例えばMacBook Pro 2018で使用される8050HのUHD 630のデバイスIDは0x3E9Bです。Mac mini 2018で使用される8700BのUHD 630デバイスIDも同じく0x3E9Bです。ところが今回使用している9900KのUHD 630のデバイスIDは微妙に違っていて0x3E98なのです。このデバイスIDの不一致が、sleep問題の原因のようでした。

i3-8100でも対応必要

Intel UHDグラフィックス630のデバイスIDの違いは、他のCPUでも問題を引き起こすようです。こちらの記事

で紹介しましたが、Core i3-8100のUHD 630もデバイスIDが異なっていて(0x3E92および0x3E91)、対応が必要だそうです。結果として今回も同じ問題のようです。

9900KのデバイスID対応

上記の記事では、8700K搭載UHD 630のデバイスIDの指定方法が書いてあります。この方法に従うと、デバイスIDを逆順に(little endian方式に)並べた数値に、0x0000を付け加えた値をconfig.plistで指定すれば良いようです。

ただ、上記のサイトでは、「実際のデバイスIDをconfig.plistに書く」とありますが、今回の解決策は、「Macで使われているデバイスIDをconfig.plistに書く」という方法でした。逆のようです。9900KのデバイスIDは先に述べたように0x3E98ですが、これをconfig.plistに書くのではなく、Macで使われているiGPUのデバイスIDである0x3E9Bをconfig.plsitで指定するようです。そこで、まずは0x3E9Bの順番を入れ替え、ゼロを追加します。つまり、0x9B3E0000を指定すれば良いことになります。config.plistではBase64で記述するので、変換します。ターミナルコマンドbase64で0x9B3E0000をBase64変換するには以下のようにタイプします。

echo -ne "\x9B\x3e\x00\x00" | base64

この結果

mz4AAA==

が得られます。この値を、<key>Devices</key>の中の<key>Properties</key>にdevice-idキーとして追加します。

<key>Properties</key>
        <dict>
            <key>PciRoot(0x0)/Pci(0x2,0x0)</key>
            <dict>
                <key>AAPL,ig-platform-id</key>
                <data>
                    AwCSPg==
                </data>
                <key>device-id</key>
                <data>
                    mz4AAA==
                </data>
                <key>framebuffer-patch-enable</key>
                <data>
                    AQAAAA==
                </data>
            </dict>
        </dict>

この結果、sleepが完璧に動くようになりました。つまり、sleepになるよう設定した時間になると、画面が消え、数秒してCPUファンが停止します。その後、キーボード押下などにより、元どおりの画面に復帰します。

今回のconfig.plistの全体を以下に置いておきます。シリアル番号などは伏せ字になっています。

8件のコメント

  1. iGPUをオンにすると、Final Cut Pro XやMotionが起動できなくなるようです。クイックルックができない問題は、NoVPAJpeg.kextで解決したほうが良さそうですね。

    1. iGPUのon/offで特定のアプリで支障が出るのはしばらくは仕方ないようですね。実機でも時々切り替えの問題が出ているので、将来のmacOSで解決されると期待しています。

  2. i7700k + Z270構成で使用しておりますが、sleep後リブートしてしまう問題をHigh Sierraから抱えたままになっています。
    解決したいのですが、参考記事などご存知であればご教示頂けますでしょうか?

    1. スリープの不調は、本当に色々な原因で引き起こされるようで、簡単な解決策は無いように思います。でもその構成は一般的なので、解決可能だと思います。こちらは読んでいただけましたでしょうか?

      https://bootmacos.com/entry/2019/01/22/225515

  3. いつも拝見させて(夢を見させて)いただいております。詳細かつ分かりやすく、大変参考になっております。Gygabite aorus H370gaming3 i9 9900K RX580 の構成でHigh Sierraのブートにようやく成功いたしました。シャットダウンで再起動してしまう問題はEmuVariableUefi-64.efiにて解決したようです。
     現在、イーサネットポートが全く見えていないのと、USB3.0が使えない点を調べております。あと放置しておくと勝手に再起動というのもあります。ご助言いただければ幸いです。

    1. Gygabite Aorus H370 Gaming 3のEthernetチップはIntelですよね。IntelMausiEthernet.kextでは動きませんか?

      USB 3.0は15個制限に引っかかっているのではないでしょうか。こちらがお役にたつかもです。

      放置しておくと勝手に再起動するのは経験があります。macOSのバージョンアップで知らないうちに治りました。滅多に発生しないし、実害もそれほどないので、OSのバグに近いものかと思い諦めています。スリープからの自動復帰と関係ありそうな気がするので、システム環境設定:省エネルギーの設定でスリープ解除する項目を減らすと効果があるかもしれません。

      1. IntelMausiEthernet.kextはotherフォルダに入っておりますが、システム環境設定から見えない状態です。現在はwifiを使用しております。USBはおそらくご指摘の通りだと思いますので、調整していきたいと思います。ありがとうございます

        1. USBは調整してうまくいきました。SS01以外にもUSR1 USR2とかが出てきました。
          イーサネットは相変わらずインターフェイス自体が見えていない状態です。win10ブートでは見えているので、なんらかの対処方があるかと思います。tonymax86のフォーラムではこの症状が出ている人がいないので、しばらくはwifi生活になりそうです。

さうすうぇすと へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です