Jak zamknąć nowe okno przeglądarki Firefox z terminalu?

10

Mam wiele wystąpień przeglądarki Firefox działającej w systemie Ubuntu 14.04. Jak mogę zamknąć ostatnio otwarte okno / instancję z terminala?

Próbowałem użyć aliasu cfct zdefiniowanego w odpowiedzi na powiązane pytanie , ale to nie zadziałało.

sgu
źródło
@chaos Zakładam, że OP oznacza okna, a nie zakładki
Jacob Vlijm
@JacobVlijm ta odpowiedź również zamyka okna i wydaje mi się jedynym rozwiązaniem. Ponieważ Firefox uruchamia tylko jeden proces, niezależnie od liczby otwartych okien, potrzebujesz tego rozwiązania w dublacie. killall firefoxzrobiłby SIGTERMcały proces, nie tylko okno.
chaos
@chaos Nie zgadzam się, bardzo możliwe, nie ma mnie w domu, zobaczę, czy jestem wystarczająco szybki, aby
udzielić
1
@chaos Duplikaty dotyczą sytuacji, gdy pytania są takie same, a nie odpowiedzi. Pewne nakładanie się jest nieuniknione.
Seth
Co to jest cfct? Wyszukiwania zwracają głównie to samo pytanie.
TRiG

Odpowiedzi:

13

Aby wykonać polecenie wyszukujące idostatnie okno utworzone przez Firefox(i aby je zamknąć), musisz wmctrlzainstalować:

sudo apt-get install wmctrl

Komenda

Następnie użyj polecenia:

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


Wyjaśnienie:

wmctrl -l

wyświetla listę wszystkich okien, ale ważną właściwością polecenia jest to, że wyświetla listę okien w kolejności, w jakiej zostały utworzone .

W związku z tym:

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

będzie:

  • wyświetl wszystkie okna:

    wmctrl -l
    
  • znajdź te (wiersze) z „Mozilla Firefox” w ich nazwie:

    grep 'Mozilla Firefox'
    
  • znajdź ostatni (który jest również ostatnim utworzonym):

    tail -1
    
  • wypakuj pierwszy ciąg z wiersza (którym jest okno -id):

    awk '{ print $1 }'
    

Komenda:

wmctrl -ic

następnie zabije ostatnie okno przeglądarki Firefox za pomocą swojego identyfikatora (z gracją).

Lub jeszcze bardziej niezawodny:

Chociaż powyższe polecenie sprawdza się w praktycznie wszystkich przypadkach nie jest mała szansa nazwy starć, jeśli istnieje np kolejne okno z „Mozilla Firefox” w nazwie, ale nie z okna Firefox(mało prawdopodobne, ale jednak).

Co powinno działać „wodoodporny” jest zatem zidentyfikowanie Windows na liście okna (za pomocą wmctrl -lp) przez PID z firefox, zamiast napisu w nazwie okna:

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

Jak widać, w tym poleceniu

wmctrl -l | grep 'Mozilla Firefox'

produkujący wiersze zawierające „Mozilla Firefox” otrzymuje brzmienie:

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

produkując linie zawierające pid firefox (jako wynik pgrep firefox)

Jacob Vlijm
źródło
2

Aby zamknąć okno (także z wieloma otwartymi kartami), użyj tego polecenia:

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

Zauważ , że wmctrli xdotoolmusi być zainstalowany:

$ sudo apt-get install wmctrl xdotool

Zobacz także tę odpowiedź: Zamknij bieżącą kartę Firefox za pomocą terminalu .

Moja odpowiedź jest nieco zmodyfikowana, ponieważ Ctrl+ Shift+ wzamyka okno przeglądarki Firefox.


Wszystkie skróty znajdziesz w Skróty klawiaturowe Firefox .

chaos
źródło