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)
Volume control-pop-ups: https://github.com/phuhl/linux_notification_center#example-volume-indicator
Brightness control-pop-ups: https://github.com/phuhl/linux_notification_center#example-brightness-indicator
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)
| File | Size | Uploaded | |
|---|---|---|---|
| notify-send.py-1.2.7.tar.gz | 10.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|