有没有办法让Ubuntu读出通知?

Ubuntu有一个非常酷的通知系统。 有没有办法让Ubuntu在出现时读出通知?

或者是否可以将通知中的文本链接到espeak

这个问题非常有趣,所以作为答案。

dbus-monitor在执行时等待信号,当到达时它会捕获并提供有关它的相应信息。 同样,可以执行它以获取有关通知的信息。 执行时:

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

它会等待通知,当有任何通知到达时,它会提供通知信息。

例如,当声音增加/减少或任何歌曲曲目被更改时,或者任何其他歌曲曲目都会发出消息。 我在任何其他终端上使用notify-send命令手动创建桌面通知:

 notify-send "Hello How are you?" 

然后执行dbus-monitor命令的第一个终端将给出如下消息:

 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" 

现在上面的输出可以很容易地传递给espeak来读取消息。 例如,

用以下代替上面的dbus-monitor命令将读取通知消息:

检查,它是如何工作的:

  • 在终端中执行此命令并使其保持运行状态:

     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 {} 

    我知道它已经变得很长,但没有其他方法可以使它变小,因为实际通知的过滤使它变得冗长。

  • 然后以我上面描述的方式使用notify-send或其他任何东西运行桌面通知。 我正在使用notify-send 。 所以在其他终端执行以下命令:

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

    一旦执行该命令,它将说出(读取)通知。

虽然我吃了4-5个小时,但现在我很高兴能让它运转起来。

您也可以像saynoti一样saynoti自己的命令,并在每次需要阅读通知时执行它。 按照以下步骤操作即可:

  • 首先将实际命令保存到名为saynoti的文件中。 您可以使用任何将成为您的实际命令名称的文件名。

  • 然后使文件可执行并将其移动或复制到/bin

     chmod +x saynoti sudo cp saynoti /bin 
  • 现在您只需执行新命令即可启动Speaking Notification

     saynoti 
  • 要终止正在运行的进程,您可以执行以下命令:

     pkill dbus-monitor 

    或者只需在saynoti正在运行的终端上按Ctrl + C.

  • 您还可以在每次系统启动时运行saynoti ,使其成为启动应用程序 。

我想对此问题说声谢谢。 由于这个问题,我学到了很多东西。 🙂

如果您遇到任何问题或需要进一步更改/修改,请回复。 我相信你会很高兴得到最终的工作版本。

我有额外的麻烦“在我的电子邮件地址中,因此我已将此添加到上面的代码行,因为espeak不需要”根本就读出来;)

| sed’s / \“// g’|

=>

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

COOL工作。 比调整notify-send lib本身要好4“你好!我是Saurav Kumar。”

更新:不稳定。 我会用| tee -a $ file |