Comment exécuter une commande de terminal à chaque fermeture de la fenêtre Firefox

8

J'ai besoin d'exécuter ceci:

rm -rf ~/.wine-pipelight/*;
rm -rf ~/.wine-pipelight/./.*;
cp -a ~/viewright_backup/. ~/.wine-pipelight

chaque fois que la fenêtre Firefox se ferme. Mais pas nécessairement quand toutes les fenêtres se sont fermées, mais sur chaque fenêtre qui est fermée. Par exemple, si j'ai une fenêtre Firefox et une fenêtre pop-up Firefox. Si je ferme au moins une fenêtre, je veux exécuter cette commande. Est-ce possible? Merci!

Dusan Milosevic
la source
1
Pourquoi veux-tu faire cela? Il serait probablement plus facile de résoudre le problème que d'utiliser une telle solution de contournement. Quelle version de Pipelight et Wine-Compholio utilisez-vous?
Michael Müller
J'ai suivi ce toutorial. c'est en serbe, mais il y a des codes utilisés dans la description.
Dusan Milosevic
C'est l'un des services de la société haut débit de Serbie qui n'est pas officiellement pris en charge sur Linux.
Dusan Milosevic

Réponses:

11

La seule façon dont je peux penser n'est pas très élégante. Vous pouvez avoir un script exécuté en arrière-plan qui compte le nombre de fenêtres Firefox ouvertes chaque seconde et lance votre commande si ce nombre change. Quelque chose comme:

#!/usr/bin/env bash


## Run firefox
/usr/bin/firefox &

## Initialize the variable to 100
last=100;

## Start infinite loop, it will run while there
## is a running firefox instance.
while pgrep firefox >/dev/null;
do
    ## Get the number of firefox windows    
    num=$(xdotool search --name firefox | wc -l)

    ## If this number is less than it was, launch your commands
    if [ "$num" -lt "$last" ]
    then
        rm -rf ~/.wine-pipelight/*;
        ## I included this since you had it in your post but it
        ## does exactly the same as the command above.
        rm -rf ~/.wine-pipelight/./.*;
        cp -a ~/viewright_backup/. ~/.wine-pipelight      
    fi

    ## Save the number of windows as $last for next time
    last=$num

    ## Wait for a second so as not to spam your CPU.
    ## Depending on your use, you might want to make it wait a bit longer,
    ## the longer you wait, the lighter the load on your machine
    sleep 1

done

Enregistrez le script ci-dessus sous firefox, mettez-le dans votre ~/binrépertoire et rendez-le exécutable chmod a+x ~/bin/firefox. Comme Ubuntu s'ajoute ~/binà votre $PATHpar défaut et l'ajoute avant tout autre répertoire, l'exécution firefoxlancera ce script au lieu de l'exécutable firefox normal. Maintenant, parce que le script se lance /usr/bin/firefox, cela signifie que votre Firefox normal apparaîtra, comme vous vous y attendez, uniquement avec le script en cours d'exécution également. Le script se fermera dès que vous fermerez Firefox.

AVERTISSEMENT:

Ce script est

  1. Pas élégant, il doit être exécuté comme une boucle infinie en arrière-plan.
  2. Nécessite xdotool, installez-le avecsudo apt-get install xdotool
  3. Ne fonctionne pas pour les onglets, uniquement pour les fenêtres.
terdon
la source
belle solution
kenn
Merci! Je ne le ferai pas démarrer automatiquement, mais plutôt le faire démarrer lorsque Firefox démarre. Merci beaucoup, je vais l'essayer.
Dusan Milosevic
@terdon Étant donné que je prévois de le faire démarrer lorsque Firefox démarre, est-il possible de le faire s'arrêter lorsque Firefox est fermé. Peut - être quelque chose comme: while ["0" -lt "$(xdotool search --name firefox | wc -l)" ]. Je ne sais pas si sintax a raison mais vous obtenez le point ... Pourriez-vous le réécrire pour remplir cette condition? Merci!
Dusan Milosevic
@DusanMilosevic voir la réponse mise à jour. Je l'ai réécrit pour que le script lui-même lance Firefox et ne s'exécute que tant qu'au moins une instance de Firefox est en cours d'exécution.
terdon