logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 21-10-2024 10:45:51

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

[notify-send] Notification contrôlée par un script [Résolu]

Hello,

J'ai un script qui travaille en tâche de fond.
J'aimerais y introduire une notification qui resterait affichée tant que l'action en cours du script n'est pas terminée (ou que l'utilisateur l'ait acquittée).
Ne connaissant pas la durée (variable) de l'action, je ne peux pas utiliser de timer.
Je sais lancer une notification permanente. Mais je ne sais pas la fermer sans cliquer dessus.

En fait, j'ai bien un moyen : tuer le démon notifyd  et le relancer !
Mais quelle propreté !

Si vous avez des conseils ou même une solution …
merci.gif

Edit:
Pour l'instant j'ai une notification "normale" en début des actions de mon script.
Et une notification permanente en fin de script, au moins je sais qu'il a fini smile
Mais pour les actions longues, j'aimerais que la notification reste tant que je ne l'ai pas cliqué (facile) et qu'elle disparaisse à la fin de l'action de mon script (le problème est là).

Dernière modification par Tawal (21-10-2024 17:11:49)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#2 21-10-2024 12:49:03

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : [notify-send] Notification contrôlée par un script [Résolu]

hello
Avec une barre de progression qui serait mise à jour pendant l’exécution du script peut être?
j'avais ça dans mes notes
https://ubuntuforums.org/showthread.php?t=1776148

notify-send "test" -h int:value:55 -h string:synchronous:volume; sleep 2;  notify-send  "test" -h int:value:88 -h string:synchronous:volume


je sais pas si tu peux donner l'état d'avancement avec une variable dans ton script
peut être pas possible ?

edit: peut être faire un truc en récupérant le Pid du script , faire une boucle tant que le Pid est présent afficher la notification

javais vu un script sur la doc arch pour une notification en continu

while true; do
  date=$(date)
  notify-send "$date" -h string:x-canonical-private-synchronous:my-notification
  sleep 1
done
 

Dernière modification par Croutons (21-10-2024 13:36:36)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

En ligne

#3 21-10-2024 15:46:08

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : [notify-send] Notification contrôlée par un script [Résolu]

Merci Croutons, mais ce que tu donnes concerne l'envoi de données vers la notification.
Mais j'ai creusé le sujet.

Et j'ai trouvé une solution.
On reste dans de "l'envoi de données vers la notification".
En fait, on peut récupérer le numéro de la notification lancée avec l'option -p,
on peut la rendre permanente avec l'option -t 0

n="$(notify-send -pt 0 "Test")"


La notification apparaît et reste tant que je ne clique pas dessus.
Je peux en changer le message avec l'option -r et le numéro de la notification n :

notify-send -r "$n" -t 0 "Réussi !"


La notification reste et le message change.

Enfin, pour fermer la notification, je lui envoie un dernier message avec l'option -t 1 (1ms de timing) :

notify-send -r "$n" -t 1 "Fini."



Edit:
Il faut maintenir l'option -t 0 dans toutes les commandes pour garder la notification permanente.

Edit2: Effet secondaire.
Si je ferme la notification alors que mon script doit encore la modifier :
Aucun problème !
La prochaine tentative d'envoi vers la notification fermée va créer une nouvelle notification avec le contenu voulu.
Cette nouvelle notification portera le numéro de celle d'origine (option -r "$n").
Donc les notifications à venir du script seront quand même affichées.
Et pas d'interaction avec les notifications des autres logiciels/scripts car le numéro affecté à la notification juste ouverte est toujours croissant même si la précédente a été fermée.


EDIT4: Je ne passe pas en [Résolu]
Car quand je lis ça, je me dis qu'il y a un moyen d'envoyer un signal de clôture.
Mais comment ? (edit5: avec gdbus peut-être ?)

9.1.3. org.freedesktop.Notifications.CloseNotification

void org.freedesktop.Notifications.CloseNotification (UINT32 id);

Causes a notification to be forcefully closed and removed from the user's view. It can be used, for example, in the event that what the notification pertains to is no longer relevant, or to cancel a notification with no expiration time.

The NotificationClosed signal is emitted by this method.

If the notification no longer exists, an empty D-BUS Error message is sent back.

source:https://www.galago-project.org/specs/no … tification

Edit6: Hou là !
Peut-être une solution n'utilisant pas notify-send mais gdbus : https://superuser.com/questions/1592674 … 24#1593924

Dernière modification par Tawal (21-10-2024 16:55:31)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#4 21-10-2024 17:07:47

Tawal
Membre
Distrib. : Debian Stable à jour
Noyau : amd64
(G)UI : Xfce
Inscription : 25-02-2021

Re : [notify-send] Notification contrôlée par un script [Résolu]

Double post mais c'est celui de la résolution !

Alors on lance une notification permanente (ou non) en récupérant son numéro :

n="$(notify-send -p -t 0 "Titre" "Message")"


Puis quand on veut la fermer :

gdbus call --session \
           --dest org.freedesktop.Notifications \
           --object-path /org/freedesktop/Notifications \
           --method org.freedesktop.Notifications.CloseNotification \
           "$n"


Ça fonctionne smile
Au moins, j'ai appris à utiliser ces fonctions org.freedesktop tongue

Là, je passe en [Résolu]

Dernière modification par Tawal (21-10-2024 17:08:09)


Comme la science n'est pas infuse, elle se diffuse.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

Pied de page des forums