「在Debian下,配置桌面通知」

“桌面通知”,指的是一种“类似于Microsoft Windows中出现在桌面右下角的弹窗”的通知。这种通知并不是Alert,因此不会影响用户的操作,仅起到提示功能。

本文将一步一步的实现:通过命令行发送通知。其实也没有几步,很简单。之所以这么做是因为在系统发生某些事件或者某个时间点时,我希望能够收到通知提示,因此需要通过命令行(Shell脚本)来发送通知。在「ArchLinux/Desktop notifications」中给出了其他编程语言发送通知的方法。

什么是Libnotify?

Libnotify是「桌面通知规范」的一种实现,它为GTK+和Qt应用程序提供支持,并且与桌面无关:它已被许多开源应用程序(如Evolution和Pidgin)使用。

我猜测的流程

在Shell中,通过调用notify-send(1)命令,将消息内容发送给“通知守护进程”,然后”通知守护进程“在桌面上显示一个通知。

我们需要启动”通知守护进程“。

启动“通知守护进程”

在Debian系列中,安装notification-daemon软件包:

# apt-get install notification-daemon

然后,执行如下命令来启动“通知守护进程”:

# /usr/lib/notification-daemon/notification-daemon

到此,我们就有了一个“通知守护进程”,接下来就是发送通知了。

命令行中发送通知

如果想要在命令行中发送通知,需要使用notify-send(1)命令。在Debian中,该命令在libnotify-bin软件包中,执行如下命令进行安装:

# apt-get install libnotify-bin

然后,执行notify-send(1)命令来发送通知:

# notify-send “First message” “This is a message body.”

至此,你就可以收到一个标题为“First message”,内容为“This is a message body.”的消息。

实际上,“通知”还支持HTML标记、高亮、启动应用、鸣声等等相关功能,本文并没有进行详细的介绍,该部分内容可以参考「The Desktop Notification Spec」的说明。在「ArchLinux/Desktop notifications」中给出了其他编程语言发送通知的方法。

开机启动“通知守护进程”

通过D-Bus启动

可以分别向目录/usr/share/dbus-1/services$XDG_DATA_HOME/dbus-1/services中添加org.freedesktop.Notifications.service配置文件,该配置文件的内容如下:

[D-BUS Service]

Name=org.freedesktop.Notifications

Exec=/usr/lib/notification-daemon-1.0/notification-daemon

它可以通过在D-Bus第一次调用时启动。

通过AutoStart启动

除了使用D-Bus以外,还可以配置自动启动。方法是将/usr/share/applications/notification-daemon.desktop复制到$HOME/.config/autostart中。文件/usr/share/applications/notification-daemon.desktop是随notification-daemon软件包一起安装的。

我就不提细节方面的东西了,去看「XDG Autostart」和「XDG Autostart specification」看吧。

参考文献

ArchLinux/Desktop notifications