Linux 命令速查
系统管理 man notify-send

notify-send

向桌面环境发送通知消息。

返回

补充说明

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 的具体行为由守护进程决定,不保证永久显示。
  • 通知内容会出现在桌面上,不要在正文中放置密码等敏感信息。

参考链接