Desligamento normal no ArchLinux

20

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:

  1. Se eu fechar manualmente o chrome como este 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.
  2. Olhando para a saída do meu procedimento de desligamento, o systemd imprime 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:

  1. O GDM não fecha os processos filhos (por exemplo, o Chrome) corretamente (ou seja, enviando SIGTERM para eles)
  2. ou systemd está enviando ao GDM uma mensagem SIGKILL para o início, não dando tempo para fechar corretamente seus filhos.

Existe uma maneira de verificar / configurar como o GDM fecha seus filhos?

    
por lviggiani 01.04.2014 / 18:29

3 respostas

2

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.

    
por 30.06.2014 / 22:26
2

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 .

  1. Execute sudo pacman -S wmctrl para instalar o wmctrl para gerenciamento de janelas.

  2. 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
    
  3. 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.

    
por 07.09.2014 / 07:38
-1

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.

    
por 07.11.2014 / 05:14