Historiquement, il y avait différentes approches pour le problème des "notifications". Il n'y a même pas de consensus sur ce qu'est une "notification". L'utilisons-nous seulement pour informer l'utilisateur qu'il s'est passé quelque chose? Attendons-nous une action de sa part? Si oui, comment les données sont-elles recueillies? Cette action peut-elle être retardée, ou l'utilisateur doit-il agir immédiatement? Pendant combien de temps peut-elle être retardée? Comment l'utilisateur est-il censé revoir toutes les actions en attente? Les réponses à toutes ces questions façonnent les solutions proposées par différentes équipes.
En fin de compte, il n'y a pas de réponse unique et définitive à votre question. Mais il existe différentes approches que vous pouvez essayer et choisir celle qui convient le mieux à votre cas spécifique.
notify-send
À un moment donné, une norme pour les notifications sur Linux a émergé. La force motrice derrière cela, si ma mémoire est bonne, était l'équipe GNOME 3. Ils ont cherché un moyen unifié pour que toutes les applications notifient l'utilisateur et ont réalisé qu'un composant de l'environnement de bureau devrait être responsable de gérer (mettre en file d'attente, afficher, recueillir des données d'entrée) toutes les notifications. Les applications envoient simplement leur notification à ce composant et espèrent que l'utilisateur la reçoive.
Vous pouvez créer ce type de notification avec l'application en ligne de commande notify-send
. Notez qu'elle ne permet volontairement pas la personnalisation. Vous ne faites que transmettre votre message et laissez le reste à l'environnement de bureau. Ce type de notifications est pris en charge par Unity (Ubuntu), GNOME 3 et KDE SC/Plasma.
osd_cat
osd_cat
est une application qui affiche le contenu d'un fichier sur la couche du serveur X. En utilisant l'option -d
, vous pouvez le faire disparaître automatiquement après un certain temps, ce qui le rend quelque peu adapté en tant qu'application de notification.
La police par défaut sera moche, mais vous pouvez l'améliorer en utilisant l'option -f
. L'argument de -f
doit être une chaîne construite par xfontsel
.
Une notification d'exemple pourrait être créée de cette manière :
echo -e "exemple\nnotification" |osd_cat -p middle -A center -d 1 -f '-*-helvetica-*-r-*-*-34-*-*-*-*-*-*-*' -O 1 -c '#fff'
Contrairement à notify-send
, vous pouvez placer votre notification n'importe où sur l'écran et vous pouvez la personnaliser un peu (sélectionnez la police et la couleur ; il n'y a pas de couleur de fond). Le principal inconvénient est qu'il s'agit spécifique à X, donc cela ne fonctionnera pas sous Mir ou Wayland.
zenity/kdialog
zenity
(pour les bureaux GTK - Unity et GNOME) et kdialog
(pour les bureaux Qt - KDE et LxQt) permettent à l'utilisateur de créer des fenêtres de dialogue simples à partir de la ligne de commande. Vous pouvez y mettre du texte, mais aussi des icônes prédéfinies, des boutons, des formulaires de saisie, des listes, des sélecteurs de fichiers ou des barres de progression. Avec un peu de travail de votre part, vous pourriez les utiliser comme moyen de notifier l'utilisateur.
zenity
prend en charge les commutateurs de ligne de commande --width=
et --height=
, mais ne fournit aucun moyen de modifier l'emplacement de la fenêtre. Personnellement, j'utilise --title=
pour donner à la fenêtre un titre personnalisé et des règles de gestion des fenêtres. Le gestionnaire de fenêtres (KWin dans mon cas) sélectionne toutes les fenêtres qui correspondent à certains critères, comme un titre contenant une chaîne, et modifie leurs propriétés. Pour les notifications, je place ces fenêtres dans le coin inférieur droit de l'écran, je retire la barre de titre de la fenêtre, les fais apparaître sur tous les bureaux virtuels et les retire de la barre des tâches.
Solution personnalisée
Si aucun des programmes ci-dessus ne répond à vos besoins, vous pouvez toujours écrire votre solution personnalisée. python fournit des liaisons à la fois à GTK et Qt et vous permettra de créer relativement facilement une interface utilisateur personnalisée. Vous aurez toutes les options de personnalisation possibles, mais cela nécessitera un travail initial pour commencer.