新しい机にLEDテープで間接照明を仕込んだので、Mac Studioのモニタのスリープ・復帰と間接照明のオフ・オンを連動させる。
まずショートカットで、TurnOnLED / TurnOffLEDというショートカットを作成する。

作成したらターミナルで動作を確認する。
shortcuts run TurnOnLED
shortcuts run TurnOffLED
次にpmsetのログを監視するスクリプトを作成する。
#!/bin/bash
com="/usr/bin/shortcuts"
last_time=""
while true; do
latest_entry=$(pmset -g log | grep "Display is turned" | tail -1)
latest_time=$(echo "$latest_entry" | awk '{print $1, $2}')
if [[ "$latest_time" != "$last_time" && "$latest_time" != "" ]]; then
sw=$(echo ${latest_entry} | grep "turned on")
if [ "$sw" != "" ]; then
echo "Detected display waking up at $latest_time"
echo "${com} run TurnOnLED" | bash
else
echo "Detected display sleep at $latest_time"
echo "${com} run TurnOffLED" | bash
fi
last_time="$latest_time"
fi
sleep 10
done
Launchdの設定ファイルを作成して、~/Library/LaunchAgents/に保存する。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>st.rio.controlled</string>
<key>ProgramArguments</key>
<array>
<string>/Users/rifujita/ownCloud/bin/ctl-led.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/Users/rifujita/controlled.log</string>
<key>StandardErrorPath</key>
<string>/Users/rifujita/controlled_stderr.log</string>
</dict>
</plist>
設定ファイルをロードして、
launchctl load ~/Library/LaunchAgents/st.rio.controlled.plist
ログアウト・ログインする。
スクリプトでsleep 10
としているのでタイミングによって少しラグがあるが、イベントドリブンに実装する方法がよく分からんので、これでヨシ!