Bagaimana cara sementara saya menyaring gelembung pemberitahuan yang datang dari sumber tertentu?

12

Saya telah mengkonfigurasi sistem saya sehingga ketika saya menerima email baru, balon pemberitahuan muncul di layar saya. Ini nyaman di waktu, dan mengganggu di waktu lain. Tanpa harus mencopot pemasangan integrasi gmail yang saya gunakan, apakah ada cara toggling terpusat apakah jenis pemberitahuan tertentu akan ditampilkan?

Dengan kata lain, saya sedang mencari aplikasi (atau API) yang memungkinkan saya melihat daftar aplikasi "terdaftar" yang menggunakan layanan notifikasi, dan mengaktifkannya sebagai diaktifkan / dinonaktifkan. Atau, sesuatu yang memungkinkan saya untuk membuat satu atau lebih ekspresi reguler yang dapat digunakan untuk mencocokkan dengan source-application-name atau notification-bubble-content, dan jika ada kecocokan, untuk memblokir notifikasi.

Menandai
sumber
1
Tidak seperti notifikasi Gnome-Shell, pada aplikasi Ubuntu tidak terdaftar dalam layanan notifikasi. Ini menggunakan libnotify untuk notifikasi yang dikode keras dalam aplikasi. Anda dapat mencoba mematikan notifikasi dari preferensi aplikasi jika ia memiliki preferensi notifikasi (seperti gwibber, evolution, thunderbird dll).
Khurshid Alam
@orschiro Ini bukan duplikat dari pertanyaan (baru-baru ini diposting) yang Anda maksud - pertanyaan ini adalah tentang kemampuan untuk secara terprogram menyaring hanya jenis pemberitahuan tertentu, sambil mengizinkan orang lain melewatinya. Pertanyaan lain secara khusus tentang mematikan semua pemberitahuan.
Tandai
Oh kamu benar Saya telah melewatkan ini pada pandangan pertama. Terima kasih!
orschiro

Jawaban:

2

Anda mungkin dapat memfilter ini pada level d-bus, tetapi sepertinya banyak pekerjaan. Pertama lihat posting ini untuk mendapatkan wawasan tentang bagaimana OSD beroperasi

Mulai dbus-monitor sebelum Anda mengirim jalankan 'notify-send' di konsol terpisah.

pengirim metode panggilan =: 1,2450 -> dest = org.freedesktop.DBus serial = 5 jalur = / org / freedesktop / DBus; antarmuka = ​​org.freedesktop.DBus; member = GetNameOwner
   string "org.freedesktop.Notifications"
pengirim metode panggilan =: 1,2450 -> dest =: 1,41 serial = 6 jalur = / org / freedesktop / Pemberitahuan; antarmuka = ​​org.freedesktop.Notifications; member = GetServerInformation
metode pengirim kembali =: 1,41 -> dest =: 1,2450 reply_serial = 6
   string "notify-osd"
   string "Canonical Ltd"
   string "1.0"
   string "1.1"
pengirim metode panggilan =: 1,2450 -> dest =: 1,41 serial = 7 jalur = / org / freedesktop / Pemberitahuan; antarmuka = ​​org.freedesktop.Notifications; member = Beritahu
   string "beri tahu-kirim"
   uint32 0
   string "/usr/share/pixmaps/debian-logo.png"
   string "Judul Saya"
   string "Beberapa badan teks"
   Himpunan [
   ]
   Himpunan [
      entri dikt (
         string "urgensi"
         varian byte 1
      )
   ]
   int32 -1

notify-osd tidak aktif di dbus

dpkg -L beri tahu-osd
/usr/share/dbus-1/services/org.freedesktop.Notifications.service

tetapi tidak ada kendala tambahan untuk layanan ini di /etc/dbus-1/system.d

Jadi, Anda mungkin dapat membuat file konfigurasi yang dapat memfilter acara Pemberitahuan berdasarkan sumbernya dan mencapai kontrol yang Anda cari. Itu yang terbaik yang bisa saya lakukan tanpa menggali masalah dan spesifikasi dbus. Saya harap ini membantu, apa yang Anda cari harus lebih mudah dikonfigurasi untuk memulai.

ppetraki
sumber
2

... tapi sepertinya banyak pekerjaan ...

Ini tidak terlalu buruk, setidaknya untuk solusi generik kasar.

Berikut adalah salinan detail dari jawaban saya untuk pos tahun lalu (September 2012) di

Cara menonaktifkan pemberitahuan dari manajer jaringan .

dbus-monitor "interface='org.freedesktop.Notifications'"                \
| grep --line-buffered  'string "NetworkManager"'                       \
| sed -u -e  's/.*/killall notify-osd/g'                                \
| bash

Ganti string "NetworkManager"dengan RE yang diinginkan untuk menentukan pemblokiran.

Untuk mendapatkan gambaran tentang pola RE yang cocok untuk dijalankan:
dbus-monitor "interface='org.freedesktop.Notifications'"
dan lihat output ketika notifikasi muncul.

yaitu. untuk menghapus notify-sendpesan juga, gunakan grepbaris ini sebagai gantinya:

| grep --line-buffered  'string "NetworkManager"\|string "notify-send"'  \

Peringatan :
killall notify-osdtidak diskriminatif dan sepenuhnya menghapus tumpukan pemberitahuan dari semua pesan yang tertunda terlepas dari apakah agen pemberi tahu NetworkManageratau notify-sendbukan.

Solusi "jujur" perlu memperhitungkan kemungkinan kondisi balapan ketika antara menentukan pembersihan pemberitahuan diperlukan dan kemudian melakukan melakukannya, pemberitahuan lain masuk yang harus muncul dan tidak dibersihkan dengan yang lain.

Juga, jika notifikasi tertunda ketika salah satu yang diblokir masuk, mereka semua akan dibersihkan. Situasi ini setidaknya dapat diselesaikan dengan membuat salinan dbuspemberitahuan yang tertunda dan kemudian menerbitkan kembali yang diinginkan dengan notify-sendsetelah pembersihan.

Ini sedikit kerja padat karya secara manual!

Idealnya, penggunaan dbus langsung dari

method void org.freedesktop.Notifications.CloseNotification(uint id)     [1]

khusus menargetkan hanya pemberitahuan yang diinginkan, sayangnya tidak jelas ... namun ...

Jawaban lain
Bisakah org.freedesktop.Notifications.CloseNotification (uint id) dipicu dan dipanggil melalui DBus?
menunjukkan cara menggunakan [1], paling tidak dengan notify-send, tetapi sayangnya tidak untuk pemberitahuan sembarang aps. meskipun beberapa aps. memiliki antarmuka khusus untuk mengontrol notifikasi pop-up.

referensi silang .:

troll la la la
sumber