Para encerrar sua área de trabalho normalmente, talvez seja necessário aumentar o TimeoutStopSec=
para o GDM ou qualquer outro gerenciador de exibição que você esteja usando.
Estou tentando obter um encerramento / reinicialização no ArchLinux com o GNOME Shell. Agora, quando eu peço para desligar, ele imediatamente desliga sem dar tempo a programas abertos para fechar / salvar arquivos abertos. Como resultado, sempre que eu reinicio o Chrome (por exemplo), ele me diz que a sessão não foi fechada corretamente, etc.
Ao ler na web, aprendi que systemd ao encerrar processos, primeiro envia um SIGTERM
seguido por SIGKILL
se o processo não fechar dentro de um determinado tempo limite. No entanto, noto que no meu sistema SIGKILL
é enviado imediatamente após SIGTERM
e eu acho que essa é a causa de uma finalização de programas não graciosa.
Encontrei alguma documentação que (se eu a ler corretamente ) informa que o tempo limite antes de enviar SIGKILL
pode ser definido pela opção TimeoutStopSec=
. Também o envio de SIGKILL
também pode ser desativado pela opção SendSIGKILL=
. Mas não consigo encontrar onde configurar essas opções ... existe um arquivo de configurações de desligamento / reinicialização do systemd onde posso definir essas opções?
EDITAR:
Eu fiz alguns testes e descobri duas coisas interessantes:
killall -SIGTERM chrome
, ele não reclamará se ele não foi fechado corretamente na próxima vez que eu iniciá-lo novamente. Se eu fechar assim em vez de killall -SIGKILL chrome
, ele vai reclamar. Isso me diz que o Chrome está lidando corretamente com o SIGTERM. Sending SIGTERM...
imediatamente seguido por Sending SIGKILL...
De acordo com o comentário abaixo, o systemd está lidando apenas com seus processos. Então, no meu caso, GDM. Isso me diz que o problema poderia ser:
Existe uma maneira de verificar / configurar como o GDM fecha seus filhos?
Para encerrar sua área de trabalho normalmente, talvez seja necessário aumentar o TimeoutStopSec=
para o GDM ou qualquer outro gerenciador de exibição que você esteja usando.
Isso funcionou para mim no meu Arch Linux com o Gnome 3.12. Descobriu-se que talvez relacionado com a configuração em /etc/gdm/PostSession/Default
.
Execute sudo pacman -S wmctrl
para instalar o wmctrl para gerenciamento de janelas.
Crie um arquivo executável para fechar todas as janelas. Por exemplo, eu coloco em /home/[your_username]/bin/close-all-windows
com esses conteúdos:
#!/bin/sh
wmctrl -l | while read -r line
do
wmctrl -c 'echo "$line" | sed 's/.* [0-9]* [your_hostname] //''
done
Modifique /etc/gdm/PostSession/Default
e adicione esses conteúdos antes de exit 0
:
echo " Closing selected windows programs gracefully"
export DISPLAY=:0
su [your_username] -c /home/[your_username]/bin/close-all-windows
Espero que isso funcione.
O script wmctrl do sorpass funciona bem para mim (no CentOS 7 eu só tive que executar o 'yum install wmctrl' primeiro). No entanto, descobri que o / etc / gdm / PostSession / Default parecia funcionar apenas no logout, não no shutdown. Portanto, em vez de usar / etc / gdm / PostSession / Default, agora chamo o script wmctrl do script Smitus Phelan, que pode ser encontrado nesses dois sites:
Esta combinação de scripts funciona muito bem para fechar o Firefox, o Chrome, etc. de forma automática e limpa quando faço logout ou encerro meu desktop do CentOS 7. Note que com o CentOS 7 você deve executar 'yum install gnome-python2-gnome' para este script python funcionar.
Tags shutdown arch-linux gdm3