VMからホストOSのMacのgrowlにnotifyを送る
以前こんなエントリー 処理時間が一定以上かかったらGrowlで通知するzshrc - 心魅 〜 cocoromi 〜を書きましたが、現在の職業柄、コマンドの実行はVMで行っています。
なので、以前の仕組みではうまくいきません。
そこで、今度はGrowlのGrowlTalk over UDPプロトコルを使って遠隔からgrowlに通知を送ります。
目次
- 受信側(Mac)の設定
- 前フリ
- 送信側の準備
- 確認
1. 受信側(Mac)の設定
Growlに外部からの通知を許可する設定をします。
System PreferenceからGrowl>Networkタブへ遷移し、以下の項目を設定します
- Listen for incoming notifications
- Allow remote application registration
- Optionalな気がしますが、検証してません。
コレで設定を行ったGrowlは前述のGToUで通知を受け取ることが出来るようになります。
2. 前フリ
次はVM側の設定をするわけですが、GToUで会話するためになんとかせにゃなりません。
慣れてる人は自分で作ったほうがいいかもしれませんが、ここは既存のライブラリでサクっと済ませてしまいましょう。
すでにいくつか出回っているのでリストしておきます。php以外は使ったことありません。
- netgrowl.php
- 今回使ったもの
- netgrowl.py
- ruby-growl
- gntp-send
- windowsで動く?試したい。
3. VM側の準備
以下は上記netgrowl.phpを使った場合の説明をします。
- 1. netgrowl.phpを適当な場所に置く
- 色々考えた結果 $HOME/binに置きました
- 2. netgrowl.phpを少しラップする
- 送信先やアプリケーション名およびパスワードなんかをハードコーディングしてしまったものでラップします。
- これも$HOME/binに置きます。
- ソースはこんな感じ
- 適当にアレンジしてください
- 3. 止めにzshrcを編集します。
local COMMAND="" local COMMAND_TIME="" precmd() { if [ "$COMMAND_TIME" -ne "0" ] ; then local d=`date +%s` d=`expr $d - $COMMAND_TIME` if [ "$d" -ge "2" ] ; then COMMAND="$COMMAND " php $HOME/bin/growl.shell.php "${${(s: :)COMMAND}[1]}" "$COMMAND" fi fi COMMAND="" COMMAND_TIME="0" } preexec () { COMMAND="${1}" COMMAND_TIME=`date +%s` }
4. 確認
準備ができたら sleep 3とかやってローカルのGrowlが反応するか確かめましょう。
うまくいくとGrowlの設定画面にアプリケーションとしてリストされます。
Configureからアプリケーション毎に個別に表示や、音を鳴らすなどの設定ができるので、ネット経由の通知だけ見た目を変えたりすることもできます。