web-dev-qa-db-fra.com

Comment utiliser 'notify-send' pour remplacer immédiatement une notification existante?

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?

23
ish

Vous pouvez, mais vous devez utiliser un correctif libnotify pour le faire

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.

Installation du correctif libnotify-bin depuis PPA

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 

Comment utiliser les capacités de remplacement

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. 
  • Avec -p, chaque notify-send renverra un ID N (nombre/entier).
  • L'émission d'un autre 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
16
ish

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".)

10
Mark L

X-ref:
Comment forcer l'affichage d'une nouvelle notification dans notify-osd sans attendre la sortie de la précédente?

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
10
george rowell

J'ai créé un simple script python qui fonctionne presque de la même manière que notify-send mais supporte --replaces-id.

notify-send.py

web: https://github.com/phuhl/notify-send.py

Un script python pour l'envoi de notifications de poste de travail à partir du shell.

À propos

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.

Différences entre notify-send.py et notify-send

  • Dans notify-send.py -h affiche l’aide au lieu d’être le paramètre des indications. Pour les astuces, utilisez --hint.
  • Dans 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.

Installation

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

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]
                  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.

notify-send [.py] en tant qu'utilisateur root

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 "$@" &

Voir également

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.

5
user3637541