j3iiifn’s blog

ネットワーク、インフラ、プログラミングについての備忘録

外部ディスプレイの輝度・コントラストを2クリックで変更できるようにした

在宅勤務で地味にストレスになっていたのが、外部ディスプレイの輝度・コントラスト調整。

私は眩しいのが苦手なタイプの人間なので、ディスプレイは極限まで暗くして使用している。 オフィスと異なり、家では日中は自然光で生活しているため、時間帯によって変化する環境光に追従してディスプレイの明るさも調整しなければならない。 部屋のレイアウトの都合上、朝は直射日光がディスプレイに直接当たるから輝度・コントラストを高めにしないと見えづらいし、逆に昼以降は環境光に応じてディスプレイも暗くしていかないと眩しくて見ていられないのである。 部屋の光に応じて、都度、手動でディスプレイの輝度・コントラストをちょうどいい塩梅に設定し直すのは割と面倒だ。

(ディスプレイに組み込まれている自動調整機能は理想の明るさにならないから使っていない。)

Macから一括で外部ディスプレイの輝度・コントラストを設定できたらいいな〜〜〜と思ってググってみたら、DDC (Display Data Channel) というプロトコルがあることを知った。 Macのディスプレイ設定画面でディスプレイの型番が出てくるのはどういう仕組みなんだろうと長年疑問に思っていたが、このDDCのお陰だったのか!

DDCでPCからディスプレイの輝度・コントラストを設定するツールは世の中にいろいろあるようだが、Mac用のコマンドラインツール kfix/ddcctl を使うことにした。

ddcctlコマンドの使い方は Controlling monitor brightness from OSX の説明がわかりやすかった。

8年前に1万円くらいで買ったAcerのディスプレイでさえddcctlコマンドが使えたので、大抵のディスプレイはDDCプロトコルに対応しているんだろうか。

ddcctlコマンド単体でもMacから輝度・コントラストを設定できてハッピーなのだが、2台ディスプレイを接続しているとディスプレイ番号がその時々で変わってしまうし、ディスプレイごとに輝度設定とコントラスト設定で2回コマンドを叩かなければならないしで、不満が残る。

そこで、ddcctlコマンドをより便利に使うためのスクリプトを書いた。

github.com

朝用・昼用・夕方用など、各時間帯用の各ディスプレイの輝度・コントラストを予めyamlファイルに書いておいて、スクリプト1発でその設定セットが一括で適用されるようにした。

例えばこんな感じである。

% bash ddcctl-wrapper.sh -m afternoon
DELL P2214H > brightness => 0
DELL P2214H > contrast => 45
S221HQL > brightness => 0
S221HQL > contrast => 80

このコマンドを叩くのすら面倒に感じる私は、ランチャーソフト Shuttle を使って2クリックでスクリプトを実行できるようにした。

f:id:j3iiifn:20200502005004p:plain
shuttleを使ってスクリプトを2クリックで実行する

Shuttleの設定ファイル ~/.shuttle.json は以下のようなものを使っている。

同じような悩みを抱えている人の参考になれば。

お題「#おうち時間