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"
现在上面的输出可以很容易地传递给espeak
read 消息。例如,
将上述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+ 。C
saynoti
您还可以
saynoti
在系统每次启动时运行启动应用程序。
我想对这个问题说声谢谢。因为这个问题,我学到了很多东西。:)
如果您遇到任何问题或需要进一步更改/修改,请回复。我相信您会很高兴获得最终的工作版本。
答案2
我在处理电子邮件地址中的额外“”时遇到了麻烦,因此我将其添加到上面的代码行中,因为 espeak 根本不需要“”来读出;)
| sed ‘s/\”//g’ |
=>
| grep --line-buffered -v'^\s*$' | sed's/\"//g' | xargs -I'{}'espeak {}
很酷的工作。比调整通知发送库本身要好得多 4“你好!我是 Saurav Kumar。”
更新:无法稳定工作。我将使用 | tee -a $file |