web-dev-qa-db-fra.com

Est-il possible de notifier avec NotifyOSD lorsqu'un processus spécifié se termine?

Je dois admettre que je suis un gros utilisateur de Firefox, donc quand je termine FF, je dois toujours vérifier avec le moniteur système si son processus est vraiment terminé avant d'arrêter Ubuntu. Sinon, j'obtiendrai un "écran de session de restauration" lors de la prochaine session en raison de la fermeture forcée d'Ubuntu lors de l'arrêt.

Alors j'ai eu l'idée de surveiller FF, et lorsque le processus est terminé pour envoyer une commande à NotifyOSD, eh bien, informez-moi que FF est arrêté et qu'il est sûr d'arrêter Ubuntu.

Comme je suis assez nouveau sur Ubuntu, je n'ai aucune idée de comment faire, ni même si c'est possible ... Un conseil par où commencer?

Cordialement et merci d'avance! Ruessel

PS: je lance Ubuntu 14.04 LTS

4
ruessel

Cela fonctionne pour moi ...

Créez un dossier appelé bin dans votre répertoire personnel si un tel dossier n'existe pas déjà.

Créez un fichier texte brut dans ~/bin avec le contenu suivant:

#!/bin/bash
if 
    pgrep firefox
then       
    notify-send  --urgency=critical "Is Firefox still running?"
else 
    notify-send  "No Firefox process is running"
    zenity --question --text="Proceed to shutdown?"
  if [ $? = 0 ]; then
        dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
  else
    exit
  fi
fi

Enregistrez-le sous fx-check-n-shutdown. Pas besoin de suffixe.

Cliquez ensuite avec le bouton droit sur fx-check-n-shutdown depuis votre gestionnaire de fichiers. Sélectionnez Properties et rendez le fichier "exécutable" pour vous.

Installer libnotify-bin à partir du centre logiciel ou en exécutant Sudo apt-get install libnotify-bin dans un terminal.

Une fois cela fait, tapez fx-check-n-shutdown dans votre terminal et appuyez sur enter. Vous devriez voir une notification vous demandant "Est-ce que Firefox fonctionne toujours?" ou que "Aucun processus Firefox n'est en cours d'exécution".

Dans ce dernier cas où aucun processus Firefox n'est en cours d'exécution , la notification disparaîtra bientôt d'elle-même (à condition que le pointeur de votre souris ne dépasse pas la zone occupée par le notification).

Vous verrez également une petite fenêtre vous demandant si vous souhaitez arrêter ou non.

Si Firefox est toujours en cours d'exécution, vous devrez ignorer la notification vous-même en cliquant sur la notification et vous pourrez alors vous assurer que vous avez bien fermé Firefox.

Ce que vous avez fait, c'est de créer un script appelé fx-check-n-shutdown.
Vous l'avez rendu exécutable.
Vous avez installé libnotify-bin un programme qui permet aux utilisateurs ordinaires de faire leurs propres notifications.

Ce que fait le script:

  • Il vérifie si un processus avec "firefox" est en cours d'exécution.

  • Si un processus Firefox est en cours d'exécution, vous en êtes informé. Vous pouvez ensuite ouvrir un terminal et exécuter pgrep firefox pour obtenir l'ID du processus (PID) et utiliser ce PID pour obtenir plus de détails sur la commande en cours d'exécution en exécutant cat /proc/<pid>cmdline où vous utiliserez le PID réel au lieu de <pid>.

  • Si aucun processus impliquant Firefox n'est ouvert, vous en êtes brièvement informé et une fenêtre d'arrêt Zenity s'ouvre vous demandant si vous souhaitez vraiment arrêter ou non.

Une fois satisfait, vous pouvez configurer un raccourci clavier pour lancer fx-check-n-shutdown au lieu de l'exécuter via un terminal. La façon dont vous configurez le raccourci dépend de votre saveur particulière d'Ubuntu. Pour Ubuntu 14.04, les instructions sont ici: https://help.ubuntu.com/14.04/ubuntu-help/keyboard-shortcuts-set.html

1
DK Bose

Il est possible de le faire. On pourrait écrire un script wrapper, qui lancera un processus et capturera son PID et surveillera ce PID. Par exemple, j'ai écrit un petit script ci-dessous, qui s'il est appelé comme monitor_process.sh firefox lancera firefox et attendra sa sortie.

#!/bin/bash
Nohup $@ &> /dev/null &
PID=$!
while ps --no-headers  -p $PID > /dev/null
do
   echo $PID
   : # no-op
   sleep 0.25
done

notify-send "$@ exited"

Bien sûr, il peut y avoir plusieurs instances de Firefox, nous voulons donc avoir quelque chose comme monitor_process.sh firefox et il surveillera toutes les fenêtres de Firefox, jusqu'à ce qu'elles se terminent toutes.

#!/bin/bash
SELF=$$
while  pgrep -f firefox | grep -v $SELF > /dev/null
do
   : # no-op
   sleep 0.25
done

notify-send "$@ exited"

La façon dont je l'ai fait ci-dessus consiste à obtenir les PID de tous les processus qui contiennent la chaîne "firefox", mais en ignorant le PID du script (car monitor_process.sh firefox sera inclus dans la liste, et nous ne le voulons pas - le script ne se fermera pas s'il se surveille constamment).

Bien sûr, le script se fermera une fois qu'il enverra une notification et peut nécessiter un redémarrage si vous rouvrez une fenêtre après sa fermeture, il serait donc probablement plus facile d'ajouter également Nohup $@ &> /dev/null & à la deuxième ligne du script et utilisez-le à la fois comme lanceur et moniteur.

Alternativement, nous pourrions ajouter une boucle while externe qui surveillera si firefox est en cours d'exécution, et commencera la surveillance uniquement si elle est en cours d'exécution; sinon, commencez la surveillance.

#!/bin/bash

start_monitoring()
{

while  pgrep -f "$@" | grep -v $SELF &> /dev/null
do
   : # no-op
   sleep 0.25
done
notify-send "$@ exited"
}

main()
{
local SELF=$$
while true
do
  pgrep -f "$@" | grep -v $SELF > /dev/null 
  [ $? -eq 0 ] && start_monitoring "$@"
sleep 0.25
done
}
main "$@"

Et le code ci-dessus fonctionnera pour plusieurs instances de firefox et plusieurs fermetures et réouvertures, de sorte que vous pouvez fermer firefox pendant la session, il vous avertira et continuera d'attendre jusqu'à ce qu'un nouveau apparaisse, et commencera à surveiller cela.

1