Saya mencoba memfilter setiap notifikasi melalui espeak. Namun, sepertinya saya tidak bisa menemukan cara untuk mendapatkan badan notifikasi dari skrip python, atau bahkan apa signal_name untuk mendengarkan.
bus.add_signal_receiver(espeak,
dbus_interface="org.freedesktop.Notifications",
signal_name="??")
Mencoba ke Google untuk ini sepertinya hanya menghasilkan hasil yang melibatkan membuat pemberitahuan baru, jadi saya benar-benar bingung sekarang.
Adakah yang bisa membantu saya dengan ini?
Singkatnya, yang saya inginkan adalah mendengarkan notifikasi yang masuk menggunakan python, dan mendapatkan atribut "body" dari notifikasi.
dbus-monitor "type='signal',interface='org.freedesktop.Notifications'"
menunjukkan apa-apa selaindbus-monitor "interface='org.freedesktop.Notifications'"
menunjukkan pemberitahuan (jenisnya adalah 'method_call' bukan 'sinyal').Jawaban:
Agar ini selalu terbarui: dari dbus 1.5.sesuatu parameter tambahan diperlukan saat menambahkan string kecocokan dengan
bus.add_match_string_non_blocking
untuk memastikan kami menerima semuanya.Kode yang dihasilkan adalah sebagai berikut:
sumber
unable to connect to session bus: Operation was cancelled
. Kami beralihbus
ke filter.from gi.repository import GLib as glib
membuat ini berfungsi.Yang Anda maksud dengan pemberitahuan adalah "gelembung OSD" yang dikirim beberapa perangkat lunak, seperti mengubah volume, obrolan IM, dll? Anda ingin membuat program python untuk menangkapnya?
Yah, Tanya Ubuntu bukan QA seorang programmer, dan pengembangan perangkat lunak sedikit di luar cakupan, tapi di sini ada sedikit kode yang saya lakukan untuk menangkap gelembung notifikasi:
Biarkan ini berjalan di terminal, lalu buka jendela terminal lain dan uji:
Dan program akan menampilkan ini:
Seperti yang mungkin sudah Anda duga,
message.get_args_list()[0]
adalah pengirim, [2] untuk ikon, [3] untuk ringkasan dan [4] untuk teks isi.Untuk arti bidang lainnya, periksa dokumen spesifikasi resmi
sumber
Saya kesulitan mendapatkan contoh lain untuk benar-benar berfungsi, tetapi pada akhirnya saya sampai di sana. Berikut ini contoh kerjanya:
Jika Anda ingin melihat contoh kerja yang lebih rinci, saya sarankan melihat Notifications.py di proyek recent_notifications .
sumber