سلام
مطلب اول اینکه اگه بخواین با بش چنین چیزی رو راه اندازی کنین نیازمند کارکردن با dbus-monitor هستین مثلاً برای دسترسی به تمام نوتیفیکیشن های سرویس ها باید دستور پایین رو اجرا کنین :
dbus-monitor
ولی شما recent-notifications رو مثال زدین توی این برنامه اعلانات کل سیستم رو به نمایش نمی ذاره فقط اعلانات مربوط به اینترفیس org.freedesktop.Notifications رو تو خروجی نیشون می ده چون توی سورس های اون چنین خط کدی وجود داره :
self._match_string = "type='method_call',interface='org.freedesktop.Notifications',member='Notify'"
که معادل بش اون می شه :
dbus-monitor interface='org.freedesktop.Notifications'
که خروجی این مورد با خروجی دستور اول متفاوته (دستور اول چون اینترفیسی براش انتخاب نشده تمام اعلانات رو نیشون می ده) مثلاً تو دستور اولیه ما می تونیم تو خروجی چنین مطلبی رو داشته باشیم
"Wi-Fi network connection 'Tplink' active: Tplink (67%)"
ولی تو دستور دوم نخواهد بود چون خروجی بالا مربوط به org.freedesktop.DBus.Properties هستش نه org.freedesktop.Notifications
یا مثلاً اعلانات تلگرام تو خروجی دستور دوم نخواهد بود پس خودتون با توجه به نیازتون باید اینترفیستون رو انتخاب کنین ولی چون نرم افزار recent-notifications رو مثال زدین من هم فرض رو بر این می گیرم که اینترفیس موردنظر شما org.freedesktop.Notifications باشه
حالا توی بش اگه بخواین محتوی اضافی رو هم حذف کنین و فقط قسمت string باقی بمونه کافیه دستور پایین رو اجرا کنین (این دستور محتوی بین کوتیشن ها رو توی خروجی به نمایش می ذاره) :
dbus-monitor interface='org.freedesktop.Notifications' | grep -o '".*"'
برای چک کردن دستور بالا هم کافیه توی یک ترمینال دیگه این دستور رو اجرا کنین :
notify-send "how are you"
باید تو خروجی دستور قبل "how are you" ظاهر شده باشه
حالا در مورد سورس , چه سورسی بهتر از سورس خود recent-notifications :
http://bazaar.launchpad.net/~jconti/recent-notifications/trunk/filesدر مورد پایتون , اینجا هم ضروری ترین ماژولی که باید استفاده کنین dbus , glib هستش که باید کار کردن با اونا رو یاد بگیرین برای مثال با یک سرچ تو اینترنت میشه این اسکریپت پایتونی رو پیدا کرد:
#!/usr/bin/python2
import glib
import dbus
from dbus.mainloop.glib import DBusGMainLoop
def print_notification(bus, message):
keys = ["app_name", "replaces_id", "app_icon", "summary",
"body", "actions", "hints", "expire_timeout"]
args = message.get_args_list()
if len(args) == 8:
notification = dict([(keys[i], args[i]) for i in range(8)])
print notification["summary"], notification["body"]
loop = DBusGMainLoop(set_as_default=True)
session_bus = dbus.SessionBus()
session_bus.add_match_string("type='method_call',interface='org.freedesktop.Notifications',member='Notify',eavesdrop=true")
session_bus.add_message_filter(print_notification)
glib.MainLoop().run()
در ضمن برای تست کردن اون عینه حالت قبل می تونین از دستور پایین استفاده کنین :
notify-send "how are you"
این رو اضافه کنم برای ذخیره کردن خروجی توی یک فایل فقط کافیه خروجی اون رو ری دایرکت کنین :
python2 yourscript >> yourfile
بعد بستن اسکریپت (هر موقع خواستین مثلا با کنترل c) خروجی اسکریپت به فایل اضافه می شه
در ضمن می شد به جای ری دایرکت کردن از امکانات خود پایتون هم استفاده کرد