Est-il possible d'afficher une notification à partir d'un script bash sous Ubuntu?

103

La plupart des applications peuvent afficher des notifications bien formatées sur les événements qui apparaissent dans le coin supérieur droit de l'écran. Je suis sur le point d'écrire un script bash qui fera un traitement long des fées en arrière-plan et je veux vraiment savoir quand il sera fini. Comment puis-je afficher cette belle notification à partir d'un script bash?

vava
la source

Réponses:

124

Si vous utilisez le nouveau système de notification de Jaunty, vous souhaitez que la commande notify-send

notify-send - a program to send desktop notifications

SYNOPSIS

With notify-send you can sends desktop notifications to the user via
a notification daemon from the command line.  These notifications can be
used to inform the user about an event or display some form of information
without getting in the user's way.

OPTIONS

-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.
-i, --icon=ICON[,ICON...]
    Specifies an icon filename or stock icon to display.
-c, --category=TYPE[,TYPE...]
    Specifies the notification category.
Nagul
la source
4
Merci, je viens de le trouver moi-même :) apt-get install libnotify-bin doit être exécuté avant de l'obtenir.
vava
Comment l'utilisateur root envoie-t-il un message de crons, init.d, etc.?
Lance Caraccioli
6
Exemple: notifier-envoyer le test "Hello World"
Thaha kp
3
Le paramètre --expire-time ne fonctionne pas sur Ubuntu grâce à cette "fonctionnalité" (bogue). bugs.launchpad.net/ubuntu/+source/notify-osd/+bug/390508
axiopistie
J'ai trouvé que notify-sendc'est inhibé pendant la lecture vidéo / audio. Bien que ce soit un cas d'utilisation valide, si vous souhaitez toujours les voir, vous devez ajouter --urgency = critical .
ccpizza
29

Trouvé d'une autre manière, à travers la zenity

echo 'message:hi' | zenity --notification --listen

(Cela a aussi l'avantage d'être déjà installé sur Ubuntu.)

vava
la source
J'aime Zenity dans la mesure où il prend en charge les interactions utilisateur pour les dialogues (contrairement à notify-send)
Waffle's Crazy Peanut
12

Il y a aussi xmessage qui va ouvrir une fenêtre, donc ça devrait marcher sur n'importe quel système X11.

Pro: Il permet également d'inviter de manière interactive l'utilisateur à l'aide de boutons.

Con: Comme toute alerte pop-up, il généralement reçoit le focus, donc si vous êtes au milieu de le taper peut disparaître avant de lire le message.

NVRAM
la source
4
Inconvénient: Cela semble vraiment moche, et c'est aussi une très petite fenêtre qui n'est pas toujours évidente pour l'utilisateur. Quoi qu'il en soit, il est universel cependant. :)
Nik Reiman
xmessage ne fonctionne pas dans Fedora cependant. Ce n'est pas installé par défaut.
Abhay Mittal
Il n'est pas disponible dans l'installation Xorg par défaut d'Arch Linux.
friederbluemle
Vous pouvez également obtenir une fenêtre contextuelle avec les boutons "OK" et "Annuler" via notify-send --expire-time=0 "Hello World"ou notify-send -t 0 "Hello world". Sinon, l' -toption est ignorée en raison de "décisions de conception" stupides: askubuntu.com/questions/110969/notify-send-ignores- timeout
Gabriel Staples
Je ne pouvais pas le prendre; J'ai dû écrire ma propre réponse :) superuser.com/a/1310142/425838
Gabriel Staples
11

Pour les utilisateurs de KDE:

$ kdialog --title "Long process completed!" --passivepopup "This popup will disappear in 5 seconds" 5 &
Kolypto
la source
Est-il possible de définir une icône pour la notification?
Malabarba
5

Notification contextuelle qui se ferme automatiquement après 10 secondes:

notify-send "Hello world"

Source: https://superuser.com/a/31919/425838

Fenêtre contextuelle avec des boutons pour cliquer:

[la fenêtre ne fait pas l'autofocus]

notify-send -t 0 "Hello world"

Source: moi-même; note: -t est ignoré pour toutes les valeurs sauf 0 - quelle stupidité . :(


OU
[la fenêtre est mise au point automatiquement]

zenity --info --title "Hello" --text "World"

Source: https://askubuntu.com/a/804475/327339


OU

[MON FAVORI, puisque la fenêtre se ferme automatiquement après le délai spécifié --timeouten secondes]

zenity --info --title "Hello" --text "World" --timeout=2

Source: moi-même en lisant les pages de manuel: man zenity


OU
[super laid]

xmessage 'hello world'

Source: http://www.linux-commands-examples.com/xmessage

Gabriel Staples
la source
3

Il existe une solution multiplateforme appelée Yfiton :

$ yfiton -n desktop -Pmessage="Lunch time!" -Pposition=TOP_RIGHT
Laurent
la source
2

Dans un script shell, vous pouvez également appeler l'utilitaire osd_cat à partir de libxosd.

geek
la source
1
C'est un peu différent car il n'utilise pas les notifications du bureau Ubuntu.
Vava
Oui, c'est une alternative que vous pouvez utiliser avec n'importe quelle distribution Linux et n'importe quel WM / DE.
Geek