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


9

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

还是可以将通知中的文本链接到espeak


这个bugs.launchpad.net/ubuntu/+source/notify-osd/+bug/345357指出orca没有,现在又再次出现(?)
Rinzwind

1
orca会读取所有内容,并且很烦人,所寻找的是无论如何都只能读取通知的方法:感谢支持:)
Meow

Answers:


17

这个问题真的很有趣,可以作为答案。

dbus-monitor当执行等待信号时,它会捕获并提供有关它的适当信息。同样,可以执行它以获取有关Notifications的信息。执行时:

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

  • 然后将文件设为可执行文件,然后将其移动或复制到/bin

    chmod +x saynoti
    sudo cp saynoti /bin
    
  • 现在,您只需执行新命令即可启动语音通知

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

    pkill dbus-monitor
    

    或者只需在运行终端上按Ctrl+ 。Csaynoti

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

我想对这个问题谢谢你。由于这个问题,我学到了很多东西。:)

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


@喵:听起来不错,您对结果感到满意。以后如果您需要任何修改,请在此处ping我。
2013年

@喵:检查最终的工作版本。我解决了所有问题,效果很好。您将很高兴获得此版本。
2013年

2
兄弟,你真棒,别无所求;我将其放置在我的启动列表中,并且可以正常工作。meow beaucoup
Meow

dbus-monitor想从哪里学习,我想开始学习
Edward Torvalds,2015年

@edwardtorvalds:您可以从其官方网站上了解有关Dbus和Dbus-Monitor的信息。1. freedesktop.org/wiki/Software/dbus 2. dbus.freedesktop.org/doc/dbus-monitor.1.html
Saurav Kumar,

0

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

| sed's / \“ // g'|

=>

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

很酷的工作。到目前为止,要比调整“通知发送lib”本身更好4“您好!我是Saurav Kumar。”

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.