โดยการแจ้งเตือนคุณหมายถึง "ฟองสบู่ OSD" ที่ซอฟต์แวร์บางตัวส่งเช่นการเปลี่ยนระดับเสียงสนทนา IM ฯลฯ ? คุณต้องการสร้างโปรแกรมไพ ธ อนเพื่อจับภาพเหล่านั้นหรือไม่?
ดีถาม Ubuntu ไม่ใช่ QA ของโปรแกรมเมอร์และการพัฒนาซอฟต์แวร์ค่อนข้างเกินขอบเขต แต่นี่เป็นรหัสเล็ก ๆ น้อย ๆ ที่ฉันจับฟองการแจ้งเตือน:
import glib
import dbus
from dbus.mainloop.glib import DBusGMainLoop
def notifications(bus, message):
if message.get_member() == "Notify":
print [arg for arg in message.get_args_list()]
DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_match_string_non_blocking("interface='org.freedesktop.Notifications'")
bus.add_message_filter(notifications)
mainloop = glib.MainLoop()
mainloop.run()
ปล่อยให้สิ่งนี้ทำงานในเทอร์มินัลจากนั้นเปิดหน้าต่างเทอร์มินัลอื่นแล้วทดสอบ:
notify-send --icon=/usr/share/pixmaps/debian-logo.png "My Title" "Some text body"
และโปรแกรมจะแสดงผลลัพธ์นี้:
[dbus.String(u'notify-send'), dbus.UInt32(0L), dbus.String(u'/usr/share/pixmaps/debian-logo.png'), dbus.String(u'My Title'), dbus.String(u'Some text body'),...
อย่างที่คุณคิดว่าmessage.get_args_list()[0]
เป็นผู้ส่ง [2] สำหรับไอคอน [3] สำหรับการสรุปและ [4] สำหรับเนื้อความ
สำหรับความหมายของฟิลด์อื่นให้ตรวจสอบเอกสารข้อกำหนดอย่างเป็นทางการ
dbus-monitor "type='signal',interface='org.freedesktop.Notifications'"
แสดงอะไรเลย แต่dbus-monitor "interface='org.freedesktop.Notifications'"
แสดงการแจ้งเตือน (ประเภทคือ 'method_call' ไม่ใช่ 'สัญญาณ')