Lorsque j’utilise notify-send
pour afficher une notification sur le bureau, puis l’utilise à nouveau pour afficher une notification différente, j’ai remarqué que le deuxième ne montre que après le premier a disparu.
Existe-t-il un moyen d'obtenir que notify-send
remplace immédiatement une notification existante par une autre?
notify-send
n'a pas la capacité de remplacer les notifications existantes avant leur expiration (ou leur disparition). Ceci est un bug conn . Cependant, un commentateur sur le rapport de bogue a posté un correctif pour le corriger.
J'ai créé une version corrigée du paquet libnotify-bin qui permet les remplacements dans mon PPA. Actuellement, c'est pour Ubuntu 12.04 seulement, mais si vous en avez besoin pour toute autre version actuellement supportée, merci de poster un commentaire et je ferai de mon mieux pour le rendre disponible.
Pour installer, ouvrez un terminal et:
Sudo apt-add-repository ppa: izx/askubuntu Sudo apt-get update Sudo apt-get install libnotify-bin
Le notify-send
corrigé inclut deux nouveaux commutateurs, -p
(ou - print-id), et -r
(ou - replace-id). Le --help
les décrit comme suit:
-p, --print-id Affiche l'ID de notification. -r, --replace-id = REPLACE_ID L'ID de la notification à remplacer.
-p
, chaque notify-send
renverra un ID N (nombre/entier).notify-send
avec -r N
remplacera la notification précédente immédiatement.Par exemple, pour bash, vous pouvez enregistrer l'ID de notify-send -p ...
avec:
NID=$(notify-send -p "MESSAGE-1")
puis remplacez-le par:
notify-send -r $NID "MESSAGE-2"
Vous pouvez utiliser récursivement les deux - p et - r dans un script, à condition que la variable - r soit initialisée à 0 au début.
Voici un script simple qui affiche les notifications allant de 0 à 100 toutes les demi-secondes:
#!/bin/bash
NID = 0
pour i dans {0..100..10} faire NID = $ (notifier-envoyer -p -r $ NID $ i) dormir 0,5 Fait
Vous pouvez utiliser l'indicateur "synchrone" pour créer une notification de "confirmation" qui remplacera les notifications de confirmation précédentes. Par exemple:
notify-send "Message" -h string:x-canonical-private-synchronous:anything
L'indicateur "x-canonical-private-synchrone" est spécifié dans ce document . Pour spécifier un indice, utilisez -h type:name:value
. Le type ici est string
, name est x-canonical-private-synchronous
et il semble que la valeur puisse être celle que vous souhaitiez.
Donc, si votre première notification est créée avec cet indice et , la seconde l'est également, la seconde remplacera immédiatement la première. (Voir Animations et durées dans la documentation, dans la colonne "bulles de confirmation".)
sans correctifs, vous pouvez simplement faire
#!/bin/bash
for i in {0..100..10}
do
killall notify-osd
notify-send "testing" $i
sleep 1
done
Signet:
Comment utiliser 'notify-send' pour remplacer immédiatement une notification existante?
Envoie une erreur notify-osd (2592): opération non autorisée. Qu'est-ce que ça veut dire?
Cela peut signifier que les privilèges sont inadéquats, nécessitant:
Sudo killall notify-osd
J'ai créé un simple script python qui fonctionne presque de la même manière que notify-send mais supporte --replaces-id
.
web: https://github.com/phuhl/notify-send.py
Un script python pour l'envoi de notifications de poste de travail à partir du shell.
Libnotify fait partie de nombreux scripts du monde Linux. Il utilise de nombreuses fonctionnalités spécifiées dans la spécification de notifications de bureau et les rend accessibles aux scripts Shell. Cela pas permet toutefois de remplacer une notification existante par le replaces-id
. Ceci est connu bug depuis 2008 et a un correctif depuis 2012. Le correctif n'est toujours pas en amont (2018).
Ce script python utilise le package notify2 et expose cette fonctionnalité au shell.
notify-send.py -h
affiche l’aide au lieu d’être le paramètre des indications. Pour les astuces, utilisez --hint
.notify-send.py -r ID
et notify-send.py --replaces-id ID
existe. Pour remplacer une notification, appelez notify-send.py
avec l'ID renvoyé par la notification à remplacer.notify-send.py
renvoie l'ID de la notification nouvellement créée.notify-send.py --replaces-process NAME
existe. Chaque notification créée avec le même nom remplace toutes les notifications qui la précédaient par le même nom. Si appelé avec ce paramètre, notify-send.py
peut bloquer, il est préférable d'appeler avec un &
de fin.Nécessite python3.
git clone https://github.com/phuhl/notify-send.py
cd notify-send.py
Sudo pip install notify2
Sudo python setup.py install
$ 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]
SUMMERY [BODY]
positional arguments:
SUMMERY
BODY
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 typesare
int, double, string 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 process that should take care
of replacing notifications for this process.
Pour afficher les notifications, même si libnotify ou
notify-send.py
est utilisé par l'utilisateur root, ces deux scripts sont utiles.
#!/bin/bash
username=<your username here>
if [ "$(id -u)" != "1000" ] ; then
Sudo -u $username DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send.sh "$@"
else
notify-send.sh "$@"
fi
Avec notify-send.sh
comme ceci:
#!/bin/bash
notify-send.py "$@" &
Jetez également un coup d'œil à mon notification-daemon inspiré par Dunst , mais avec plusieurs améliorations, notamment la possibilité d'un fond transparent et d'un centre de notification qui stocke les notifications.