Como posso filtrar temporariamente determinadas bolhas de notificação provenientes de fontes específicas?

12

Eu tenho meu sistema configurado para que, quando eu receber novos e-mails, um balão de notificação apareça na minha tela. Isso é conveniente às vezes e distrai outras vezes. Sem precisar desinstalar a integração do Gmail que estou usando, existe uma maneira de centralmente alternar se certos tipos de notificações serão exibidos?

Em outras palavras, estou procurando um aplicativo (ou API) que me permita ver uma lista de aplicativos "registrados" que usam o serviço de notificação e alterná-los como ativados / desativados. Ou algo que me permite criar uma ou mais expressões regulares que podem ser usadas para corresponder ao nome do aplicativo de origem ou ao conteúdo do balão de notificação e, se ocorrer uma correspondência, bloquear a notificação.

    
por Mark 06.02.2013 / 17:24

2 respostas

2

Você pode filtrar isso no nível d-bus, mas parece muito trabalho. Primeiro, veja este post para obter informações sobre como o osd opera

Inicie o dbus-monitor antes de enviar a execução 'notificar-enviar' em um console separado.

method call sender=:1.2450 -> dest=org.freedesktop.DBus serial=5 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=GetNameOwner
   string "org.freedesktop.Notifications"
method call sender=:1.2450 -> dest=:1.41 serial=6 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=GetServerInformation
method return sender=:1.41 -> dest=:1.2450 reply_serial=6
   string "notify-osd"
   string "Canonical Ltd"
   string "1.0"
   string "1.1"
method call sender=:1.2450 -> dest=:1.41 serial=7 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=Notify
   string "notify-send"
   uint32 0
   string "/usr/share/pixmaps/debian-logo.png"
   string "My Title"
   string "Some text body"
   array [
   ]
   array [
      dict entry(
         string "urgency"
         variant             byte 1
      )
   ]
   int32 -1

notify-osd vive no dbus

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

mas não há restrições adicionais para este serviço em /etc/dbus-1/system.d

Assim, você pode criar um arquivo de configuração que possa filtrar os eventos de notificação com base em sua origem e obter o controle desejado. É o melhor que posso fazer sem entrar no problema e na especificação do dbus. Espero que isso ajude, o que você está procurando deve ser mais fácil de configurar para começar.

    
por ppetraki 09.07.2013 / 16:02
2
  

... mas parece muito trabalho ...

Não é muito ruim, pelo menos para uma solução genérica bruta.

Aqui está uma cópia dos detalhes da minha resposta à postagem do ano passado (setembro de 2012) em

Como desabilitar a notificação do network-manager .

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

Substitua string "NetworkManager" pelo RE desejado para determinar o bloqueio.

Para ter uma ideia do que corresponde ao padrão RE para executar:
dbus-monitor "interface='org.freedesktop.Notifications'"
e observe a saída enquanto as notificações estão aparecendo.

ie. para remover notify-send messages também, use esta grep line:

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

Ressalva : o killall notify-osd não é discriminatório e limpa completamente a pilha de notificações de qualquer mensagem pendente, independentemente de NetworkManager ou notify-send ser o agente notificador.

Uma solução "honesta" precisa levar em conta as possíveis condições de corrida quando é necessário determinar entre uma limpeza de notificação e, em seguida, fazer outra notificação, que deve aparecer e não ser eliminada com o resto.

Além disso, se as notificações estiverem pendentes quando o ofensivo a ser bloqueado chegar, todas elas serão eliminadas. Essa situação pode pelo menos ser resolvida fazendo uma cópia das notificações dbus pendentes e, em seguida, reemitir as desejadas com notify-send após a limpeza.

Este é um pouco de trabalho intensivo manualmente!

Idealmente, o uso direto de dbus

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

para segmentar especificamente apenas as notificações desejadas, infelizmente não é óbvio ... no entanto ...

Outra resposta Can org.freedesktop.Notifications.CloseNotification (uint id) pode ser acionado e invocado via DBus?
mostra como usar [1] , pelo menos com notify-send , mas infelizmente não para notificação arbitrária aps. embora alguns aps. tem interfaces personalizadas para controlar notificações pop-up.

cruzado refs .:

por troll la la la 30.09.2013 / 10:17

Tags