一行代码实现通用Linux桌面通知

服务器

浏览数:136

2019-2-2

最近写一个脚本需要用到桌面通知,然后找了点资料,记录一下。

首先时安装一个 lib 包:

sudo apt-get install libnotify-bin

安装之后就可以使用 /usr/bin/notify-send 来向桌面发送通知了。

$ notify-send --help
Usage:
  /usr/bin/notify-send [OPTION...] <SUMMARY> [BODY] - create a notification

Help Options:
  -?, --help                        Show help options

Application Options:
  -u, --urgency=LEVEL               Specifies the urgency level (low, normal, critical).
  -t, --expire-time=TIME            Specifies the timeout in milliseconds at which to expire the notification.
  -a, --app-name=APP_NAME           Specifies the app name for the icon
  -i, --icon=ICON[,ICON...]         Specifies an icon filename or stock icon to display.
  -c, --category=TYPE[,TYPE...]     Specifies the notification category.
  -h, --hint=TYPE:NAME:VALUE        Specifies basic extra data to pass. Valid types are int, double, string and byte.
  -v, --version                     Version of the package.

从上面可以看到 notify-send 的基本功能就这么几个。

  • 比如直接向桌面发送一个通知:
notify-send "hello world"

  • 使用 -u 给通知设定通知等级,一般我们选择默认。
  • 使用 -t 可以设定通知信息停留的时间(时间单位毫秒,为 0 时表示需要手动关闭通知,实际上我测试无效,怎样都是 5 秒就消失了),比如:
notify-send -t 2000 "hello world"
  • 使用 -a 参数可以添加应用名称,在一些发行版中会把通知收进其通知收纳盒,使用这个参数可以知道是哪个应用发送的通知。
  • 使用 -i 可以指定通知的图标,使用绝对路径或者相对路径都可以,例如:
/usr/bin/notify-send -i /data/favicon.png "hello,$USER"

  • 使用 -c 和 -a 有些类似,都是为了在通知多时知道通知的分类,一般发行版都没有这些功能。
  • 使用 -h 可以在通知中发送额外的信息,便于程序读取通知中的含义。

扩展

添加标题

notify-send "我是标题" "我是内容,测试用的通知。"

指定屏幕

如果你有多个屏幕,使用 DISPLAY=:0.0 可以给第一个屏幕发送通知,以此类推,详细自己百度,我只有一个屏幕,笑。

在通知中执行命令

除了可以在通知中调用显示变量之外(上面 -i 的例子hello,$USER),还可以使用下面的方式在发送通知时执行命令:

notify-send "当前目录是 `pwd`"


示例

随便举个例子:
实现后台升级系统完成后自动提示升级成功。

DISPLAY=:0.0 notify-send -t 3 "系统升级...." && sudo apt-get upgrade -y && notify-send -t 3 "升级完成。"

中间的命令你还可以替换成任意命令,比如使用 wget 下载文件结束后提示下载完成。

你还可以使用 alias 把 notify-send 放进 .bashrc 或者 .zshrc 中:

alias ns="DISPLAY=:0.0 notify-send "

然后直接使用 ns 来调用通知,简单好用~~

原文地址:https://www.jianshu.com/p/931c1f082a93