Existe uma maneira de fazer o Ubuntu ler as notificações?

8

O Ubuntu tem um sistema de notificação muito legal. Existe uma maneira de fazer o Ubuntu ler as notificações quando elas aparecem?

Ou é possível vincular o texto em notificações a espeak ?

    
por Meow 30.10.2013 / 18:34

2 respostas

16

Esta pergunta é realmente interessante, assim como a resposta.

dbus-monitor quando executado aguarda o sinal e quando chega ele pega e fornece as informações apropriadas sobre ele. Da mesma forma, pode ser executado para obter as informações sobre Notificações . Quando executado:

dbus-monitor "interface='org.freedesktop.Notifications'" | grep --line-buffered "member=Notify\|string"

Ele aguardará as notificações e, quando qualquer notificação chegar, fornecerá as informações das notificações.

Por exemplo, quando o som é aumentado / diminuído ou qualquer faixa de música é alterada ou qualquer outra mensagem é transmitida. Estou criando manualmente uma notificação na área de trabalho usando o comando notify-send em qualquer outro terminal:

notify-send "Hello How are you?"

Em seguida, o primeiro terminal no qual o comando dbus-monitor está sendo executado fornecerá a seguinte mensagem:

saurav@saurav-P4I45Gx-PE:~$ dbus-monitor "interface='org.freedesktop.Notifications'" | grep --line-buffered "member=Notify\|string"
   string ":1.473"
method call sender=:1.474 -> dest=:1.475 serial=7    path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications;  member=Notify
   string "notify-send"
   string ""
   string "Hello How Are You?"
   string ""
         string "urgency"

Agora a saída acima pode ser facilmente passada para espeak para ler a mensagem. Por exemplo,

A substituição do comando dbus-monitor acima por seguinte lerá a mensagem de notificação:

Verifique como funciona:

  • Execute este comando em um terminal e deixe-o em execução:

    dbus-monitor "interface='org.freedesktop.Notifications'" | grep --line-buffered "string" | grep --line-buffered -e method -e ":" -e '""' -e urgency -e notify -v | grep --line-buffered '.*(?=string)|(?<=string).*' -oPi | grep --line-buffered -v '^\s*$' | xargs -I '{}' espeak {}
    

    Eu sei que se tornou muito longo, mas não há outra maneira de torná-lo pequeno, porque a filtragem da notificação real tornou demorado.

  • Em seguida, execute uma notificação na área de trabalho da maneira que descrevi acima usando notify-send ou qualquer outra coisa. Estou usando notify-send . Então, executando o seguinte comando no outro terminal:

    notify-send "Hello! I am Saurav Kumar."
    

    Assim que você executar o comando, ele irá falar (ler) a notificação.

Embora tenha comido minhas 4-5 horas, mas estou feliz agora em fazê-lo funcionar.

Você também pode criar seu próprio comando como saynoti e executá-lo sempre que quiser uma notificação de leitura. Ao seguir estas etapas, você pode fazer isso:

  • Primeiro, salve o comando real em um arquivo chamado saynoti . Você pode usar qualquer nome de arquivo que se torne seu nome de comando real.

  • Em seguida, torne o arquivo executável e mova-o ou copie-o para /bin :

    chmod +x saynoti
    sudo cp saynoti /bin
    
  • Agora você pode simplesmente executar seu novo comando para iniciar Falar Notificação :

    saynoti
    
  • Para matar o processo em execução, você pode executar este comando:

    pkill dbus-monitor
    

    ou simplesmente pressione Ctrl + C no terminal onde saynoti está sendo executado.

  • Você também pode executar saynoti toda vez que seu sistema iniciar, tornando-o um aplicativo de inicialização .

Gostaria de agradecer por esta pergunta. Por causa dessa pergunta, aprendi muitas coisas. :)

Responda se você tiver algum problema ou precisar de mais alterações / modificações. Tenho certeza de que você ficará feliz em obter a versão final de trabalho.

    
por Saurav Kumar 31.10.2013 / 06:25
0

Eu tive problemas com o extra "nos meus endereços de e-mail, por isso acrescentei esse para a linha de código acima, pois o espeak não precisa "ler tudo";

| sed 's / \ "// g' |

= >

| grep --line-buffered -v '^ \ s * $' | sed 's / \ "// g' | xargs -I '{}' espeak {}

Trabalho LEGAL. Melhor de longe do que tweaking notificar-se lib-se 4 "Olá! Eu sou Saurav Kumar."

update: não funciona de forma estável. Eu vou usar | tee -a $ file |

    
por Jimmy 06.11.2015 / 15:16