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

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

notify-pythonでpynotify.Notificationオブジェクトのメンバ関数attach_to_status_icon()が使えない問題とその対処

cpufreqd-manual-systrayというツールを作成中、
[id:conc7996:20080109:1199884267]
を参考に、システムトレイのアイコンからバルーン通知が出るようにするのを試すため、書かれているコードをコピペして実行してみた。すると

    n.attach_to_status_icon(tray)
AttributeError: 'pynotify.Notification' object has no attribute 'attach_to_status_icon'

と出て正常に処理されなかった。
調べたところ、この問題の対処は、ビルド前にファイルsrc/pynotify.cを一度削除することで正しいファイルを再生成させるという、非常にシンプルなものだった。
2008/8/21現在、Gentoo Linuxのパッケージ(dev-python/notify-python-0.1.1)でもこの現象が起こるものの、上記URLの修正をebuildファイルに対して行ったものをローカルOverlayに配置してインストールを行うことでこの問題は解決し、無事にアイコンからのバルーンが出るようになった。

cpufreqd-manual-systrayの中では

(先頭)
try:
  import pynotify
  pynotify.init("cpufreqd-manual-systray")
  have_pynotify = True
except:
  have_pynotify = False

(実行部分)
try:
  n.attach_to_status_icon(self.tray)
  n.set_timeout(5000)
  n.show()
except AttributeError:
  have_pynotify = False

のようにして、notify-pythonの検出に成功した場合でも、この不具合を含んだ状態で使用したときには(例外が出た時点で)バルーンを使用しないように真偽値have_pynotifyをFalseにして、検出失敗時と同じ扱いにしてしまっている。
(2008/9/10)この不具合は、公式Portageツリー上のnotify-python-0.1.1-r1にて修正された。

関連URL:

  • bugs.gentoo.org/show_bug.cgi?id=212128 - Gentooでの修正について(ebuildへのパッチを含む)

使用したバージョン: