自分はディスプレイのミラーリング機能は日常的にあまり使っていません。実際にやってみたらどうだったのかをまとめてみました。
この手の処理をAppleScriptで書こうとしても、そのための命令が標準で内蔵されていないため、アプローチの方法はかぎられています。
(1)思いっきりハードウェア寄りのプログラム(Cとかで書いた)を呼び出す
(2)アクセシビリティ系の機能(GUI Scripting)を使ってシステム環境設定を操作する
の2つです。(2)は、画面上の要素の些細な変更によりプログラムを書き換える必要が出てくるうえに、信頼性が高くないので、あまりやりたくありません。もちろん、画面上の要素を検索しながら処理する方法もあるわけですが、それなりに(画面要素の検索に)時間がかかります。
そうなると、(1)を採用することになります。探すと………すぐにみつかりました。「mirror-displays」というコマンドラインアプリケーションです。ソースコードを読んでみると、CoreGraphics系の各種フレームワークを呼び出している、Objective-Cで書かれた(ほとんどCのコード)プログラムです。
これをスクリプトバンドルの中に入れて呼び出してみました。1回実行するとメインモニタの内容が他のモニタにミラーリングされます。もう1回実行すると、ミラーリングが解除されます。
–> Download mirroring_toggle (Script Bundle with executable command in its bundle)
mirrorコマンドのオプションには、「どのモニタをミラーリングさせるか」といった指定ができるようですが、試していないのでとくに凝った指定も何もしていません。
mirrorコマンドはmacOS 10.14でビルドして10.10以降をターゲットにしてみましたが、そこまで古い環境は手元に残っていないのでテストしていません。また、macOS 10.15のマシンには複数台のモニタをつないでいないので、macOS 10.15上でのテストも行っていません。
AppleScript名:mirroringの設定と解除 |
— – Created by: Takaaki Naganoya – Created on: 2020/03/11 — – Copyright © 2020 Piyomaru Software, All Rights Reserved — –https://github.com/hydra/mirror-displays –バンドルの中に入れたmirrorコマンドをただ呼んでるだけ set myPath to POSIX path of (path to me) set comPath to myPath & "/Contents/Resources/mirror" do shell script quoted form of comPath |