12
9
2013
5

替换 Awesome 内建的桌面通知

Awesome 用户们,你们有没有觉得 Awesome 那个 naughty 组件的通知很丑?

Awesome notification

这样子是不是好一些?

Xfce notification

Linux 的桌面通知机制是使用 D-Bus 通信的。所以,要换个桌面通知的流程如下:

  1. 让旧的桌面守护进程释放对应的 D-Bus 目的地名;
  2. 运行新的桌面守护进程。

首先安装个新的通知守护进程,比如我安装的xfce4-notifyd

阅读 Awesome 的naughty.lua代码之后,发现 Awesome 其实能够「慷慨」地释放org.freedesktop.Notifications这个通知用的地址的:

$ awesome-client
awesome#return dbus.release_name("session", "org.freedesktop.Notifications")
   boolean true

使用awesome-client告诉 Awesome 执行这条语句,释放这个 D-Bus 目的地址。返回true就表示执行成功了。如果喜欢的话,当然可以把这句写到rc.lua里去。

其实做到这一步就可以了。在需要时 D-Bus 会自动激活 xfce4-notifyd 的进程。当然也可以手动运行:

$ /usr/lib/xfce4/notifyd/xfce4-notifyd

还可以使用xfce4-notifyd-config命令来进行简单的配置哦。当然,这个替换对于从 Awesome 脚本里直接调用 naughty 不起效的。

从上边的图片可以看到,XFCE 的通知支持按钮的,Awesome 不支持这个。不过,它们都支持类似这种<span color="blue">蓝色文字</span>Pango 文本标记语法

要换回使用 Awesome 来显示通知的话,先关掉其它通知守护进程,然后让 Awesome 告诉 D-Bus 它要来处理这个地址上的消息:

awesome# return dbus.request_name("session", "org.freedesktop.Notifications")
   boolean true

最后来吐槽一下 C 公司的notify-osd,就是 Ubuntu 上默认那个看上去不错的黑框框。它不支持 Pango 文本标记也就罢了,不能同时显示多条通知只能一个个地来也就罢了,像 fcitx 这样往通知上放点按钮你猜会怎么着?——

notify-osd

竟然出来个夺取窗口焦点的弹框……

| Theme: Aeros 2.0 by TheBuckmaker.com