Macのスリープ復帰時に任意のスクリプトを実行する

polipoさんがスリープから復帰時に死ぬのでいちいち手動で再起動してたのが嫌になった


sleepwatcherの導入

  • > sleepwatcherをlaunchdaemonに登録

って流れでなんとかしよう

sleepwatcher

スリープを監視してくれるデーモン
復帰時だけじゃなくてスリープ移行時にも任意のスクリプトを走らせることができるみたい

導入

インストールはhttp://www.bernhard-baehr.deとかから落としてやるのかな?
macportsとかhomebrewとかでやったほうが楽だと思う。というか僕はそうしましたのでソースからのビルドはよくわかりませn


基本的な文法はこういう雰囲気

$ /usr/local/sbin/sleepwatcher --verbose --sleep /path/to/your/sleepscript --wakeup /path/to/your/wakeupscript ...

(--

LaunchDaemonに登録

せっかくだからsleepwatcherの起動も自動化しよう


/System/Library/LaunchDaemonsにcdしてsleepwatcher.plistを作る(名前は別にどうでもいいんだけれど)
こんな感じ?

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>sleepwatcher</string>
    <key>OnDemand</key>
    <false/>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/sbin/sleepwatcher</string> <!-- ここはフルパス指定じゃないとダメみたい -->
        <string>--verbose</string>
        <string>--wakeup</string>
        <string>/etc/rc.local</string> <!-- 実行したいスクリプトのパス -->
    </array>
    <key>ServiceDescription</key>
    <string>sleepwatcher</string>
    <key>ServiceIPC</key>
    <false/>
</dict>
</plist>

できたら保存して

$ sudo launchctl load ./sleepwatcher.plist

しよう


launchctlがちゃんとsleepwatcher.plistをロードしたかどうかはroot権限でのlaunchctl listで確認できるよ

$ sudo launchctl list | grep sleepwatcher
#=> 477	-	sleepwatcher


これでログイン時にsleepwatcherが自動で起動することになる
ってことはスリープ状態が監視されるわけで、移行時復帰時に好きなスクリプトを走らせることができるようになったわけだ


これで終わりー