ヤルキデナイズド

Unclassified Articles on Software and IT

Mac がスリープから復帰したとき Vagrant を動かしっぱなしだったら通知するようにした

Vagrant を立ち上げたままのを忘れてバッテリーが減るの早いなーおかしいなーというのが何度かあったので、スリープから復帰したとき Vagrant が動いていたら通知を出すようにした。

まずスリープから復帰したタイミングで与えられたコマンドを実行する awakened というツールを書いた: https://github.com/uasi/awakened

awakened のインストール手順はこれ:

git clone https://github.com/uasi/awakened
cd awakened
make
cp awakened ~/bin

awakened は第1引数に実行ファイルへの絶対パスを取り、 Mac がスリープから復帰したらそれを実行する。第2引数以降は実行ファイルに渡される。

awakened /bin/sh ~/.awakenedrc

で、これを launchd でデーモン化した。以下の XML~/Library/LaunchAgents/org.exsen.awakened.plist に置いて launchctl load ~/Library/LaunchAgents/org.exsen.awakened.plist する。 XML に書いてあるいくつかのパスは自分の環境に合わせて書き換えてほしい。

<?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>org.exsen.awakened</string>
        <key>ProgramArguments</key>
        <array>
                <string>/Users/uasi/bin/awakened</string>
                <string>/bin/sh</string>
                <string>/Users/uasi/.awakenedrc</string>
        </array>
        <key>KeepAlive</key>
        <true/>
        <key>RunAtLoad</key>
        <true/>
</dict>
</plist>

launchd.plist では引数のメタキャラクタが展開されないので ~/.awakenedrc などと書かずに絶対パスで書く。詳しくは man launchd.plist を見る。

~/.awakenedrc には Vagrant が動いていたら通知するやつを書いた。ついでにスリープ復帰後に不安定になるアプリケーションを再起動するようにした。

# VBoxHeadless プロセスがいたら Vagrant が動いているはず
if pgrep -q VBoxHeadless; then
    osascript -e 'display notification "Vagrant is up and running." with title "awakened"'
fi

# Should I Sleep を再起動する
killall "Should I Sleep"
open -a "Should I Sleep"

快適になった。