MacBook Airで主ディスプレイと拡張ディスプレイを切り替えるスクリプト (OS 13 Ventura)

MacBook AirのOSをアップデートしてVentureにしたところ、Montereyの時に作った外付けディスプレイがある場合にそれを拡張ディスプレイ↔主ディスプレイに切り替えるためのAppleScriptが動かなくなりました。

ボタンを指定して押させるようなスクリプトなので、画面の構成が変わると動かなくなるのですが、今回のVentureでは「システム設定」がiOS風にガッツリ変わっているので、全然 動きません。

相変わらず主ディスプレイと拡張ディスプレイの切り替えは、キーショートカットではできなさそうなので、今回のアップデートでもスクリプトを直しました。
…年に一度しかAppleScriptは触らないので、書き方を忘れてます。

そのスクリプトが以下です。

tell application "System Settings"
	activate
end tell
delay 1
tell application "System Events"
	tell process "System Settings"
		select row 22 of outline 1 of scroll area 1 of group 1 of splitter group 1 of group 1 of window 1
		delay 1
		--内蔵ディスプレイのポップアップを選択
		tell group 1 of scroll area 2 of group 1 of group 2 of splitter group 1 of group 1 of window 1
			click pop up button 1
			-- pop up buttonの判定
			if (value of pop up button 1) = "拡張ディスプレイ" then
				click menu item "主ディスプレイ" of menu 1 of pop up button 1
			else
				click menu item "拡張ディスプレイ" of menu 1 of pop up button 1
			end if
		end tell
	end tell
end tell
delay 1
tell application "System Settings"
	quit
end tell 

このスクリプトでやっていることは、

  • システム設定を開く
  • システム設定内の「ディスプレイ」を選択
  • 「ディスプレイ」内の「使用形態」ラベルの右端にあるポップアップを開いて
    • 「主ディスプレイ」のときは「拡張ディスプレイ」を選択
    • 「拡張ディスプレイ」のときは「主ディスプレイ」を選択
  • システム設定を終了する

上記の内容になっています。

とまあ、スクリプトはこれで良いのですが、スクリプトをアプリケーションとして出力して実行した際に問題が発生。

アプリを実行した際に、初回にアクセス制御についてOSが聞いてきて、システム設定の「プライバシーとセキュリティ」の「オートメーション」の設定を促されるのですが、その中でMontereyではできた「システム設定」のアクセス制御が設定できない。

上はMontereyの時に追加したスクリプト、下はVenturaで追加したスクリプト

この状態で実行すると、「System Eventsでエラーが起きました: 主ディスプレイ切り替えmacOS13には補助アクセスは許可されません。(-1719)」とアラートが出て実行できない。
(この補助アクセスのアラートが、上記のセキュリティ設定に関連するものかはっきりはわからないですけどね。)

このままだと「クリックだけで実行する」というスクリプトにした意味がなくなってしまうので、以下のようなosascriptコマンドでスクリプトを実行するバッチファイルを作って、そのバッチファイルをダブルクリックして実行することでやり過ごしています。

#!/bin/bash
osascript /〜/主ディスプレイ切り替えmacOS13.scpt

上記を「切り替え.command」と言ったcommand拡張子で保存。

セキュリティの件、OSのアップデートで直してくれるかなぁ。

人気の記事

Kindle Paperwhiteを第7世代から第11世代に買い替えて思ったこと

macOSをMontereyにしてからの困りごと…Bluetoothの設定に詳細ボタンが出てこない

免許更新のために新宿運転免許更新センターに自転車で行った話

WindowsノートPCを閉じたままスリープから復帰させる方法!?