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

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

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

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

答案1

这个问题真的很有趣,答案也是如此。

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"

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

将上述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。您可以使用任何将成为实际命令名称的文件名。

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

    chmod +x saynoti
    sudo cp saynoti /bin
    
  • 现在您只需执行新命令即可开始发言通知

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

    pkill dbus-monitor
    

    或者直接在运行的终端上按下Ctrl+ 。Csaynoti

  • 您还可以saynoti在系统每次启动时运行启动应用程序

我想对这个问题说声谢谢。因为这个问题,我学到了很多东西。:)

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

答案2

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

| sed ‘s/\”//g’ |

=>

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

很酷的工作。比调整通知发送库本身要好得多 4“你好!我是 Saurav Kumar。”

更新:无法稳定工作。我将使用 | tee -a $file |

相关内容