macOS High Sierra の「Night Shift」を古い Mac で有効にする方法

macOS Sierra から「High Sierra」にアップグレードしましたが、Night Shift の機能を判定するモデル ID が追加され変更になったので、High Sierra 用の記事を作成しました。
macOS Sierra をお使いの方は、macOS Sierraの「Night Shift」を古いMacで有効にする方法 を参考にしてください。

ディスプレイの色温度を低くして目への負担を軽減してくれる「Night Shift」機能が、macOS Sierraの 10.12.4 からMacでも使用できる様になりました。設定は、システム環境設定のディスプレイから可能です。

Night Shift の対応機種は、macOS Sierra 10.12.4 〜 を搭載した以下のMacになります。Mac で Night Shift を使う方法 – Apple サポートより引用

  • MacBook (Early 2015 以降)
  • MacBook Air (Mid 2012 以降)
  • MacBook Pro (Mid 2012 以降)
  • Mac mini (Late 2012 以降)
  • iMac (Late 2012 以降)
  • Mac Pro (Late 2013 以降)

外部ディスプレイを使う場合は以下の製品を使う必要があります。

  • Apple LED Cinema Display
  • Apple Thunderbolt Display
  • LG UltraFine 5K Display
  • LG UltraFine 4K Display

2011 年製の MacBook Pro は対応機種では無いので享受するとこはできませんが、ハードウェアレベルのチェックで無く、システムファイル(CoreBrightness.framework)の数値を変更するだけなので、Night Shiftを有効にしてみました。

対応していない Mac で Night Shift を有効
対応していない Mac で Night Shift を有効

非対応のMacでNight Shift(ナイトシフト)を有効にする手順

Supported Mac models for Night Shift in High Sierra 10.13.2 – Pike’s Universum を参考に数値やコマンドを引用させて頂きました。

Night Shift を有効にする Mac の機種は、MacBook Pro 15 Early 2011 で、macOSX High Sierra のバージョンは、10.13.6 です。
Apple の開発アプリの Xcode もしくは、hex エディターが必要です。この記事では、Xcode を使用しています。Xcode は、Mac App Store からダウンロードできます。

Mac のセキュリティ整合性保護機能(SIP:System Integrity Protection)を一時的に無効にして、管理者権限の sudo コマンドで、システムファイルを編集しますので、ご注意ください。

手順 1 SIP を無効にする

リカバリモード(Command + R を押しながら)で Mac を起動。Apple ロゴとプログレスバーが表示されたらキーを離してもOKです。

起動後に画面上部にあるメニューの「ユーティリティ」にある「ターミナル」をクリックして、ターミナルを起動。SIP を無効にするために以下のコマンドを実行します。

csrutil disable
macOS リカバリモードで起動し、ターミナルでSIPを無効
macOS リカバリモードで起動し、ターミナルでSIPを無効

成功すると、Successfully disabled System Integrity Protection. Please restart the machine for the changes to take effect. と表示されますので、Macを再起動します。

手順 2 CoreBrightness.frameworkのバックアップ

CoreBrightness.framework は以下のディレクトリになりますので、Finder メニューの「移動」->「フォルダへ移動」をクリックして、以下のディレクトリに移動します。

/System/Library/PrivateFrameworks/

CoreBrightness.frameworkは、フォルダになっていますので全てバックアップ。
イレギュラーな方法ですので、元に戻す場合に備えてオリジナルは、安全な場所に別途保存をおすすめします。
※ SIP が無効になっていない場合は、CoreBrightness.framework の中身が表示されません。SIP を無効にしてください。

手順 3 Xcode で CoreBrightness.framework を開く

Xcode を立ち上げて、メニュー「File」-> 「Open…」で CoreBrightness.framework の中にある「CoreBrightness」を開きます。ショートカットアイコンのように矢印がついているアイコンです。

CoreBrightness ディレクトリ
CoreBrightness ディレクトリ

ファイルを開いた状態で、Shift + Command + J で Project navigator を表示して、以下の画像のように左カラムの CoreBrightness を右クリック ->「Open As」 -> 「Hex」で開きます。

Xcode Hexとして開く
Xcode Hexとして開く

手順 4 Macの機種IDの数値を変更する

Xcode で CoreBrightness を開いた状態
Xcode で CoreBrightness を開いた状態

CoreBrightnessを開いた状態で、Command + F で以下の文字列を検索します。

0900 0000 0100 0000 0d00 0000 0600 0000 0500 0000 0600 0000 0800 0000

上記の数値で、Night Shift に対応する機種か否かを判定しているので、数値の変更のみで有効にすることができます。

