Tenho um script bash que abre uma janela com notify-send
. Gostaria de fechar essa janela quando o script terminar, mas não consigo encontrar nada para kill
.
A pergunta é uma duplicata de https://askubuntu.com/questions/639754/is-it-possible-to-cancel-or-clear-a-notification-created-by-using-notify-send , mas nenhuma das respostas funciona para mim. A resposta aceita diz para matar um processo chamado notify-osd
, mas não tenho nada parecido. É perceptível que essa pergunta tem dez anos.
Meu roteiro é como
notify-send -u critical -i ~/.icons/my-icon.png "$titletext" "$helptext"
helppid=$!
…
kill $helppid
(A configuração de urgência é crítica para que a janela Ajuda permaneça aberta até ser explicitamente descartada.)
O problema é que $!
não retorna um valor. ps -ef | grep -i notify
Não mostra nada conectado ao meu script.
Encontrei uma solução alternativa usando o print-id
recurso notify-send
(descrito em https://askubuntu.com/a/161852 ):
print-id=$(notify-send -p -u critical -i ~/.icons/my-icon.png "$titletext" "$helptext")
notify-send -r $print-id -u low ~/.icons/my-icon.png "$titletext" Finished
Alguém pode descrever uma maneira melhor de dispensar o diálogo de ajuda? Li recomendações para yad
, e estou pensando se devo instalar e avaliar.
Sua solução alternativa parece ser a solução perfeita. Como é frequentemente o caso, o archlinux fornece mais informações sobre como as notificações funcionam; elas agora são geralmente implementadas no desktop por
dbus
.dbus
é um serviço de segundo plano que permite que ferramentas digam que estão dispostas a fornecer algum recurso com um nome bem conhecido, como "org.freedesktop.Notifications" para pop-ups de notificação. Quando um aplicativo comonotify-send
quer apresentar uma notificação, ele envia uma mensagem por dbus para o nome bem conhecido do recurso e a ferramenta de escuta faz a ação esperada, enviando de volta o id da notificação para uso futuro.É assim que
notify-send
você pode retornar quase imediatamente, e não verá um novo processo em execução; normalmente, a ferramenta que fornece o recurso tende a ser executada o tempo todo como um daemon ou como parte de algum código de desktop maior.dbus
Também pode ser configurado para iniciar a ferramenta "sob demanda", se ela ainda não estiver escutando mensagens.Então, a maneira mais limpa de puxar uma notificação para baixo é passar pela mesma API e usar
notify-send
para atualizar a notificação anterior com seu novo status. Isso não exige que você saiba qual ferramenta está fornecendo o pop-up, se houver, então é o mais à prova do futuro.