Comment fermer une nouvelle fenêtre Firefox à partir du terminal?

10

J'ai plusieurs instances de Firefox fonctionnant sous Ubuntu 14.04. Comment puis-je fermer la dernière fenêtre / instance ouverte depuis le terminal?

J'ai essayé d'utiliser l'alias cfct défini dans une réponse à une question connexe , mais cela n'a pas fonctionné.

sgu
la source
@chaos Je suppose que OP signifie des fenêtres, pas des onglets
Jacob Vlijm
@JacobVlijm cette réponse ferme également les fenêtres et me semble la seule solution. Étant donné que Firefox n'exécute qu'un seul processus, quel que soit le nombre de fenêtres ouvertes, vous avez besoin de cette solution dans le double. killall firefoxserait SIGTERMl'ensemble du processus, pas seulement une fenêtre.
chaos
@chaos Je ne suis pas d'accord, très bien possible, je ne suis pas à la maison, voyez si je suis assez rapide pour produire une réponse dans ma pause :)
Jacob Vlijm
1
@chaos Les doublons sont pour quand les questions sont les mêmes, pas les réponses. Un certain chevauchement est inévitable.
Seth
Qu'est-ce que cfct? Les recherches renvoient principalement cette même question.
TRiG

Réponses:

13

Pour faire une commande qui trouve la idde la dernière fenêtre, créée par Firefox(et pour la fermer), vous devrez wmctrlêtre installé:

sudo apt-get install wmctrl

La commande

Utilisez ensuite la commande:

wmctrl -ic "$(wmctrl -l | grep 'Mozilla Firefox' | tail -1 | awk '{ print $1 }')"


Explication:

wmctrl -l

répertorie toutes les fenêtres, mais une propriété importante de la commande est qu'elle répertorie les fenêtres dans l'ordre dans lequel elles ont été créées .

Donc:

wmctrl -l | grep 'Mozilla Firefox' | tail -1 | awk '{ print $1 }'

volonté:

  • lister toutes les fenêtres:

    wmctrl -l
    
  • trouver ceux (les lignes) avec 'Mozilla Firefox' dans leur nom:

    grep 'Mozilla Firefox'
    
  • trouver le dernier (qui est aussi le dernier créé):

    tail -1
    
  • extraire la première chaîne de la ligne (qui est la fenêtre -id):

    awk '{ print $1 }'
    

La commande:

wmctrl -ic

va alors tuer la fenêtre Firefox la plus récente par son identifiant (gracieusement).

Ou encore plus fiable:

Bien que la commande ci-dessus fonctionne bien dans pratiquement tous les cas, il y a une petite chance de conflits de noms, si par exemple une autre fenêtre existe avec "Mozilla Firefox" dans son nom, mais pas une fenêtre de Firefox(peu probable, mais quand même).

Ce qui devrait fonctionner "waterproof" est donc d'identifier les fenêtres dans la liste des fenêtres (en utilisant wmctrl -lp) par le pid de firefox, au lieu de la chaîne dans le nom de la fenêtre:

wmctrl -ic "$(wmctrl -lp | grep "$(pgrep firefox)" | tail -1 | awk '{ print $1 }')"

Comme vous pouvez le voir, dans cette commande,

wmctrl -l | grep 'Mozilla Firefox'

produisant les lignes contenant 'Mozilla Firefox', est remplacée par:

wmctrl -lp | grep "$(pgrep firefox)"

produire les lignes contenant le pid de firefox (en sortie de pgrep firefox)

Jacob Vlijm
la source
2

Pour fermer une fenêtre (également avec de nombreux onglets ouverts), utilisez cette commande:

wmctrl -a firefox; xdotool key Ctrl+Shift+w

Notez que wmctrlet xdotooldoit être installé:

$ sudo apt-get install wmctrl xdotool

Voir aussi cette réponse: Fermer l'onglet actuel de Firefox à l'aide du terminal .

Ma réponse est un peu modifiée, car Ctrl+ Shift+ wferme une fenêtre Firefox.


Pour tous les raccourcis, voir Raccourcis clavier de Firefox .

le chaos
la source