Como obtenho as notificações da área de trabalho?

1

Desejo exibir minhas notificações da área de trabalho (estou usando o Gnome 3) em outro dispositivo. Então, eu quero escrever um software que receba a notificação no meu computador e a envie pela internet. Infelizmente, não encontrei nenhum bom ponto para começar como meu código pode receber as notificações e fazer algo com elas.

Existe alguma API para isso?

    
por Florian 21.08.2016 / 19:42

1 resposta

2

Bem, as notificações do Gnome usam o D-BUS para passar as mensagens. A especificação do gnome descreve como usar as classes org.freedesktop.Notifications.* e tem uma boa quantidade de dicas de formatação. Em geral, é um formato HTML-ish.

No entanto, você absolutamente não pode falar remotamente com o D-BUS em outra máquina. Não vamos nem começar em quantas brechas de segurança seriam abertas.

Ainda assim, você sempre pode ter um programa na máquina de destino que receberá a comunicação e fale com o D-BUS localmente já existente.

Existem duas opções que são wrappers em torno de org.freedesktop.Notifications.* e tornam os programas de gravação muito mais fáceis:

  • libnotify : que é quase um padrão de fato para fazer notificações, suporta não apenas o gnome, mas vários outros.

  • notify-sharp-3 : por mais estranho que pareça, é uma funcionalidade baseada em C # de código aberto em torno de várias especificações de notificação. Em algum momento, ele até teve seu próprio idioma chamado boo , mas está morrendo em favor de libnotify .

OK, libnotify nós vamos.

libnotify vem com um binário que sabe como falar com o daemon de notificação (sim, essas notificações são exibidas por um daemon de segundo plano). O comando é notify-send e é bastante trivial usar.

notify-send 'Meeting in 5 minutes' 'John from the <b>QA Team</b> just found a bug that should never had happened.  Seriously, we are doing something wrong'

E isso exibirá a notificação. No entanto, torná-lo remoto é um pouco mais complexo. Supondo que você saiba que bob é o usuário atualmente executando o Xorg na máquina krakatoa e que o krakatoa tem libnotify instalado e executando o daemon de notificação do gnome, você pode fazer:

ssh bob@krakatoa \
    notify-send 'Meeting in 5 minutes' \
    'John from the <b>QA Team</b> just found a bug that should never had happened.  Seriously, we are doing something wrong'

Mas encontrar cada usuário em cada máquina pode ser complicado. Você pode tentar criar um script que execute ps -afe | grep gnome , encontre o usuário e execute su -u <user> DISPLAY=:0 notify-send ... . Mas, novamente, você provavelmente não deve enviar ssh solicitações como root .

O Wiki do Arch tem uma lista de interfaces para libnotify em vários idiomas. A partir daí, você pode criar seu próprio daemon, com seu próprio protocolo de comunicação para as mensagens de notificação. Por exemplo, uma vez que você é especificamente após o gnome, python Gobject pode se encaixar na conta.

Em resumo:

  • Notificações acontecem no D-BUS;

  • Você não pode acessar diretamente o D-BUS remotamente;

  • Você pode usar libnotify para acessar o D-BUS de um programa sob o seu controle na máquina de destino.

Referências:

por 22.08.2016 / 02:23