如果在 Linux 系统中安装多个桌面环境时,因为每个桌面环境都会附带通知程序(即用于弹出通知提示窗口的程序),那么可能就会出现桌面通知程序混乱的问题,例如在 Deepin 桌面环境中弹出 Xfce 的风格的通知。
问题产生原因
Linux 桌面使用 DBus 作为程序间通讯的机制,而桌面通知就是一个特殊的 DBus 服务。任何一个桌面程序向特定的 DBus 服务接口 org.freedesktop.Notifications 发送规范的通知信息的时候, DBus 系统会自动通知并唤醒响应程序来实现用户的通知。
响应程序通过在 /usr/share/dbus-1/services 目录下放置 *.service 配置文件的形式,向 DBus 系统注册自己需要响应服务接口。
那么通过下面的这个命令,我们就能知道有哪些程序注册了 org.freedesktop.Notifications 服务接口,即 DBus会调用这些程序来显示桌面通知:
grep -rnw /usr/share/dbus-1/services/ -e "Notifications"
输出的结果,就显示了有哪些 service 文件注册了桌面通知服务,例如下面的输出就表明 Deepin 的桌面通知程序注册了桌面通知服务:
/usr/share/dbus-1/services/com.deepin.Notifications.service:2:Name=org.freedesktop.Notifications
解决方法
在整个系统中只保留自己想要的桌面通知服务程序。
** 建议通过系统默认的包管理器移除不需要的通知程序软件包(例如 xfce4-notifyd)。**
一个绕过的方法:删除不想要的通知类程序的service文件,使DBus不会自动唤醒他们。