MacBook Air 2018 Retinaモデルで1920x1200相当のDPI設定をする
※Catalinaからシステムファイルをいじれなくなったようで、この手法は使えなくなってしまった
はじめに
MacBook Air 2018年モデルはRetinaディスプレイを搭載しているが、OS上で制限が掛けられており幾つかの疑似解像度でのみ使用可能。 設定されている最大の疑似解像度は1680x1050で、お世辞にも広いとは言えない。
ドットバイ表示はさすがにつらいにしても、13インチも画面サイズがあるので1920x1200は十分実用的かつコこれくらい広さがないと作業効率に繋がらない。一方で「Display Menu」などのアプリで無理やり高解像度も実現出来るが、Retinaディスプレイに合わせた適切なDPI設定になっていないため描画がぼやけてよろしくない。
先人おかげでMacBook Air 2018年モデルでもHiDPIな1920x1200表示の設定が出来たが、もちろん非公式な方法なので実施は自己責任で。
動作確認環境は以下のとおり
- MacBook Air (Retina,13-inch,2018)
- macOS Mojave 10.14.5
やり方
基本的に全て下記の記事の内容に沿ったのみ。
MacBook ProのRetinaディスプレイでパリッとした疑似「高」解像度を得るには -Qiita
機種固有のDisplay IDなどが異なるので、安易にコピペ実行はしないようにしましょう。
Display IDの確認
ターミナルで下記を実行
$ ioreg -lw0 | grep DisplayVendorID | | | | "DisplayVendorID" = 1552
$ ioreg -lw0 | grep DisplayProductID | | | | "DisplayProductID" = 41017
設定ファイルは上記の値を16進数にしたものがファイル名称になっていっるので変換
$ printf '%x %x\n' 1552 41017 610 a039
610
a039
この2つの値が後々必要になるのでメモ。
SIPを無効化
最近のMacはシステムファイルに想定外の変更がかけられないようロックが掛かっているのでそれを解除する。
リカバリーモードで起動(⌘+Rキーを押しながら起動)し、ターミナルを開いて下記を実行
# csrutil enable --without fs
再起動を促されるので再起動。再起動は通常(not リカバリーモード)でOK。
編集対象ファイルの確認とバックアップ
通常起動したら再度ターミナルでディレクトリ移動
$ cd /System/Library/Displays/Contents/Resources/Overrides/DisplayVendorID-610/
ここで指定しているDisplayVendorID-610/
の末尾3桁の値は「Display IDの確認」のステップで確認したもの。確認結果に応じて適宜変更してください。
編集対象のファイルのバックアップを作成
$ sudo cp -a DisplayProductID-a039{,.bak}
こちらの対象ファイルもDisplay IDの確認」のステップで確認したもの。
追加する疑似解像度の確認
追加する解像度を指定する文字列を確認
$ printf '%08x%08x00\n' $((1920*2)) $((1200*2)) | xxd -r -p | base64 AAAPAAAACWAA
この値は2016年以降のMacであれば(おそらく)共通。
その他の解像度を指定したい際は適宜変更を(試したことはない)。
設定ファイルの編集
$ sudo vi DisplayProductID-a03e
<array></array>
内の <data></data>
の集まりに、確認した解像度の値を追加する。
その他の行は特にいじらない。
<key>scale-resolutions</key> <array> <data>AAAPAAAACWAA</data> <!-- 1920x1200(HiDPI) --> <data>AAANIAAACDQA</data> <data>AAALQAAABwgA</data> <data>AAAKAAAABkAA</data> <data>AAAIAAAABQAA</data> <data>AAAKAAAABkAAAAABACAAAA==</data> <data>AAAKAAAABaAAAAABACAAAA==</data>
設定の反映を確認
再起動して「システム環境設定」から通常どおり解像度を選んでみる ちゃんと反映されていれば成功。
SIPの有効化
再度リカバリーモードで起動、ターミナルを開いてSIPを再度有効化
# csrutil enable
再起動して対応完了。