Ubuntu Lucid 上的命令行桌面通知

pts*_*pts 7 desktop notifications ubuntu-10.04

我正在编写一个 shell 脚本,我想从中显示一个桌面通知,该通知停留在显示器的一个角落,直到用户单击它,如果发送了多个通知,则所有通知都将显示并在同时在屏幕上的一个。我试过notify-send,它在 Ubuntu Hardy 上运行得很好,但它不能在 Ubuntu Lucid 上做我需要的。我应该用什么代替?

我也试过pynotify( python-notify) 和libnotify,但它们似乎都使用相同的后端,默认情况下不能做我想要的。

我试过了

$ notify-send foo
Run Code Online (Sandbox Code Playgroud)

,但它会显示一个通知,该通知在几秒钟后超时(不好),并且

$ notify-send -t 0 foo
Run Code Online (Sandbox Code Playgroud)

在屏幕中间的窗口中显示通知(不好)。如果我做

$ notify-send foo
$ notify-send bar
Run Code Online (Sandbox Code Playgroud)

只有一个通知同时显示(不好)。

经过更多的挖掘,我发现:

pts*_*pts 5

似乎这notify-osd是新的 Ubuntu 通知守护程序,它不能做我想要的,而且notification-daemon是我需要的,这是以前 Ubuntu 版本(如 Hardy)中的默认设置。以下是如何安装它并使其成为 Ubuntu Lucid 的默认设置:

$ sudo apt-get install notification-daemon
$ sudo perl -pi -e 's@^Exec=.*@Exec=/usr/lib/notification-daemon/notification-daemon@' /usr/share/dbus-1/services/org.freedesktop.Notifications.service
$ sudo killall notify-osd
Run Code Online (Sandbox Code Playgroud)

可选的:

$ sudo rm -f /usr/share/dbus-1/services/org.freedesktop.Notifications.service.*
Run Code Online (Sandbox Code Playgroud)

现在这按预期工作:

$ notify-send -t 0 foo
Run Code Online (Sandbox Code Playgroud)

要恢复更改,请运行:

$ sudo apt-get install --reinstall notify-osd
Run Code Online (Sandbox Code Playgroud)