Come posso filtrare temporaneamente determinate bolle di notifica provenienti da fonti specifiche?


12

Il mio sistema è configurato in modo tale che quando ricevo nuova posta, sullo schermo appare un fumetto di notifica. Questo è conveniente a volte e distrae altre volte. Senza dover disinstallare l'integrazione di Gmail che sto utilizzando, esiste un modo per attivare o disattivare centralmente se verranno visualizzati determinati tipi di notifiche?

In altre parole, sto cercando un'applicazione (o API) che mi consenta di visualizzare un elenco di app "registrate" che utilizzano il servizio di notifica e di selezionarle come abilitate / disabilitate. Oppure, qualcosa che mi consente di creare una o più espressioni regolari che possono essere utilizzate per abbinare il nome dell'applicazione di origine o il contenuto della bolla di notifica e, se si verifica una corrispondenza, per bloccare la notifica.


1
A differenza della notifica di Gnome-Shell, l'applicazione Ubuntu non è registrata nel servizio di notifica. Utilizza libnotify per la notifica che è codificata nelle applicazioni. Puoi provare a disattivare la notifica dalle preferenze dell'applicazione se ha una preferenza di notifica (come gwibber, evolution, thunderbird ecc.).
Khurshid Alam,


@orschiro Questo non è un duplicato della domanda (postata di recente) a cui hai fatto riferimento: questa domanda riguarda la possibilità di filtrare a livello di codice solo determinati tipi di notifiche, pur consentendo ad altri di passare. L'altra domanda riguarda specificamente il silenziamento di tutte le notifiche.
Segna il

Oh, hai ragione. L'ho perso a prima vista. Grazie!
Orschiro,

Risposte:


2

Potresti essere in grado di filtrarlo a livello di d-bus, ma sembra un sacco di lavoro. Per prima cosa vedi questo post per avere informazioni su come funziona osd

Avviare dbus-monitor prima di inviare l'esecuzione 'notification-send' su una console separata.

metodo call mittente =: 1.2450 -> dest = org.freedesktop.DBus serial = 5 path = / org / freedesktop / DBus; interface = org.freedesktop.DBus; membro = GetNameOwner
   stringa "org.freedesktop.Notifications"
metodo call mittente =: 1.2450 -> dest =: 1.41 seriale = 6 percorso = / org / freedesktop / Notifiche; interface = org.freedesktop.Notifications; membro = GetServerInformation
metodo return mittente =: 1.41 -> dest =: 1.2450 reply_serial = 6
   stringa "notify-osd"
   stringa "Canonical Ltd"
   stringa "1.0"
   stringa "1.1"
metodo call mittente =: 1.2450 -> dest =: 1.41 seriale = 7 percorso = / org / freedesktop / Notifiche; interface = org.freedesktop.Notifications; utente = gli
   stringa "notifica-invia"
   uint32 0
   stringa "/usr/share/pixmaps/debian-logo.png"
   stringa "Il mio titolo"
   stringa "Some body text"
   Vettore [
   ]
   Vettore [
      dict entry (
         stringa "urgenza"
         variante byte 1
      )
   ]
   int32 -1

notify-osd vive su dbus

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

ma non ci sono ulteriori vincoli per questo servizio in /etc/dbus-1/system.d

Quindi potresti essere in grado di creare un file di configurazione in grado di filtrare gli eventi di notifica in base alla loro origine e ottenere il controllo che stai cercando. Questo è il meglio che posso fare senza scavare nel problema e nelle specifiche del dbus. Spero che questo aiuti, ciò che cerchi dovrebbe essere più facile da configurare per cominciare.


2

... ma sembra un sacco di lavoro ...

Non è poi così male, almeno per una soluzione generica rozza.

Ecco una copia dei dettagli dalla mia risposta al post dell'anno scorso (settembre 2012) in

Come disabilitare la notifica dal gestore della rete .

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

Sostituire string "NetworkManager"con l'IR desiderato per determinare il blocco.

Per avere un'idea di quale modello RE corrisponda alla ricerca di run:
dbus-monitor "interface='org.freedesktop.Notifications'"
e guarda l'output mentre le notifiche stanno spuntando.

vale a dire. per rimuovere notify-sendanche i messaggi, utilizzare grepinvece questa riga:

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

Caveat :
killall notify-osdè non discriminante e completamente pulisce lo stack notifica di messaggi in sospeso Indipendentemente dal fatto che NetworkManagero notify-sendè l'agente di notifica.

Una soluzione "onesta" deve tenere conto delle possibili condizioni di gara quando tra la determinazione di una cancellazione della notifica è necessaria e poi farlo, arriva un'altra notifica che dovrebbe apparire e non essere eliminata con il resto.

Inoltre, se le notifiche sono in sospeso quando arriva l'autore del reato da bloccare, verranno tutte eliminate. Questa situazione può almeno essere risolta facendo una copia delle dbusnotifiche in sospeso e quindi riemettere quelle desiderate con notify-senddopo l'eliminazione.

Questo è un po 'di lavoro manuale ad alta intensità di lavoro!

Idealmente, l'uso diretto del dbus di

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

mirare specificamente solo alle notifiche desiderate, purtroppo non è ovvio ... tuttavia ...

Un'altra risposta:
org.freedesktop.Notifications.CloseNotification (uint id) può essere attivato e richiamato tramite DBus?
mostra come utilizzare [1], almeno con notify-send, ma purtroppo non per le aps di notifica arbitrarie. anche se alcune aps. hanno interfacce personalizzate per controllare le notifiche pop-up.

riferimenti incrociati:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.