4 votes

Est-il possible d'être notifié avec NotifyOSD lorsque processus spécifié se termine?

Je dois admettre être un utilisateur assidu de Firefox, donc quand je termine FF, je dois toujours vérifier avec le moniteur de système si son processus est vraiment terminé avant d'éteindre Ubuntu. Sinon, j'obtiendrai un écran de "restauration de session" lors de la prochaine session car Ubuntu force l'arrêt de FF lors de la fermeture.

J'ai eu l'idée de surveiller FF, et lorsque le processus est terminé, d'envoyer une commande à NotifyOSD pour me notifier que FF est fermé et qu'il est sûr d'éteindre Ubuntu.

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

Cordialement et merci d'avance! Ruessel

PS : J'utilise Ubuntu 14.04 LTS

1voto

DK Bose Points 37534

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 simple dans ~/bin avec le contenu suivant :

#!/bin/bash
if 
    pgrep firefox
then       
    notify-send  --urgency=critical "Firefox est-il toujours en cours d'exécution ?"
else 
    notify-send  "Aucun processus Firefox n'est en cours d'exécution"
    zenity --question --text="Continuer l'arrêt ?"
  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 le nom de fx-check-n-shutdown. Pas besoin de suffixe.

Ensuite, cliquez avec le bouton droit sur fx-check-n-shutdown dans votre gestionnaire de fichiers. Sélectionnez Propriétés et rendez le fichier "exécutable" pour vous.

Installez libnotify-bin depuis le centre de logiciels 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 Entrée. Vous devriez voir une notification vous demandant "Firefox est-il toujours en cours d'exécution ?" ou "Aucun processus Firefox n'est en cours d'exécution".

Dans le dernier cas où aucun processus Firefox n'est en cours d'exécution, la notification disparaîtra rapidement d'elle-même (à condition que votre curseur de souris ne se trouve pas sur la zone occupée par la 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 fermer la notification vous-même en cliquant dessus, puis 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 créer leurs propres notifications.

Ce que fait le script :

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

  • Si un processus Firefox est en cours, vous êtes notifié. 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 réellement exécutée en exécutant cat /proc/cmdline où vous utiliserez le PID réel à la place de .

  • Si aucun processus impliquant Firefox n'est ouvert, vous êtes brièvement notifié et une fenêtre de fermeture Zenity s'ouvre pour vous demander 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 devoir l'exécuter via un terminal. Comment configurer le raccourci dépend de votre version particulière d'Ubuntu. Pour Ubuntu 14.04, les instructions se trouvent ici : https://help.ubuntu.com/14.04/ubuntu-help/keyboard-shortcuts-set.html

1voto

Sergiy Kolodyazhnyy Points 97292

Il est possible de le faire. On pourrait écrire un script d'enrobage, qui lancera un processus et capturera son PID et surveillera ce PID. Par exemple, j'ai écrit un petit script ci-dessous, qui si appelé comme monitor_process.sh firefox lancera firefox et attendra jusqu'à ce qu'il se ferme.

#!/bin/bash
nohup $@ &> /dev/null &
PID=$!
while ps --no-headers  -p $PID > /dev/null
do
   echo $PID
   : #pas d'opération
   sleep 0.25
done

notify-send "$@" est sorti

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

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

notify-send "$@" est sorti

La manière dont je l'ai faite ci-dessus est en obtenant les PID de tous les processus contenant la chaîne "firefox", mais en ignorant le PID du script (parce que monitor_process.sh firefox sera inclus dans la liste, et nous ne voulons pas cela - le script ne se terminera pas s'il se surveille constamment).

Bien sûr, le script se terminera une fois qu'il aura envoyé la notification et pourra être redémarré 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 de l'utiliser à la fois comme lanceur et moniteur.

Alternativement, nous pourrions ajouter une boucle while extérieure qui surveillera si firefox est en cours d'exécution, et commencera à surveiller uniquement s'il est en cours d'exécution; sinon, commencez à surveiller.

#!/bin/bash

start_monitoring()
{

while  pgrep -f "$@" | grep -v $SELF &> /dev/null
do
   : #pas d'opération
   sleep 0.25
done
notify-send "$@" est sorti
}

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, donc vous pouvez fermer firefox pendant la session, il vous en informera, et continuera d'attendre jusqu'à ce qu'un nouveau apparaisse, et commencera à surveiller celui-ci.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X