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(ナイトシフト)を有効にする手順
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 からダウンロードできます。
手順 1 SIP を無効にする
リカバリモード(Command + R を押しながら)で Mac を起動。Apple ロゴとプログレスバーが表示されたらキーを離してもOKです。
起動後に画面上部にあるメニューの「ユーティリティ」にある「ターミナル」をクリックして、ターミナルを起動。SIP を無効にするために以下のコマンドを実行します。
csrutil disable
成功すると、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」を開きます。ショートカットアイコンのように矢印がついているアイコンです。
ファイルを開いた状態で、Shift + Command + J で Project navigator を表示して、以下の画像のように左カラムの CoreBrightness を右クリック ->「Open As」 -> 「Hex」で開きます。
手順 4 Macの機種IDの数値を変更する
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 で確認してください。
リカバリモード(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をオンにする必要があります。
Shiftyのダウンロードは、Shifty - Get more control over Night Shift になります。ソースコードは GitHub - thompsonate/Shifty にて公開されています。
macOSのアップデート後について
macOS をアップデートすると Night Shift を有効にするために編集した CoreBrightness.framework がデフォルトに戻ってしまい Night Shift が無効になるので、再度設定が必要になる場合があります。