¿Cómo puedo filtrar temporalmente ciertas burbujas de notificación que provienen de fuentes específicas?

12

Tengo mi sistema configurado de tal manera que cuando recibo un nuevo correo, aparece un globo de notificación en mi pantalla. Esto es conveniente a veces, y distrae en otros momentos. Sin tener que desinstalar la integración de gmail que estoy usando, ¿hay alguna forma de alternar centralmente si se mostrarán ciertos tipos de notificaciones?

En otras palabras, estoy buscando una aplicación (o API) que me permita ver una lista de aplicaciones "registradas" que usan el servicio de notificación y alternarlas como habilitadas / deshabilitadas. O bien, algo que me permite crear una o más expresiones regulares que pueden usarse para hacer coincidir el nombre de la aplicación de origen o el contenido de la burbuja de notificación y, si se produce una coincidencia, bloquear la notificación.

marca
fuente
1
A diferencia de la notificación Gnome-Shell, la aplicación On Ubuntu no se registra en el servicio de notificaciones. Utiliza libnotify para la notificación que está codificada en las aplicaciones. Puede intentar desactivar la notificación desde la preferencia de la aplicación si tiene una preferencia de notificación (como gwibber, evolution, thunderbird, etc.).
Khurshid Alam
@orschiro Esto no es un duplicado de la pregunta (recientemente publicada) a la que se refirió: esta pregunta se trata de poder filtrar programáticamente solo ciertos tipos de notificaciones, mientras permite que otros pasen. La otra pregunta es específicamente sobre silenciar todas las notificaciones.
Marque el
Oh tienes razon. He echado de menos esto a primera vista. ¡Gracias!
orschiro

Respuestas:

2

Es posible que pueda filtrar esto en el nivel d-bus, pero parece mucho trabajo. Primero vea esta publicación para obtener información sobre cómo funciona osd

Inicie dbus-monitor antes de enviar la ejecución 'notificar-enviar' en una consola separada.

método de llamada remitente =: 1.2450 -> dest = org.freedesktop.DBus serial = 5 ruta = / org / freedesktop / DBus; interfaz = org.freedesktop.DBus; miembro = GetNameOwner
   cadena "org.freedesktop.Notifications"
método remitente de llamada =: 1.2450 -> dest =: 1.41 serial = 6 ruta = / org / freedesktop / Notificaciones; interfaz = org.freedesktop.Notifications; miembro = GetServerInformation
método return sender =: 1.41 -> dest =: 1.2450 reply_serial = 6
   cadena "notificar-osd"
   cadena "Canonical Ltd"
   cadena "1.0"
   cadena "1.1"
método remitente de llamada =: 1.2450 -> dest =: 1.41 serial = 7 ruta = / org / freedesktop / Notificaciones; interfaz = org.freedesktop.Notifications; miembro = Notificar
   cadena "notificar-enviar"
   uint32 0
   cadena "/usr/share/pixmaps/debian-logo.png"
   cadena "Mi título"
   cadena "Algún cuerpo de texto"
   matriz [
   ]
   matriz [
      entrada dict (
         cadena "urgencia"
         Byte variante 1
      )
   ]
   int32 -1

notify-osd vive en dbus

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

pero no hay restricciones adicionales para este servicio en /etc/dbus-1/system.d

Por lo tanto, es posible que pueda crear un archivo de configuración que pueda filtrar los eventos de notificación en función de su origen y lograr el control que busca. Es lo mejor que puedo hacer sin investigar el problema y las especificaciones de dbus. Espero que esto ayude, lo que buscas debería ser más fácil de configurar para empezar.

ppetraki
fuente
2

... pero parece mucho trabajo ...

No es realmente tan malo, al menos para una solución genérica cruda.

Aquí hay una copia de los detalles de mi respuesta a la publicación del año pasado (septiembre de 2012) en

Cómo deshabilitar la notificación del administrador de red .

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

Reemplace string "NetworkManager"con el RE deseado para determinar el bloqueo.

Para tener una idea de qué coincidencia de patrón RE debe buscar, ejecute:
dbus-monitor "interface='org.freedesktop.Notifications'"
y mire la salida mientras aparecen las notificaciones.

es decir. para eliminar notify-sendmensajes también, use esta greplínea en su lugar:

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

Advertencia :
killall notify-osdno discrimina y borra por completo la pila de notificaciones de cualquier mensaje pendiente, independientemente de si es NetworkManagero no notify-sendel agente notificador.

Una solución "honesta" debe tener en cuenta las posibles condiciones de carrera cuando entre la determinación de una purga de notificación es necesaria y luego al hacerlo, aparece otra notificación que debería aparecer y no ser purgada con el resto.

Además, si hay notificaciones pendientes cuando entra el infractor a bloquear, se eliminarán todas. Al menos, esta situación se puede resolver haciendo una copia de las dbusnotificaciones pendientes y luego volviendo a emitir las deseadas notify-senddespués de la purga.

¡Esto es un poco de trabajo manual intensivo!

Idealmente, el uso directo de dbus de

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

para apuntar específicamente solo a las notificaciones deseadas, desafortunadamente no es obvio ... sin embargo ...

Otra respuesta
¿Se puede activar e invocar org.freedesktop.Notifications.CloseNotification (uint id) a través de DBus?
muestra cómo usar [1], al menos con notify-send, pero desafortunadamente no para notificaciones arbitrarias aps. aunque algunos aps. tener interfaces personalizadas para controlar las notificaciones emergentes.

referencias cruzadas .:

troll la la la
fuente