Estou tentando filtrar todas as notificações através do speak. No entanto, parece que não consigo encontrar uma maneira de obter o corpo da notificação de um script python, ou mesmo o nome do sinal para ouvir.
bus.add_signal_receiver(espeak,
dbus_interface="org.freedesktop.Notifications",
signal_name="??")
Tentar pesquisar no Google apenas parece produzir resultados que envolvem a criação de novas notificações, por isso estou completamente perdido agora.
Alguém pode me ajudar com isso?
Em resumo, o que eu quero é ouvir as notificações recebidas usando python e obter o atributo "body" da notificação.
dbus-monitor "type='signal',interface='org.freedesktop.Notifications'"
não mostra nada, masdbus-monitor "interface='org.freedesktop.Notifications'"
mostra notificações (o tipo é 'method_call' e não 'signal').Respostas:
Para manter isso atualizado: do dbus 1.5.something é necessário um parâmetro extra ao adicionar uma string de correspondência
bus.add_match_string_non_blocking
para garantir que recebamos tudo.O código resultante seria o seguinte:
fonte
unable to connect to session bus: Operation was cancelled
. Estamos passandobus
para o filtro.from gi.repository import GLib as glib
fazer isso funcionar.Com notificações, você quer dizer os "balões OSD" que algum software envia, como alteração de volume, bate-papo por mensagem instantânea, etc.? Você deseja criar um programa python para capturá-los?
Bem, o Ask Ubuntu não é o controle de qualidade de um programador, e o desenvolvimento de software está um pouco além do escopo, mas aqui está um pequeno código que eu capturei bolhas de notificação:
Deixe isso em execução em um terminal, abra outra janela do terminal e teste-a:
E o programa produzirá isso:
Como você deve ter adivinhado,
message.get_args_list()[0]
é o remetente, [2] para o ícone, [3] para o resumo e [4] para o texto do corpo.Para o significado dos outros campos, verifique os documentos oficiais de especificação
fonte
Eu tive problemas para que qualquer um dos outros exemplos funcionasse, mas cheguei lá no final. Aqui está um exemplo de trabalho:
Se você quiser ver um exemplo de trabalho mais detalhado, recomendo examinar o arquivo Notifications.py no projeto recent_notifications .
fonte