机の間接照明をモニタのスリープ・復帰に連動させたい

LIFE

新しい机に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としているのでタイミングによって少しラグがあるが、イベントドリブンに実装する方法がよく分からんので、これでヨシ!

タイトルとURLをコピーしました