Linux之notify-send相关

关于notify-send

notify-send 是一个在 Linux 系统中用于从命令行发送桌面通知的工具。它通过通知守护进程(notification daemon)向用户发送通知,可以用来提醒用户有关事件或显示某些信息,而不会干扰用户的正常工作。
notify-send 是一个实用的工具,特别适合用于脚本或自动化任务中发送提醒。

notify-send基本使用

用法:
  notify-send [选项…] <SUMMARY> [BODY] - create a notification

帮助选项:
  -?, --help                        显示帮助选项

应用程序选项:
  -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 的基本用法:

  1. 安装
    如果系统中没有安装 notify-send,可以通过包管理器进行安装。
    例如,在基于 Debian 的发行版上,可以使用以下命令安装:
    sudo apt-get install libnotify-bin
  2. 发送简单通知
    notify-send "通知标题" "通知内容"
  3. 指定通知的紧急程度
    使用 -u 选项可以设置通知的紧急程度,例如:
    notify-send -u critical "严重通知" "这是一个紧急通知"
  4. 使用自定义图标
    通过 -i 选项可以指定一个图标,例如:
    notify-send -i /path/to/icon.png "带图标的通知" "这是一个带图标的桌面通知"
  5. 指定应用程序名称
    通过 -a可设置通知应用程序名称
    notify-send -a "应用程序名称" "通知标题" "通知内容"
  6. 在通知正文中使用 HTML 标记
    notify-send 支持在通知正文中使用一些 HTML 标记,以增强视觉效果。

notify-send以root身份发送通知

在root用户下使用notify-send,可能会遇到权限问题,因为 root 用户通常没有访问桌面环境和设置相关的权限, 比如 D-Bus 会话总线(session bus)的权限等。
使用如下方法就可以以root身份发送通知到现在运行的用户桌面上。

function notify-send() {
    #Detect the name of the display in use
    local display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"

    #Detect the user using such display
    local user=$(who | grep '('$display')' | awk '{print $1}' | head -n 1)

    #Detect the id of the user
    local uid=$(id -u $user)

    sudo -u $user DISPLAY=$display DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus notify-send "$@"
}

notify-send "xxx"

参考