今更ながらMac OS X Lionを使い始めていて(マウススクロールが逆になったのはあまり問題なく慣れた)、そういえば10.7向けのGrowl 1.3以降ではGNTPがサポートされているから以前にチャレンジしようとして失敗したリモートマシンからの通知も簡単にできるようになったはず、と思って試してみた。
簡単にGNTPを使えるGrowl::GNTPを使用。
Yasuhiro Matsumoto / Growl-GNTP - search.cpan.org
まずはちゃんとコレを使って通知ができるか試してみる。
#!/usr/bin/env perl use strict; use warnings; use Growl::GNTP; my $growl = Growl::GNTP->new; $growl->register([ { Name => 'hoge' }, ]); $growl->notify( Event => 'hoge', Title => 'title', Message => 'message', );
このGrowl 1.3はデフォルトで23053ポートでGNTPの通知を待ち受けている。
local $ netstat -a | grep 23053 tcp46 0 0 *.23053 *.* LISTEN tcp4 0 0 *.23053 *.* LISTEN
ので、ここに向かってGNTPで叩くことさえ出来れば良いわけで、sshログインしたリモートサーバからでも良い。
sshログインする際に
local $ ssh -R 23053:127.0.0.1:23053 [user@]hostname]
と"-R"オプションでRemoteForward指定して繋ぐか、もしくは$HOME/.ssh/config
で
Host **** HostName ***.***.***.*** User username RemoteForward 23053 127.0.0.1:23053
のように指定しておく。こうすれば、リモートマシンでの23053ポートへの接続がローカルマシンの23053にそのまま繋がる(…という理解で良いのかな?)。
remote $ netstat -anp | grep 23053 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 127.0.0.1:23053 0.0.0.0:* LISTEN - tcp 0 0 ::1:23053 :::* LISTEN -
この状態で、このリモートマシンで上記と同じスクリプトを実行しても、ローカルで実行したときと同じように自分のローカルマシンのGrowlに通知が来るようになる。
つまり、sshログインする際にRemoteForward指定してログインするようにしていれば、どんなリモートマシンからでも「GNTPで127.0.0.1:23053にメッセージ送る」ことさえ出来ればローカルマシンのGrowlに通知が可能となる。上記の例だとPerlでGNTPモジュールが無いといけないけど、最小限の処理だけまとめた一つのスクリプトにするとか無理矢理詰め込んだワンライナーでaliasにするとか出来れば、"汎用的かつ簡単に"どのリモートマシンからでもローカルマシンのGrowlに通知できるようになるんじゃないでしょうか。
どうするのが一番簡単かな。