Skip to main content

A python script for sending desktop notifications from the shell.

About

Libnotify is part of many scripts in the Linux world. It utilizes many of the specified features of the Desktop Notifications Specification and makes them accessible to shell-scripts. It does not however allow to replace an existing notification with the replaces-id. This is a known bug since 2008 and has a patch since 2012. The patch is still not upstream though (2018).

This python script utilizes the notify2 package and exposes the functionality to the shell.

Differences between notify-send.py and notify-send

  • In notify-send.py -h shows help instead of being the parameter for hints. For hints use --hint.

  • In notify-send.py -r ID and notify-send.py --replaces-id ID exists. In order to replace a notification call notify-send.py with the ID that was returned by the notification to be replaced.

  • notify-send.py returns the ID of the newly created notification.

  • notify-send.py --replaces-process NAME exists. Every notification that gets created with the same NAME will replace every notification before it with the same NAME. If called with this parameter notify-send.py might block, best to be called with a trailing &.

  • notify-send.py has action-support (buttons). Try notify-send.py "Yes or no?" --action ok:OK cancel:Cancel

Installation

Requires python 3.

From PyPI:

pip install notify-send.py

From repo:

git clone https://github.com/phuhl/notify-send.py
cd notify-send.py
pip install .

Usage

$ notify-send.py -h
usage: notify-send.py [-h] [-u LEVEL] [-t TIME] [-a APP_NAME]
                      [-i ICON[,ICON...]] [-c TYPE[,TYPE...]]
                      [--hint [TYPE:NAME:VALUE ...]] [-r ID]
                      [--replaces-process NAME] [--action [KEY:NAME ...]]
                      [--dontQuitOnAction]
                      SUMMARY [BODY]

positional arguments:
  SUMMARY               Summary of the notification. Usage of \n and \t is
                        possible.
  BODY                  Body of the notification. Usage of \n and \t is
                        possible.

optional arguments:
  -h, --help            show this help message and exit
  -u LEVEL, --urgency LEVEL
                        Specifies the urgency level (low, normal, critical).
  -t TIME, --expire-time TIME
                        Specifies the timeout in milliseconds at which to
                        expire the notification.
  -a APP_NAME, --app-name APP_NAME
                        Specifies the app name for the icon
  -i ICON[,ICON...], --icon ICON[,ICON...]
                        Specifies an icon filename or stock icon to display.
  -c TYPE[,TYPE...], --category TYPE[,TYPE...]
                        Specifies the notification category.
  --hint [TYPE:NAME:VALUE ...]
                        Specifies basic extra data to pass. Valid types are
                        int, double, string, boolean and byte.
  -r ID, --replaces-id ID
                        Specifies the id of the notification that should be
                        replaced.
  --replaces-process NAME
                        Specifies the name of a notification. Every
                        notification that gets created with the same NAME will
                        replace every notification before it with the same
                        NAME.
  --action [KEY:NAME ...]
                        Specifies actions for the notification. The action
                        with the key "default" will be dispatched on click of
                        the notification. Key is the return value, name is the
                        display-name on the button.
  --dontQuitOnAction    Keeps running until the notification has been closed,
                        instead of stopping after the first action was
                        received.

notify-send[.py] as root user

In order to display notifications, even if libnotify or notify-send.py is used from the root user this script is helpful. You need to customize it with your username and userid (which probably is 1000 but can be found out by running cat /etc/passwd | grep <username>).

notify-send-from-root.sh:

#!/bin/bash
USERNAME=<your username here>
USERID=1000

export XAUTHORITY=/home/$USERNAME/.Xauthority
export DISPLAY=:0
export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USERID/bus

if [ "$(/usr/bin/id -u)" != "$USERID" ] ; then
    sudo -u $USERNAME XAUTHORITY=/home/$USERNAME/.Xauthority DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USERID/bus /usr/bin/notify-send.py "$@"
else
    /usr/bin/notify-send.py "$@"
fi

Examples (Volume and Brightness pop-ups)

See also

Also take a look at my notification-daemon inspired by Dunst, but with several improvements, including the possibility of a transparent background and a notification center that stores notifications.

Metadata

Release files for notify-send.py 1.2.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for notify-send.py 1.2.7
File Size Uploaded
notify-send.py-1.2.7.tar.gz 10.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for notify-send.py 1.2.7
File Interpreter ABI Platform
notify_send.py-1.2.7-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 23.4 kB

Release files / notify-send.py-1.2.7.tar.gz

Download URL notify-send.py-1.2.7.tar.gz
Size 10.8 kB
Tags Source
SHA-256 checksum
How to use checksums
f68959449f6ad66c75846a946a5e97765657eafe6efc7d4ffd4a95622c3d9663
BLAKE2b-256 checksum
How to use checksums
f744edf5578a7e3d79e30505286dab30f29815b26ca33a5a5c8936468e6b406e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.25.1

Release files / notify_send.py-1.2.7-py2.py3-none-any.whl

Download URL notify_send.py-1.2.7-py2.py3-none-any.whl
Size 12.7 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
790525227ce16481b9fccc4034cb989cf9d8e0825108dbbcb04efd6c15cd3729
BLAKE2b-256 checksum
How to use checksums
5542848ed79ef52f2d69e9479647e1ed4736031a76be593ae49e65f8fc274670
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.25.1

Release history Release notifications | RSS feed

This release

1.2.7 This release

2 release files

1.2.6

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page