Theo thông báo, bạn có nghĩa là "bong bóng OSD" mà một số phần mềm gửi, như thay đổi âm lượng, trò chuyện IM, v.v.? Bạn muốn tạo một chương trình python để bắt những người đó?
Chà, hỏi Ubuntu không phải là QA của lập trình viên và việc phát triển phần mềm hơi vượt quá phạm vi, nhưng đây là một đoạn mã nhỏ tôi đã thực hiện để chụp bong bóng thông báo:
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()
Để nó chạy trong một thiết bị đầu cuối, sau đó mở một cửa sổ thiết bị đầu cuối khác và kiểm tra nó:
notify-send --icon=/usr/share/pixmaps/debian-logo.png "My Title" "Some text body"
Và chương trình sẽ xuất ra điều này:
[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'),...
Như bạn có thể đoán, message.get_args_list()[0]
là người gửi, [2] cho biểu tượng, [3] cho tóm tắt và [4] cho văn bản cơ thể.
Để biết ý nghĩa của các trường khác, hãy kiểm tra tài liệu đặc tả chính thức
dbus-monitor "type='signal',interface='org.freedesktop.Notifications'"
không hiển thị gì ngoàidbus-monitor "interface='org.freedesktop.Notifications'"
hiển thị thông báo (loại là 'method_call' không phải 'signal').