补充说明
notify-send 是 libnotify 提供的命令行工具,通过 D-Bus 的 org.freedesktop.Notifications 服务发送桌面通知。它需要正在运行的通知守护进程(GNOME、KDE、XFCE 等桌面环境自带)以及可用的会话总线。
脚本中可以用它报告任务完成、备份失败、电池状态等。通知的显示样式由桌面环境决定,-u 控制紧急程度,-t 控制自动消失时间,-i 指定图标。
在 cron、systemd 服务等非桌面会话中,必须显式提供 DBUS_SESSION_BUS_ADDRESS 和 DISPLAY,否则会报“Cannot autolaunch D-Bus without X11 $DISPLAY”。可借助 systemd-run --user 在用户会话中执行。
语法
notify-send [选项] 标题 [正文]
选项
-u 级别:紧急程度,low、normal、critical-t 毫秒:自动关闭时间,0 表示由守护进程决定-i 图标:图标名称或文件路径-a 名称:应用名-c 类型:通知分类,如transfer.complete-h 类型:名称:值:附加提示信息-p:打印通知 ID-r ID:替换指定 ID 的旧通知-w:等待通知关闭后再退出-A 名称=文本:添加动作按钮,隐含等待用户操作-e:创建临时通知,不进入通知历史-v:显示版本
实例
# 最简单的通知
notify-send "备份完成" "数据已同步到 /backup"
# 紧急通知,不自动消失
notify-send -u critical -t 0 -i dialog-error "备份失败" "请检查日志"
# 指定应用名与分类
notify-send -a backup -c transfer.complete "同步完成" "共 128 个文件"
# 替换同一条通知,避免刷屏
id=$(notify-send -p "进度" "10%")
notify-send -r "$id" "进度" "50%"
# 带动作按钮并读取结果
notify-send -A "open=打开" -A "ignore=忽略" "发现更新" "是否查看?"
# 在 cron 中指定会话总线
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus \
DISPLAY=:0 notify-send "定时任务" "已完成"
注意事项
- 没有通知守护进程时命令会失败,SSH 会话中通常无法直接弹窗。
-t 0的具体行为由守护进程决定,不保证永久显示。- 通知内容会出现在桌面上,不要在正文中放置密码等敏感信息。