読者です 読者をやめる 読者になる 読者になる

初代Masteries

きっとモヒカンにもなれないお前たちに告げる!!!

UbuntuでGrowl::Anyを使ってみる

大学の課題の下準備(?)として, Growl::Anyを使っていろいろ遊んでみようと画策.

インストールはUbuntu 10.10でGrowl::Anyを使うまでの手順を参考に.

途中, Net::DBusをインストールする為の前提条件となるXML::Twigが正常にインストールできず詰みかけたものの, ログをよく見たら"HTML::TreeBuilderが古い!"みたいな記述があったので, HTML::TreeBuilderをインストールしたらうまくいきました.

というわけで早速動かしてみる.

use strict;
use warnings;
use utf8;

use Growl::Any;

my $growl = Growl::Any->new;
$growl->register('ていっ!', ['とうっ!', 'おらーっ!']);
$growl->notify('', 'title', 'hello!', '/home/path/to/icon.png');

f:id:papix:20120521030445p:plain

結果はこんな感じ.

...設定したアイコンが出ない?

Linux系OSの場合, Growl::Anyはnotify-sendコマンドを使うようなので, こいつがアイコンの表示に対応していないのかなー... と思って調べてみたのですが, 普通に対応しているみたいです.

実際に,

notify-send title hello! -i /home/path/to/icon.png

こんなコマンドを打つと,

f:id:papix:20120521030442p:plain

こんな感じにアイコンが出てきます. むむむ...

というわけでいろいろググってみたのですが, それっぽい情報は見つかりませんでした.

仕方がないのでモジュールの中身を見ていろいろ調査してみたところ, Growl::Anyが呼んでいるDesktop::Notifyというモジュールが, アイコン表示に対応していないのが原因... のようです.

Desktop::Notify::Notificationのshowメソッドを, こんな感じに書き換えると, ちゃんとアイコンが出てきてくれました.

sub show {
    my $self = shift;

    $self->{id} = $self->{server}->{notify}
        ->Notify($self->{server}->{app_name},
                 $self->{id} || 0,
                 ($self->{app_icon} || ''), # ここを書き換えた
                 $self->{summary},
                 $self->{body},
                 [],
                 {},
                 $self->{timeout} || 0,
                );
    $self->{server}->_register_notification($self);
    return $self;
}

※後述のmattnさんのパッチに従って, 若干記述を修正しました(2012/5/21 03:30).

f:id:papix:20120521030442p:plain

できたー!

CPANのDesktop::Notifyのページを見てみると, 2009年以降モジュールを更新していないみたいなので, その後にアイコン表示機能が追加された為に対応していなかった... という感じでしょうか.

とりあえず, 自分で使う分には全く問題なくなったので, Growl::Anyを使っていろいろと遊んでみようと思います!

追記

...どうやら, 修正要求が出ているけれども, 放置されているようですね.

@さん, 教えて頂きありがとうございました!