libnotify を使ってみる
今日は libnotify を使ってみます。GNOME の下の部分に表示されるやつです。StToolkit を使えば Gjs で簡単にできますが、今日は C で書きます。
まずは Makefile
# $ pkg-config --cflags libnotify CFLAGS = -pthread -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libpng12 # $ pkg-config --libs libnotify LDFLAGS = -lnotify -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
コメントアウトしている pkg-config のコマンドライン出力をそのまま使って、CFLAGS と LDFLAGS に代入しているだけです。
早速、 notify.c ってのを書きます。
#include <stdlib.h> #include <libnotify/notify.h> int main (int argc, char *argv[]) { char *appname = "notify-test"; NotifyNotification *notification; if (! notify_init (appname)) { g_print ("Notify init Error.\n"); return EXIT_FAILURE; } notification = notify_notification_new ("Test", "This is a test notify.", "stock_dialog-info"); notify_notification_show (notification, NULL); notify_uninit (); return EXIT_SUCCESS; }
EXIT_SUCCESS と EXIT_FAILURE を使うために stdlib.h をインクルード。libnotify を使うために、 libnotify/notify.h をインクルード。後は main 関数です。
libnotify を使うために、 notify_init() を呼び出します。引数はアプリケーション名なので、 autoconf 使っていれば PACKAGE_NAME なんかを使えばよいでしょう。ここでは、 char * で固定値にしています。
次に、notify_notification_new() で NotifyNotification クラスのオブジェクトを作成しています。第一引数は短い説明、第二引数は長い説明、そして第三引数はアイコン名です。/usr/share/icons 以下から適当に見繕って、接尾辞(pngなど)を取り除いたものを使っておけばよいでしょう。
$ find /usr/share/icons/gnome | cut -f 8 -d "/" | sort -u
から探してみてください。
そして、 notify_notification_show() で表示します。第一引数は先ほど作成した NotifyNotifiction オプジェクト、エラーは無視するので第二引数は NULL にしています。
そして、libnotify は使わないので、 notify_uninit() するだけの簡単なプログラムです。
他にも、 action を追加したり、 notify_notification_close() で閉じたり、 notify_notification_update() で表示内容を変更したりできますが、必要になることはしばらくなさそう。
ビルドと実行は以下のとおりです。
$ make notify cc -pthread -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libpng12 -lnotify -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 notify.c -o notify $ ./notify
したのほうになんか表示されて、そのまま下のバーに残ります。