Jak zamknąć aplikację z terminala w taki sam sposób, jak prawidłowo ją opuszczać

9

Zwykle podczas uruchamiania aplikacji w środowisku graficznym, gdy chcę ją zamknąć, klikam Xw lewym górnym rogu okna lub przechodzę do File > Close.

Chciałbym czasami zamykać te programy zdalnie przez ssh z terminala za pomocą wiersza poleceń, teraz używam killpolecenia, ale zastanawiam się, czy robi to to samo, co prawidłowe wychodzenie z aplikacji.

Od man killdomyślny sygnał wydaje się być 15) SIGTERM, jest to sygnał powie aplikację staram się zamknąć, aby oczyścić, zamknij otwarte pliki Zapisz rzeczy?

Czy jest lepszy sposób, jeśli chcę to zrobić z terminala?

Mikrofon
źródło
2
Dzięki, że pytasz! Nauczyłem się czegoś, co na pewno się przyda.
Oliphaunt - przywróć Monikę

Odpowiedzi:

9

Typowym sposobem na wdzięczne zamknięcie aplikacji jest użycie kill -TERM 1234, gdzie 1234jest PID okna. Problem polega jednak na tym, że aplikacje graficzne są zaprojektowane do nasłuchiwania określonego sygnału z samego serwera X, a nie nasłuchiwania tego TERMsygnału.

Oznacza to, że potrzebujesz jakiegoś agenta między tobą a serwerem X, aby komunikować się, że chcesz wysłać odpowiedni sygnał. Możesz oczywiście napisać program w C, jednak istnieje wmctrlprogram (co nie jest zaskoczeniem napisane w C), który robi dokładnie to.

Użycie wmctrljest proste:

wmctrl -c :SELECT: # close window that will be selected with pointer
wmctrl -c :ACTIVE: # close currently active window
wmctrl -ic <numeric id> # close window with specific id in hex

Nie jest domyślnie instalowany, więc zdobądź go sudo apt-get install wmctrl

Jest wiele zastosowań, które wmctrlwykraczają daleko poza zamykanie okien, więc proszę zobaczyć więcej moich odpowiedzi i Jacoba Vlijma, żeby zobaczyć przykłady skryptów, w których zostały użyte

Sergiy Kolodyazhnyy
źródło
2
Wystarczy dodać tutaj, że wmctrl -lwyświetli wszystkie okna i poda numeryczny identyfikator w postaci szesnastkowej w pierwszej kolumnie. =)
Terrance,
Dziękujemy, działa świetnie z większością aplikacji, ale w przypadku Potopu istnieje opcja Minimize to tray on closei wmctrl -cpo prostu zamknie okno, a nie samą aplikację, pozostanie uruchomiona zminimalizowana do zasobnika.
Mike
3

Myślę, że warto dodać, że wyniki wmctrl -xlbędą wyglądały następująco:

0x03000001 -1 google-chrome.google-chrome  dcentore-pc Rybak - Google Play Music - Google Chrome
0x04600006  0 speedcrunch.Speedcrunch  dcentore-pc SpeedCrunch

Gdzie xżąda, aby klasa okna była w danych wyjściowych. Jest to często najłatwiejszy sposób na zamknięcie tego samego programu za każdym razem. Następnie możemy po prostu podać klasę okna podczas jej zamykania:

wmctrl -xc speedcrunch.Speedcrunch

Ten przykład zamknie speedcrunch.

Daniel Centore
źródło