現行のMacintoshからはすっかり駆逐されてしまった光学ドライブですが、Hackintoshなら5.25インチベイ搭載ケースを使っていくらでも復活できます。CD-ROMでもDVDでもokです。実機にはついぞ搭載されなかったBlu-rayドライブも搭載可能です。1台だけでなく2台3台と搭載することだって可能です。読み出すだけじゃなくて書き込むこともできます。搭載するに当たって、特に難しいことはありません。SATAケーブルと電源を配線するだけです。
Table of Contents
「可能な場合でもハードディスクをスリープさせない」
簡単、かんたん、a piece of cakeだと思っていたら、「空のdvdがセットされました」というメッセージが出て、操作不能になることがあります。Pioneerのドライブで発生するような気がします。
一部の光学ドライブは、スリープコマンドを送りつけて動作を止めると、次にアクセスした時に復帰できないようです。にもかかわらず、macOSの省エネルギー設定では、「可能な場合はハードディスクをスリープさせる」ことがデフォルト設定になってます。これがトラブルの原因です。なので、この問題は、「システム環境設定」の「可能な場合はハードディスクをスリープさせる」のチェックを外すことで解決します。
カーネル拡張(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
でした。スペースの数(3個あります)も重要で、全部で15文字のはずです。
Cloverのconfig.plistでパッチを当てる
古代の手法では、 PioneerSuperDrive.kextの該当ファイルをバイナリーエディタで開いて、データを書き換えていました。これは色々問題があります。特に、OSのバージョンアップのたびに同じことをやらなければならないのが面倒です。現代風の方法では、Cloverの動的パッチ機能を使います。起動するタイミングでパッチを当ててくれる機能です。
設定ファイルconfig.plistにパッチ情報を書き込むのですが、この時、バイナリーデータを文字に対応させて変換するBase64という方式を使います。Base64への変換は、ターミナルのbase64コマンドで可能です。例えば、DVD-RW DVR-105(スペースは2個)とBD-RW BDR-205(スペースは3個)の文字列をBase64に変換するには、ターミナルで以下のようにタイプすれば良いです。
$ echo -n "DVD-RW DVR-105" | base64 RFZELVJXICBEVlItMTA1 $ echo -n "BD-RW BDR-205" | base64 QkQtUlcgICBCRFItMjA1
変換前後の文字列のBase64表記がわかりましたので、いよいよ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に置き換えてくださいという指示です。これでめでたくスリープ問題が根本的に解決されるはずです。
OpenCoreのconfig.plistでパッチを当てる
OpenCoreでも同様に、config.pistの指定で動的にパッチ当てが可能です。以下にその方法を紹介しておきました。
キーボードから開閉したい
ご存知ようにアップルの純正キーボードには光学ドライブをイジェクトするキーがついています。今風のMacintoshでは使いようのない無駄なキーですが、光学ドライブを搭載したHackintoshなら有効に使ってあげられます。と、思ったら、これが効かないこともありました。
解決策がこちら、
で紹介されています。AHCI_3rdParty_SATA.kextに手を加えて使用する方法です。日本語で紹介された解説が、こちらにあります。