Mac信者のHackintosh修行

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

光学ドライブを使う

f:id:siroanko:20181029215850p:plain

現行のMacintoshからはすっかり駆逐されてしまった光学ドライブですが、Hackintoshなら5.25インチベイ搭載ケースを使っていくらでも復活できます。CD-ROMでもDVDでもokです。実機にはついぞ搭載されなかったBlu-rayドライブも搭載可能です。1台だけでなく2台3台と搭載することだって可能です。読み出すだけじゃなくて書き込むこともできます。搭載するに当たって、特に難しいことはありません。SATAケーブルと電源を配線するだけです。

「可能な場合でもハードディスクをスリープさせない」

簡単、かんたん、a piece of cakeだと思っていたら、「空のdvdがセットされました」というメッセージが出て、操作不能になることがあります。Pioneerのドライブで発生するような気がします。

一部の光学ドライブは、スリープコマンドを送りつけて動作を止めると、次にアクセスした時に復帰できないようです。にもかかわらず、macOS省エネルギー設定では、「可能な場合はハードディスクをスリープさせる」ことがデフォルト設定になってます。これがトラブルの原因です。なので、この問題は、「システム環境設定」の「可能な場合はハードディスクをスリープさせる」のチェックを外すことで解決します。

 

f:id:siroanko:20170911123608p:plain

カーネル拡張(kext)にパッチを当てる

上記の方法だと、当然ですがハードディスクはスリープしなくなります。また、私は経験したことがありませんが、この方法でも解決しないという報告もあるようです。そこで正攻法で根本的解決方法、つまりシステムにパッチを当てる方法を紹介します。

アップル社は対策済み

アップル社もこの問題はよ〜く分かっていて、旧型Mac Proに搭載されているPioneerの光学ドライブに対して対策をしています。PioneerSuperDrive.kextの中で、Pioneerの光学ドライブの型番を指定して、このドライブだけはスリープさせないようにという設定がされているようです。その型番とは、

DVD-RW  DVR-105

です。この対策を担当しているkextは、PioneerSuperDrive.kextです。試しに、

/System/Library/Extensions/AppleStorageDrivers.kext/Contents/PlugIns/PioneerSuperDrive.kext/Contents/PlugIns/PioneerSuperDrive.kext/Contents/MacOS/PioneerSuperDrive

をhexdump -Cしてみると、

00000fb0  70 6c 65 5f 64 72 69 76  65 72 5f 50 69 6f 6e 65  |ple_driver_Pione|

00000fc0  65 72 53 75 70 65 72 44  72 69 76 65 00 44 56 44  |erSuperDrive.DVD|

00000fd0  2d 52 57 20 20 44 56 52  2d 31 30 34 00 31 2e 31  |-RW  DVR-104.1.1|

00000fe0  30 00 44 56 44 2d 52 57  20 20 44 56 52 2d 31 30  |0.DVD-RW  DVR-10|

00000ff0  35 00 4e 6f 20 53 6c 65  65 70 00 54 72 75 65 00  |5.No Sleep.True.|

と書いてあります。DVD-RW  DVR-105をNo Sleepにするって書いてあるように見えます。DVR-104も対策済みみたいにも見えます。運良く、これらの型番のドライブをHackintoshに搭載した人は、きっとこの問題に遭遇しないのでしょう。そうでない人は、ファイルに書かれた型番を、実際に使っているドライブの型番に書き換えればよいわけです。

光学ドライブの型番を知る

光学ドライブの型番は、「リンゴマーク」「このMacについて」「システムレポート(システム情報)」「ハードウェア」「SATA/SATA Express」とだどっていけば、見つかります。手元の例ではPIONEERという表記を除いて、

BD-RW   BDR-205

でした。スペースの数(2個あります)も重要で、全部で15文字のはずです。

PioneerSuperDrive.kextにパッチを当てる

古代の手法では、 PioneerSuperDrive.kextの該当ファイルをバイナリーエディタで開いて、データを書き換えていました。これは色々問題があります。特に、OSのバージョンアップのたびに同じことをやらなければならないのが面倒です。現代風の方法では、Cloverの動的パッチ機能を使います。起動するタイミングでパッチを当ててくれる機能です。

設定ファイルconfig.plistにパッチ情報を書き込むのですが、この時、バイナリーデータを文字に対応させて変換するBase64という方式を使います。変換してくれるツールはたくさんありますが、例えばここが使えます。

www.base64encode.org

そうすると:

DVD-RW DVR-105 = RFZELVJXICBEVlItMTA1

BD-RW BDR-205 = QkQtUlcgICBCRFItMjA1

 だということがわかります。

では、いよいよconfig.plistを開いて、KextsToPatchセクションに以下を追加します。

 <key>KextsToPatch</key>

 <array>

 <dict>

         <key>Comment</key>

         <string>PioneerBD-RW No Sleep</string>

         <key>Find</key>

         <data>RFZELVJXICBEVlItMTA1</data>

         <key>Name</key>

         <string>PioneerSuperDrive</string>

         <key>Replace</key>

         <data>QkQtUlcgICBCRFItMjA1</data>

 </dict>

 </array>

なんとなくわかると思いますが、PioneerSuperDrive.kextの、RFZELVJXICBEVlItMTA1というデータを検索して、QkQtUlcgICBCRFItMjA1に置き換えてくださいという指示です。これでめでたくスリープ問題が根本的に解決されるはずです。

キーボードから開閉したい

f:id:siroanko:20170911121604p:plain

ご存知ようにアップルの純正キーボードには光学ドライブをイジェクトするキーがついています。今風のMacintoshでは使いようのない無駄なキーですが、光学ドライブを搭載したHackintoshなら有効に使ってあげられます。と、思ったら、これが効かないこともありました。

解決策がこちら、

www.tonymacx86.com

で紹介されています。AHCI_3rdParty_SATA.kextに手を加えて使用する方法です。日本語で紹介された解説が、こちらにあります。

www.reddit.com