💻

Macでいつも使用している外部ディスプレイの設定を一発で適用する

2023/06/28に公開

はじめに

私が所属している企業では「フリーアドレス」を採用しており、空いている席に自由に座るスタイルとなっています。

私自身は特定の席に座りがちなのですが、既に先約がいて他の席を選択しなければならないケースがあります。

そして、初めて使うディスプレイでは毎回以下のような設定をしています。

  • 解像度をフルHD(1920x1080)に
  • 外部ディスプレイをMacBookのメインディスプレイの上に持ってくる

これは1人用の会議スペースなども同様で、毎回初めましてのディスプレイを手動で設定するのが億劫になってきたので、本設定を一発で適用するスクリプトを書いてみたいと思います。

準備

今回はdisplayplacerというOSSを利用します。

displayplacerは、macOSのユーティリティツールで、外部ディスプレイの配置や解像度、回転などを簡単に設定するためのコマンドラインツールです。

displayplacerはHomebrew経由で簡単にインストールすることができます。

brew tap jakehilborn/jakehilborn && brew install displayplacer

displayplacerの基礎知識

displayplacerのインストール後、ターミナルでdisplayplacer listコマンドを実行すると、現在接続しているディスプレイで適用可能なモードや、現在の設定を表示することができます。

特に注目したいのが、displayplacer listコマンドの実行結果の最後に表示されている1行です。

(略)
displayplacer "id:37D8832A-2D66-02CA-B9F7-8F30A301B230 res:1440x900 hz:60 color_depth:8 enabled:true scaling:on origin:(0,0) degree:0" "id:D0D6C767-F46D-4E07-A1C5-C6DCA68E4A06 res:1920x1080 hz:60 color_depth:8 enabled:true scaling:off origin:(-230,-1080) degree:0"

これは、 「今のディスプレイ設定を再現するにはこのコマンドを実行すれば良いよ」 ということを表しています。

1つ目のダブルクォーテーションで括られているのはMacのメインディスプレイの設定です。2つ目のダブルクォーテーションで括られているのが外部ディスプレイの設定です。

ただ1点注意したいのですが、id:D0D6C767-F46D-4E07-A1C5-C6DCA68E4A06と書かれている外部ディスプレイのIDはあくまで現在接続している外部ディスプレイのIDであり、他のディスプレイでもこの値になっているわけではありません。

したがって、他の外部ディスプレイに接続した後、上記コマンドを実行しても私が望む設定結果にはなりません。

ID部分は動的に変える必要があります。

Bashスクリプトの作成

ディスプレイIDの部分は、ggrepを使って以下のように取り出し可能です。

$ displayplacer list | tail -n1 | ggrep -oP 'id:\K[^ ]+(?=[^"]*"$)'
D0D6C767-F46D-4E07-A1C5-C6DCA68E4A06 # 実行結果

この操作で取得できる外部ディスプレイのIDを使って、IDだけ入れ替え、他の設定は上記で取得できた私がいつもやっている設定にするようなスクリプトを書いてみます。

disp_setup.sh
#!/bin/bash

# エラーが発生したらスクリプトを停止する
set -e

# 外部ディスプレイの情報を取得する
display_id=$(displayplacer list | tail -n1 | ggrep -oP 'id:\K[^ ]+(?=[^"]*"$)')

# 画面を上部に持ってきて、フルHDに
displayplacer "id:${display_id} res:1920x1080 hz:60 color_depth:8 enabled:true scaling:off origin:(-230,-1080) degree:0"

ただ1点補足ですが、新しく接続するディスプレイも上記の設定値が適用可能なのかは注意する必要があります。

例えば、フルHDに対応していない非常に古いモニターに接続したと過程して、上記スクリプトを実行してもres:1920x1080の指定には対応できないので実行は失敗します。

あくまで色深度や解像度などがある一定の水準であることが担保されている環境で有効であることをご承知おき下さい。

実行

以下のコマンドでスクリプト実行が可能です。

bash disp_setup.sh

さらにRaycastを使用して一発で本スクリプトを呼び出せるように設定すると非常に便利です。

最後に

今回はdisplayplacerを使用したスクリプトを作成することで、Macでいつも使用している外部ディスプレイの設定を一発で適用する方法を紹介してみました。

参考になりましたら幸いです。

Discussion