Mac信者のHackintosh修行

惑星で一番美しいOSが1台でも多くのマシンで動くことを目指します。

Sandy Bridge搭載Thinkpad X220でMojave

f:id:siroanko:20180629123322p:plain

Sandy Bridge CPUとIntel HD Graphics 3000を搭載したThinkpad X220でmacOS Mojave Public Betaが動きました。機種チェックをさせないようにブートオプション設定して、グラフィックスドライバーを入れれば動きます。

前回のあらすじ

Thinkpad X220にHigh Sierraをインストールする記事を書きました。

siroanko.hatenablog.com

Thinkpad X220は、IBMが打ちやすさにこだわって設計したキーボードを備えた最後のモデルです。Sandy Bridge世代の製品で、MacintoshではMacBookPro8,1や、Macmini5,1に相当します。今回のMojaveでこれらは全てサポート外になりました。Thinkpadらしさを留めたX220が、現行macOSで動かなくなるのは残念なことでした。

Mojaveで動かない理由

Mojaveが非対応モデルで動かない理由は次の2点です。一つは、Mojaveの起動時にマシンのBoard-IDをチェックしていることです。チェックの結果、Mojave非対応モデルでは起動を中断します。この結果、画面に禁止マークが出て止まってしまいます。

f:id:siroanko:20180628102100p:plain

もう一つは、グラフィックスドライバーが提供されていない事です。Intel HD Graphics 3000のドライバーが、Mojave から削除されてしまったのです。

f:id:siroanko:20180628224734p:plain

(1) 機種チェックをさせないようにする

Cloverを-vオプション付けて起動すると、禁止マークの裏で表示されているエラーメッセージがわかります。

f:id:siroanko:20180628102238p:plain
この番号はconfig.plistのSMBIOSセクションに書き込んだ Board-IDでした。MacBookPro8,1 (Early/Late 2011) が内蔵しているボードのIDです。これをチェックして、Mojave対応モデルかどうかを調べているようです。

機種チェックを行わないようにするには、Cloverのブートオプションに

-no_compat_check

を追加します。5chで教えてもらいました。例えばconfig.plistに以下のように設定します。

<key>Boot</key>

  <dict>

    <key>Arguments</key>

    <string>-v -no_compat_check</string>

これでMojaveが一応起動するようになります。

(2) グラフィックスドライバを入れる

機種チェックを回避すれば一応は起動します。しかし解像度は1024x768画素と低解像度で、解像度を上げることはできません。画面はチラつき、画面描画も遅いです。とても実用にはならない状態です。これはMojaveからIntel HD Graphics 3000のドライバが削除されてしまったからです。なんてことをするんだと思いますが、このモデルがOSの動作対象外になったので仕方ないところです。

でも嬉しいことに、以前のバージョンからドライバを持って来れば動くという情報がtonymacx86にありました。

www.tonymacx86.com

どういうわけか一世代前のSierraのドライバが良いようです。tonymacx86でこの方法を紹介してくれた人の話では、最初は直近世代のHigh Sierraのドライバを試したところ、ブラックスクリーンが出て動作しなかったそうです。そこで、もう一世代前のSierraを試したら成功したとのことでした。ということで、Sierra から、

  • AppleIntelHD3000Graphics.kext
  • AppleIntelHD3000GraphicsGA.kext
  • AppleIntelHD3000GraphicsGLDriver.bundle
  • AppleIntelHD3000GraphicsVADriver.bundle
  • AppleIntelSNBGraphicsFB.kext
  • AppleIntelSNBVA.bundle

 の6個のkext/bundleをMojaveに持ってきます。これを/System/Library/Extensions/に入れます。EFI/CLOVER/kextsの中に入れてもある程度動きますが、Maps.appなどの表示に問題が発生します。/S/L/E/に入れるとvanillaなシステムにならないのですが、仕方ないところです。/S/L/E/にkextを入れてパーミッションやキャッシュを設定するのは手作業でも可能ですが、今回はこのツールを使いました。

f:id:siroanko:20180701151849p:plain

また、追加したkextを有効にするSIP設定をします。config.plistを以下のように設定します。通常、野良kextを/S/L/Eで使うには0x03にするのですが、今回はApple純正のkextなので0x02でも良いようです。0x01は信頼できないkextを許可する、0x02はファイルシステムへの制限を無効にする設定のようです。できるだけSIPの機能を生かすためには、最小限の0x02が良いと思います。

<key>RtVariables</key>

        <dict>

        <key>CsrActiveConfig</key>

             <string>0x02</string>

        </dict>

Mojaveが動いた

この結果、フル解像度でMojaveが動くようになりました。グラフィックスがちゃんと動いているかどうかを確認するには、Maps.appで地図が正しく表示されるかどうか、SafariYoutube動画を再生できるかどうか、などを確認すると良いそうです。

「このMacについて」を見ると、機種はEarly 2011のMacBook Proになっています。またグラフィックスもIntel HD Graphics 3000になっています。古いドライバが仕事をしていることがわかります。Mojaveでは本来起動もしない仕様なマシンであることが面白いと思います。

Metalをサポートした機種のみがMojave対応になりましたが、Mojaveを動かすためにMetalは必ずしも必要ではないようです。今回Mojaveが非対応になった実機のMacでも、同じような手法でMojaveを動かすことが可能だと思われます。

f:id:siroanko:20180628191644p:plain 

Mojaveを動かすもう一つの方法

Mojaveのサポートから外された古いMacでMojaveを動かすためのパッチが公開されています。実機を対象としたパッチですが、Hackintosh でも有効と思われます。

macOS Mojave Patcher

このパッケージの中を見てみると、Intel HD Graphics 3000のドライバーなどが含まれています。おそらく、上で紹介した手法と同様に、古いmacOSから持ってきたドライバーを利用しているのでしょう。また、macOSにパッチを当てることで機種チェックを回避していると思われます。