サポート対象外のMacでNight Shiftを使う

昨年内部ディスクを SSD に換装して快適さを取り戻した開発機で使っている iMac Mid-2011 ですが、リビング用に購入した MacBook と比較してみるとスマホでは一般的な機能になっている Night Shift の設定が欠けている事に気が付きました。調べてみると、iMac に関しては2012年型から使える機能なようで、ブルーライトで失明してしまったお婆さんの体験談を近所にお住いの方から伺った事もあって、ソフトウェア側から何かできないものかともう少し追いかけると、MacRumors のフォーラムに相当する内容が書かれていました。

参考:

インストーラがあったので簡単に済ませようとしたのが運の何とかではありませんが、再起動後の起動画面で無線キーボードとトラックパッドを認識しなくなると言う問題に直面、内容をよく読むと macOS 10.13.2 は検証中だと…。背面の電源ボタンで強制終了し、コマンド+Rキーで内蔵の macOS 復元システムを立ち上げ、クソ長いクリーンインストールと Time Machine バックアップからの復元か〜と思っていた矢先、SSD にした恩恵に与る事ができました。

気を取り直し原典に当たる事にして、日本語の説明も参考にしつつも、その手順の内容が箸折ってあったのと途中で問題があったので経過を書いておこうと思います。

まず CoreBrightness.framework のバックアップは、デスクトップ等にドラッグしたり直接副クリックからの圧縮をしてデスクトップに移動させるのでも良いのですが、パーミッションが {User}:staff に変更されてしまうため戻すことの手間や後述する手順の作業内容を考えるとゴミ箱にぶち込むと言う手もありそちらの方法を選択しました。

次にエディタアプリで CoreBrightness.framework を開く場合、このフレームワークの置いてある場所 /System/Library/PrivateFrameworks/ で書き込み権限が無いため、一旦デスクトップ等の場所に複製したものを編集しました。編集アプリには iHex を利用しました。

そして、CoreBrightness.framework の ModelMinVersionBLR と言うシンボル名のアドレスを拾います。
$ nm /S*/L*/PrivateFrameworks/CoreBrightness.framework/CoreBrightness|grep _ModelMinVersion
0000000000035000 S _ModelMinVersionBLR

更に16進数ダンプを表示して編集箇所の目星を付け、編集アプリでファイル内検索を利用し実際の編集箇所を見つけます。
$ xxd -s 0x35000 -l 28 /S*/L*/PrivateFrameworks/CoreBrightness.framework/CoreBrightness
00035000: 0900 0000 0100 0000 0d00 0000 0600 0000 ................
00035010: 0500 0000 0600 0000 0800 0000 ............

今回は iMac12,1 に対応させるべく 0d000c00 に書き換え、保存した CoreBrightness.framework を /System/Library/PrivateFrameworks/ へ戻し、$ sudo chown -R root:wheel /System/Library/PrivateFrameworks/CoreBrightness.framework と権限を元に戻しました。

これで最後と思った codesign コマンドでエラーが返ってきました。
$ sudo codesign -f -s - /S*/L*/PrivateFrameworks/CoreBrightness.framework/Versions/Current/CoreBrightness
/System/Library/PrivateFrameworks/CoreBrightness.framework/Versions/Current/CoreBrightness: replacing existing signature
codesign_allocate: error: unable to locate xcodebuild, please make sure the path to the Xcode folder is set correctly!
codesign_allocate: error: You can set the path to the Xcode folder using /usr/bin/xcode-select -switch
/System/Library/PrivateFrameworks/CoreBrightness.framework/Versions/Current/CoreBrightness: the codesign_allocate helper tool cannot be found or used

2つ目のエラーに書いてある sudo xcode-select --switch /Applications/Xcode.app を試しても、Xcode の「環境設定>Locations>Command Line Tools」を確認するも問題がなく、結局1つ目のエラーにあるように .bash_profile ファイルへ export PATH=${PATH}:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ とパスを記述し再読み込みして解決しました。

$ vi .bash_profile
$ source .bash_profile

ここまでやっておいて何なんですが、OS の更新毎に作業が発生する事や、子供が産まれてからは17時以降の作業はやらないようにしているのであまり必要がなかったのかもしれません。

参考:

SSDを増設したiMacを調整

