screencaptureは、複数のディスプレイを接続している環境でファイル名を1つだけ指定すると、メインディスプレイだけを保存する。-Dオプションを使うと、2枚目以降のディスプレイを指定して撮影できる。ここでは-Dと-mでディスプレイを指定する方法をまとめる。
screencaptureの基本的な使い方は以下を参照。
参考: 【screencapture】コマンドで画面全体のスクリーンショットを撮る
以下は、メインディスプレイ(3440x1440)に加えて、Sidecarで接続したiPadを2枚目のディスプレイとして使っている環境で確認した結果である。
-Dでディスプレイの番号を指定する
-D <番号>の形式で指定する。1がメインディスプレイ、2が2枚目のディスプレイである。
$ screencapture -D 2 sub.png
$ file sub.png
sub.png: PNG image data, 2204 x 1484, 8-bit/color RGBA, non-interlaced
-D 1を指定すると、メインディスプレイだけを撮影する。
$ screencapture -D 1 main.png
$ file main.png
main.png: PNG image data, 3440 x 1440, 8-bit/color RGBA, non-interlaced
-Dを指定した場合、ファイル名を複数指定しても、1つ目のファイルだけが作成される。
ディスプレイの番号を確認する
存在しない番号を指定すると、指定できる番号の範囲がエラーメッセージに表示される。
$ screencapture -D 3 x.png
screencapture: Invalid display specified. Must be a number from 1-2
0を指定した場合も同じエラーになる。どちらの場合も終了ステータスは1である。
接続しているディスプレイの一覧は、system_profilerで確認できる。Main Display: Yesと表示されるディスプレイが-D 1に対応する。
$ system_profiler SPDisplaysDataType
...
Displays:
LG HDR WQHD:
Resolution: 3440 x 1440 (UWQHD - Ultra-Wide Quad HD)
UI Looks like: 3440 x 1440 @ 100.00Hz
Main Display: Yes
...
Sidecar Display:
Resolution: 2204 x 1484
UI Looks like: 1102 x 742 @ 60.00Hz
...
-mでメインディスプレイだけを撮影する
-mを指定すると、メインディスプレイだけを撮影する。-D 1と同じ結果になる。
$ screencapture -m main.png
$ file main.png
main.png: PNG image data, 3440 x 1440, 8-bit/color RGBA, non-interlaced
man screencaptureには、-i(対話モード)と組み合わせた場合の-mの挙動は未定義と書かれている。
クリップボードに保存する
-cと組み合わせると、指定したディスプレイだけをクリップボードに保存する。
$ screencapture -D 2 -c
-Rと組み合わせた場合
-Rで範囲を指定した場合、撮影する範囲は-Dではなく-Rの座標で決まる。-Rの座標は、ディスプレイごとではなく全ディスプレイ共通の座標で解釈される。
$ screencapture -D 2 -R 0,0,100,100 r.png
$ file r.png
r.png: PNG image data, 100 x 100, 8-bit/color RGBA, non-interlaced
座標0,0はメインディスプレイの左上であるため、-D 2を指定してもメインディスプレイの範囲を撮影する。2枚目のディスプレイがRetinaの場合、2枚目の範囲であれば200x200の画像になるが、実際にはメインディスプレイの範囲の100x100の画像になる。
なお、-Dの番号自体は-Rと組み合わせても検証される。存在しないディスプレイの番号を指定すると、-Rがあってもエラーになる。
参考: 【screencapture】-Rで範囲を指定して撮影する