具体的には、機種 ID と対応する数値は以下になっています。
※ 機種 ID は、Finder の「このMacについて」「システムレポート…」で確認することが可能です。

  • MacBookPro9,x = “09”
  • iMacPro1,x = “01”
  • iMac13,x = “0d”
  • Macmini6,x = “06”
  • MacBookAir5,x = “05”
  • MacPro6,x = “06”
  • MacBook8,x = “08”

今回 Night Shift を有効にするのは MacBook Pro なので、上記の数値(0900 0000)から MacBookPro9,x の機種がデフォルトで Night Shift を利用することができます。

私の MacBook Pro 15 Early 2011 の場合、機種 ID は MacBookPro8,2 になるので、本来は有効にできませんが MacBookPro9,x を意味する「09」の部分を MacBookPro8,2 の「08」に変更することで Night shift を有効にして使用することが可能になります。
以下が変更した数値になります。
変更箇所は先頭の「08」のみ。

0800 0000 0100 0000 0d00 0000 0600 0000 0500 0000 0600 0000 0800 0000

変更時のカーソルの位置が分りづらいですが、2つの数値を選択して入力する方法が入力しやすかったです。
変更後保存して、CoreBrightness.framework を /System/Library/PrivateFrameworks/ に上書き、もしくは削除して配置します。

手順 5 変更した数値をシステムに反映させる

ターミナル.app で以下のコマンドを実行して、署名をし直す必要があります。
※最初は、パスワードは 2 回聞かれました。

sudo codesign -f -s - /S*/L*/PrivateFrameworks/CoreBrightness.framework/Versions/Current/CoreBrightness

この記事を書いた後に High Sierra をクリーンインストールしたのですが、上記のコマンドを実行した際にエラーが出るようになりました。

エラー その 1

Xcode の Command Line Tools は、既にインストール済みですが、エラーのようなので、Xcode.app のメニュー -> Open Developer Tool -> More Developer Tools… から Command Line Tools を Apple のサイトからダウンロード。インストールして解決しました。

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

エラー その 2

CoreBrightness.tbd を署名できないエラーのようです。

code object is not signed at all
In subcomponent: /System/Library/PrivateFrameworks/CoreBrightness.framework/Versions/A/CoreBrightness.tbd

Doesn’t work with 10.14.1 · Issue #6 · aonez/NightShiftPatcher · GitHub に記載の以下のコマンドを実行して、CoreBrightness.tbd を削除しました。

sudo rm /System/Library/PrivateFrameworks/CoreBrightness.framework/Versions/Current/CoreBrightness.tbd

エラー解消後に、再度 codesign を実行したところ無事に反映することができました。
以上で、編集作業は終了です。

※ エラーが表示された場合は、エラーメッセージや Xcode.app で確認してください。

今回手順 5 のシステムに反映させるのを忘れてしまい、かつ CoreBrightness.framework を保存し終了にする時に Xcode が落ちたまま再起動したことにより、macOS が起動しなくなりました。原因は、CoreBrightness.framework が適切に保存されておらず、手順 5 を実施していればエラーが表示されトラブルを防げたかと思います。
リカバリモード(Command + R を押しながら)で Mac を起動し、ターミナル.app から CoreBrightness.framework を削除して無事に起動しました。

手順 6 SIPを有効にして完了

手順 1 で SIP を無効にしたので、元の状態に戻します。
Command + R を押しながら Mac を起動。起動後に画面上部にあるメニューの「ユーティリティ」にある「ターミナル」をクリックして、ターミナルを起動。SIP を有効にするために以下のコマンドを実行します。

csrutil enable

SIP を有効にしたとのメッセージの表示後にMacを再起動。システム環境設定のディスプレイに、Night Shift のタブが表示されていれば成功です!
SIP が有効になっているか否かは、以下のコマンドで確認することができます。有効になっている場合は、enabled と表示されます。

csrutil status

Night Shift機能をメニューバーから操作するアプリ「Shifty」

「Shifty」は、f.luxのようにメニューバーからNight Shiftのオン/オフ, 色温度の調整, アプリごとの設定、1時間のみ無効、開始終了時間の無効の操作が行えるので、便利ですね。
※再起動などのログイン時に起動させるには、PreferencesのLaunch Shifty at Loginをオンにする必要があります。

Night Shift機能をメニューバーから操作「Shifty」
Night Shift機能をメニューバーから操作「Shifty」

Shiftyのダウンロードは、Shifty – Get more control over Night Shift になります。ソースコードは GitHub – thompsonate/Shifty にて公開されています。

macOSのアップデート後について

macOS をアップデートすると Night Shift を有効にするために編集した CoreBrightness.framework がデフォルトに戻ってしまい Night Shift が無効になるので、再度設定が必要になる場合があります。

MOST READ 昨日のアクセス数ランキング

コメントをどうぞ

コメントは確認後に反映されます。
コメント内容、名前(ニックネーム可)、メールアドレスの項目は必須となります。メールアドレスは公開されません。