Como limpar o popup de balão do bash

5

Estou definindo uma notificação com notify-send em um script. O único problema é que, quando o script é chamado várias vezes, todas as notificações são adicionadas a uma pilha de notificações e são chamadas apenas uma após a outra.

Existe uma maneira de limpar todas as notificações na tela e exibir a nova?

    
por Stefan 27.10.2011 / 15:06

4 respostas

4

Infelizmente, não é possível limpar ou "ignorar" o notify-osd notificações. Você pode ter mais sorte usando Zenity ; tem mais opções do que notify-send .

Você pode usar a opção --timeout para descartar uma notificação após alguns segundos.

zenity --info --timeout=5 --title="Test Notification" --text "$(date +%Y%m%d-%H%M%S): My notification"

Você também pode manter uma lista de IDs de processo (em uma variável de ambiente ou arquivo) de notificações anteriores e enviar a eles um sinal HUP para apagá-los antes de exibir uma nova notificação.

i=0
pids=
for x in $(seq 1 5); do
    i=$((i + 1))
    zenity --info --title="Test Multiple Notifications" --text "$(date +%Y%m%d-%H%M%S): Notification number $i" &
    pids+="$! "
done
sleep 5
for p in $pids; do kill -HUP $p >/dev/null 2>&1; done
i=$((i + 1))
zenity --info --timeout=2 --title="Test Multiple Notifications" --text "$(date +%Y%m%d-%H%M%S): Notification number $i" &

Ou mate todos os zenity processos antes de exibir uma nova notificação:

killall zenity
zenity --info --title="Test Notifications" --text "$(date +%Y%m%d-%H%M%S): My notification" &

Ou mate determinados processos zenity antes de exibir uma nova notificação:

ps ho pid,args | grep -i 'zenity.\+--title=test notifications' | sed -e 's/^ *\([0-9]\+\).*$//'
zenity --info --title="Test Notifications" --text "$(date +%Y%m%d-%H%M%S): My notification" &
    
por 08.11.2011 / 02:39
12

Isso é factível usando o comando notify-send:

notify-send --hint int:transient:1 "Title" "Body"

Ao definir a transient hint, quando a notificação expira ou é dispensada, ela não fica na barra de notificação.

    
por 23.08.2013 / 09:41
3

Talvez não seja a melhor opção, mas aqui está uma alternativa: você pode simplesmente matar o processo notify-osd e reiniciá-lo. Em seguida, publique sua notificação.

pkill notify-osd
/usr/lib/x86_64-linux-gnu/notify-osd &
notify-send "Hello!"
    
por 16.02.2016 / 07:18
1

Infelizmente, isso não parece viável com notificações definidas por notify-send . Dê uma olhada no o código-fonte de notify-send.c - ele cria uma notificação, define seus parâmetros, mas não armazena qualquer referência a ela, em qualquer lugar. Em vez disso, chama g_object_unref , que, como eu entendo de aqui , efetivamente remove a possibilidade de interação externa com a mensagem. Portanto, para ter um poder de gerenciamento avançado sobre as notificações, você precisaria usar uma ferramenta diferente de notify-send (provavelmente um aplicativo personalizado).

Um possível corte bruto para atingir seu objetivo seria um script usando as ferramentas xautomation . Você poderia usá-los para localizar os botões "fechar" em todos os pop-ups de notificação e simular um clique do mouse em cada um deles. Mas isso não é tão fácil e certamente não é uma solução pura .

    
por 04.11.2011 / 12:45