2015年iMacをOCLPで機種偽装したらユニバーサルコントロールが動いた!なお再起動後……
2015年iMacでOCLPを使って機種偽装。ユニバーサルコントロールは実際に動いたが、再起動後はセーフモードでしか起動せず、Monterey再インストールで復旧した記録。
6,600円のiMacでユニバーサルコントロールを使いたい
6,600円で入手した2015年の21.5インチRetina 4K iMac。普通にmacOS Montereyが動くし、画面もきれい。せっかくなら手元のM1 MacBook Proとキーボード・マウスを共有したい。
そこで思いついたのが、Appleの「ユニバーサルコントロール」。隣のMacへカーソルを移動して、そのまま操作できる機能だ。ディスプレイを外部モニターにする機能とは違って、それぞれのMacをそれぞれのOSで動かしたまま操作できる。
ところが、このiMacは対象外。Monterey自体は公式に対応しているのに、ユニバーサルコントロールには対応していない。いや、そこだけダメなんか???
なら機種を偽装したらどうなるんだろう。ということでOpenCore Legacy Patcher(OCLP)を触り始めた。結果から言うと、実際にユニバーサルコントロールは動いた。ただし、その後の再起動で通常起動できなくなった。 その一部始終を残しておく。
今回の環境
- iMac:21.5インチ Retina 4K Late 2015(本来のモデル識別子:
iMac16,2) - GPU:Intel Iris Pro Graphics 6200
- OS:macOS Monterey
- 相手側:M1 MacBook Pro
- 使用ツール:OpenCore Legacy Patcher(OCLP)
- 偽装先のモデル識別子:
iMac18,2
このiMacのGPUはIntel製。一方、偽装先のiMac18,2は2017年の別構成のiMacだ。ここが後々の問題に関係したのでは、と疑っている。ただし、原因を断定できるログは取れていない。
OCLPでモデル識別子を偽装
今回は非対応の新しいmacOSを入れたかったわけではない。もともとMontereyを使っていて、ユニバーサルコントロールの機種制限をどうにかしたかった。
OCLPでSMBIOS関連の設定を変更し、モデル識別子をiMac16,2からiMac18,2に偽装。OpenCoreをビルドして内蔵ディスクのEFIに導入した。作業時にはSMBIOS Spoof LevelのModerateやFeatureUnlockも扱った。
シャットダウン後、Optionキーを押して起動選択画面を出し、EFI BootからOpenCore経由で起動。Apple IDへの再サインインも行った。
機種情報を確認すると、モデル識別子は次のように表示された。
Model Identifier: iMac18,2
実際のGPUが別物になったわけではない。macOSから見える機種情報を変えている、というのがポイント。
まさかの成功。MacBook Proと操作を共有できた
その後、ユニバーサルコントロールの設定が現れた。しかも、設定画面に項目が出ただけではない。M1 MacBook Proとの間でマウスとキーボードを実際に共有できた。
2015年の非対応iMacでも動くんかいwww
ここまでは成功。ただし、これは「一度動いた」という実績であって、「この偽装構成で安定して使える」という意味ではない。そこを思い知らされるのは、この後だった。
再起動したら通常起動しなくなった
機種偽装後、再起動したところ、今度はmacOSが通常モードで起動しなくなった。完全に何もできなくなったわけではなく、セーフモードでしか起動できない状態。
当然、まずは偽装したモデル識別子を元に戻そうとした。しかし、セーフモードでは必要な書き込みができず、設定を戻す作業が進まない。EFIを扱おうとした際には、こんなコマンドも実行している。
sudo mkdir -p /Volumes/EFI
sudo mount_msdos -o rdonly /dev/disk0s1 /Volumes/EFI
結果は次のエラー。
mount_msdos: msdos filesystem is not available
このときはmsdosfs.kextの読み込みに関するエラーも出た。ただし、これらのエラーが起動不良そのものの原因だったとは確認できていない。また、上のマウントコマンドは読み取り専用指定なので、これだけで書き戻しを試みたわけではない。
いや、便利にするつもりが復旧作業になってるんだが???
原因はGPU周り? ただし未確定
自分が疑っているのは、モデル識別子をiMac18,2に偽装したことで、macOS側が実機に合わない設定やグラフィック関連の処理を選んでしまい、描画に問題が起きた可能性。
実機はIntel Iris Pro 6200搭載なのに、偽装先は構成が異なる。セーフモードでだけ起動できたという症状も、グラフィック周りの問題という仮説とは矛盾しない。
ただし、macOSが別機種用GPUドライバを誤って読み込んだと確定したわけではない。 セーフモードでは通常起動時と読み込む機能が異なるため、ほかの拡張やOpenCoreの設定が関係していた可能性もある。詳しい原因は未特定だ。
復旧モードからEFIを書き直す手もあったかもしれない
理論上の復旧案として考えていたのが、OCLPで修正済みのOpenCore EFIを再ビルドし、macOS復旧モードからEFIパーティションに書き込む方法。
これなら、通常起動できなくても偽装設定を変更できた可能性はある。ただし今回は試していない。 復旧モードで対象EFIにアクセスできるか、書き込んだ設定で本当に正常起動するかも未検証。確実に直る方法として紹介するつもりはない。
何より、そのときはすでに復旧作業がめんどくさくなっていた。もう入れ直した方が早くね? ((((
結局Montereyを再インストール
最終的に選んだのはmacOS Montereyの再インストール。あわせてOpenCoreのEFIも削除し、機種偽装を解除した。
その結果、モデル識別子は元の状態に戻り、iMacは再び正常に起動するようになった。現在はMontereyで安定して動作している。
ユニバーサルコントロールを動かす実験自体は成功した。でも、再起動後の安定性までは確認できていなかったわけだ。
今回の教訓
今回分かったのは、「一度動いた」と「常用できる」は全然違うということ。OCLPによる機種偽装は便利な可能性がある一方、実機との食い違いがトラブルにつながる可能性もある。
同じことを試すなら、変更前のEFIや設定をバックアップして、通常起動できなくなった場合の戻し方まで考えておきたい。特に、セーフモードで起動できても簡単に修正できるとは限らない。
6,600円のiMacでユニバーサルコントロールが動いたのは確かに面白かった。なお、最後はOS再インストール。ジャンカーの実験ってこういうところあるよなwww