Como fechar a aplicação a partir do terminal da mesma maneira que sai corretamente

9

Normalmente, ao executar o aplicativo em ambiente gráfico, quando quero fechá-lo, clico Xno canto superior esquerdo da janela ou vou para File > Close.

Às vezes, gostaria de fechar esses programas remotamente através do ssh do terminal usando a linha de comando, agora uso o killcomando, mas imagino que ele faça o mesmo que sair do aplicativo adequadamente.

Do man killsinal padrão parece ser 15) SIGTERM, esse sinal informa ao aplicativo que estou tentando fechar para limpar, fechar arquivos abertos, salvar coisas?

Existe uma maneira melhor se eu quiser fazer isso no terminal?

Mike
fonte
2
Obrigado por perguntar! Aprendi algo que certamente será útil em algum momento.
Oliphaunt - restabelece Monica

Respostas:

9

A maneira típica de fechar o aplicativo normalmente é usar kill -TERM 1234, onde 1234está o PID da janela. O problema, no entanto, é que aplicativos gráficos são projetados para escutar um sinal específico do próprio servidor X, não escutando o TERMsinal.

Isso significa que você precisaria de algum tipo de agente entre você e o servidor X para comunicar que deseja enviar o sinal apropriado. É claro que você pode escrever um programa em C, no entanto, existe um wmctrlprograma já existente (não surpreendentemente escrito em C) que faz exatamente isso.

O uso de wmctrlé simples:

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

Como não está instalado por padrão, obtenha-o com sudo apt-get install wmctrl

Existem muitos usos para wmctrlalém de apenas fechar as janelas, por favor, veja mais respostas e as de Jacob Vlijm para exemplos de scripts nos quais ela foi usada

Sergiy Kolodyazhnyy
fonte
2
Basta adicionar aqui que wmctrl -llistará todas as janelas e fornecerá o ID numérico em hexadecimal na primeira coluna. =)
Terrance
Obrigado, funciona muito bem com a maioria dos aplicativos, mas com o Deluge existe uma opção Minimize to tray on closee wmctrl -capenas fecha uma janela, não o aplicativo em si, ele permanecerá em execução minimizado na bandeja.
Mike
3

Eu acho que vale a pena adicionar que wmctrl -xlproduzirá resultados como este:

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

Onde a xrequisição da classe window está na saída. Geralmente, é a maneira mais fácil de fechar o mesmo programa todas as vezes. Então, podemos apenas fornecer a classe window ao fechá-la:

wmctrl -xc speedcrunch.Speedcrunch

Este exemplo fechará o speedcrunch.

Daniel Centore
fonte