SSD を増設して起動ディスクにした iMac はその後 Apple Hardware Test を行ったところ次のような 4SNS/1/40000000: TH00-9.000 というエラーを返してきました。これは電源分岐を行ったことが原因でハードディスクの温度センサーが接続されていないために起こるようで、言われてみればファンの音が若干大きいかなという気がしたので、iFixit の方法に習って SSD の電源をマザーボードから直接引っ張ることにしました。

電源ケーブルは 922-9862 という商品コードらしいので、eBay で検索して $5.29 (Free international shipping) で中国から発送のものを購入しました。

前回の作業で分解の要領は得ているので淡々と作業を進めて行ったのですが、購入した電源ケーブルの接続部分が逆方向に曲がっていたので両面テープを貼り直し SSD を裏返してくっ付けることになりました。

再度行なった Apple Hardware Test は問題もなく、ファンもおとなしくなり、ようやく修理完了です。

最後にハードウェアネタが続いた余談で、「Apple is Really Bad At Design」 という記事に、電子レンジやテレビを例に「多くの人は部品を交換しないで本体を買い替えるんだよ」というコメントがあり、今回の作業を終えた後だけあって興味深く読みました。

参考:

iMacにSSDを増設

注意:ここで紹介した電源を分岐する方法は、Apple Hardware Test でエラーとなるので、電源を直接マザーボードから引く方法について書きました。「SSDを増設したiMacを調整

開発用途の機種に未だ iMac Intel 21.5インチ Mid 2011 EMC 2428 を使っています。購入時は 8GB だったメモリ容量は3年ほど前に Parallels と Photoshop の同時利用で重たくなったので最大 16GB に増設したのですが、近年は Xcode と Android Studio の同時利用に加えて、ハードウェア買い替えの目安の一つである IME(インプット・メソッド・エディタ)の和英文字入力切り替え時、特にライブ変換の際にもたつきと引っかかりが感じられるようになりました。その度にアクティビティモニタから日本語入力プログラムのプロセスの強制終了して騙し騙し使っていましたが、丁度(改造に失敗しても潔く買い替えの理由になる)iMac シリーズの刷新の噂もあり内臓 SSD を設置して起動ディスクを変更することにしました。

もう今更感たっぷりな作業なのは恐縮ながら Amazon で用意したものはこちら。

余談で SSD は 2TB が激安価格だったので一度挑戦しましたが、案の定返金されて 525GB を買い直しました。


SSD の固定は Vintage Computer のキットを使わずにホームセンターで買ってあった両面テープにし、

前例報告は多々あるので作業を要約しますと、OWC が提供しているインストールビデオの通り片方に二枚貼り DVD ドライブ裏の曲面に合うようにしました。

マザーボードの背面側から、シリアルケーブルは下から回すという説明だったのですがヒートシンクに沿って通っていた黒いケーブルがあったので上方向にしました。

その結果 SSD 上部で折り返す羽目になってしまったので、0.3m の短いものでも良かったなと少し後悔しました。

最終的には下L型の二股電源ケーブルのお陰でヒートシンク部分と衝突することなくうまく収まりました。


最後に失敗談として、HDD のサーモセンサーのピンが抜けずマイナスドライバで押したところどこか遠くの方でカラ〜ンと音がしてプラスチックの接合部分を無くしてしまいました。幸運なことに金属部分は残っていたので組立時には iFixit の拡大図で極を確認しラジオペンチで差し込み絶縁テープを貼っておきました。(焦って写真がピンボケ笑)

起動後に元の内臓 HDD からデータを移行し sudo trimforce enable を実行し完了です。Fusion Drive 化も検討しましたが、ファイル配置が自動的に決定されることがなんとなく嫌だったので却下し、SSD をシステム用に、HDD をデータ用として運用しています。デスクトップ機種でシステム終了することが少ないため起動時の速度に喜びを感じることが少ないのですが、Parallels などのアプリの起動時や IME 切り替えの滑らかさなど、OS の更新による快適さも考えられるので結局買い替えをまた逃すことになってしまいました。


それでも片方の USB 2.0バスが逝ってしまったり限界がかなり近くなっていることは間違いないので、子供に譲るまでもう少し頑張ってもらいたいところです。

参考: