試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

notify-sendで通知ポップアップを表示する(トラブル対処の覚え書きを含む)

通知のポップアップ/バルーンを表示するlibnotifyライブラリのパッケージにはnotify-sendというコマンドがあり、これを実行すると、コマンドの実行により、通知ポップアップを表示することができる。

基本的な書式と重要度の指定

書式としては後ろにタイトルとメッセージを後ろに付ける形。
-uオプションに「low/normal(省略可)/critical」の3種類の文字列のいずれかを付けると、重要度に応じて色が変わる。

$ notify-send -u low タイトル メッセージ
$ notify-send タイトル メッセージ
$ notify-send -u critical タイトル メッセージ

criticalだと下のような色になる。通常(normal)の色は、使用しているGTK+ 2のテーマによって変わる。

更に、タイトルとメッセージにはPango Text Attribute Markup Languageによる装飾もできる。

$ notify-send -u low '<big>大きいタイトル</big>' '<span color="darkred">赤い色</span><span foreground="yellow" background="black">黒背景黄文字</span><i>斜体</i><b>太字</b>'

これを実行すると下のようになる。

アイコン指定

-iオプションの後ろに、/usr/share/pixmaps/以下のファイル名の拡張子より前の部分(もしくは任意のアイコンファイルのパス名)を指定する。種類は、XPM/PNG/JPEG/SVGのいずれにも対応している。

$ notify-send -i gnome-about-logo


上は、GTK+ 2のテーマにXfce 4.4の「Xfce」テーマを使用している状態でGNOMEのロゴアイコンを表示している。

cronで自動実行するのに使用する場合

cronで実行する場合は環境変数DISPLAYを付ける。下の例では2分に1回実行する(このままの設定では実用的でないので、実行時間などは変更して使う)。

*/2 * * * * DISPLAY=:0 notify-send タイトル メッセージ

(2010/9/24)GDMからグラフィカルログインしたときには環境変数XAUTHORITYをうまく処理する必要が出る場合がある。詳しくは「GDM使用時にlibnotifyのnotify-sendがcronから動作しない件とその対処(バージョン2.30系時点)」を参照。

自動的に消えるまでの時間

-tオプションの後ろに、ミリ秒単位で、消えるまでの時間を指定できる。10秒では「-t 10000」。

端末から実行したときにエラーが出る場合と対処法

$ notify-send タイトル メッセージ
libnotify-Message: Unable to get session bus: Failed to connect to socket /tmp/dbus-[文字列]: Connection refused

このようなメッセージが出て、通知のポップアップが出なくなってしまうことがある。
これは、端末でscreenを起動した後、ウィンドウを閉じるか切断(detach)をしてログアウトした後再ログインして、screenに接続(attach)し直すと起こる。mlterm-j genuineでも同様。また、なお、この端末から起動されたプロセスに対してもこの状態が継承される。
対処としては、新しく現在のセッション内で端末を起動し直す。mlterm -j genuineをしている場合は一度「killall mlterm」する。screenを使用している場合は、一度全ての「ウィンドウ」を閉じて、新しく開き直す。

ポップアップが突然出なくなり、正常終了してしまう

Gentoo Linuxで突然下のような現象が起きてしまった。何も起こらないまま、エラーも出ないで正常終了してしまう。

$ notify-send タイトル メッセージ
(ポップアップは出ず、エラーメッセージも出ない)
$ echo $?
0

libnotifyを使用するプロセスは、notification-daemonという通知デーモンに接続して処理を行うのだが、

$ sudo revdep-rebuild
(中略)
Checking dynamic linking consistency...
  broken /usr/lib64/notification-daemon-1.0/engines/libstandard.so (requires  libwnck-1.so.18)
(以下略)

今回は、libwnckのバージョンが上がったことにより、notification-daemonの側で動的リンクに問題が出ていたのが原因だった。今後またlibwnckのバージョンが上がったときに同じことにならないようにするため、メモとして残しておく。
このケースの対処としては、notification-daemonを再ビルドする。

関連記事: