一行代码实现通用Linux桌面通知
2017-01-16 本文已影响398人
左蓝
最近写一个脚本需要用到桌面通知,然后找了点资料,记录一下。
首先时安装一个 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
来调用通知,简单好用~~