Estou tentando obter um desligamento / reinicialização normal do ArchLinux com o GNOME Shell. Agora, quando eu peço o desligamento, ele é imediatamente desligado sem dar tempo aos programas abertos para fechar / salvar arquivos abertos normalmente. Como resultado, sempre que eu reinicio o Chrome (por exemplo), ele diz que a sessão não foi fechada corretamente etc. Ao ler na Web, aprendi que o sistema estava desligando os processos, ele primeiro enviou um SIGTERM
seguido por SIGKILL
se o processo não fosse fechado dentro de um determinado tempo limite. No entanto, percebo que no meu sistema SIGKILL
é enviado imediatamente depois SIGTERM
e acho que essa é a causa de um encerramento não normal dos programas.
Encontrei alguma documentação que (se a ler corretamente) indica que o tempo limite antes do envio SIGKILL
pode ser definido por TimeoutStopSec=
opção. Também o envio SIGKILL
também pode ser desativado por SendSIGKILL=
opção. Mas não consigo encontrar onde configurar essas opções ... existe um arquivo de configurações de desligamento / reinicialização do systemd onde eu possa definir essas opções?
EDITAR:
Fiz alguns testes e descobri duas coisas interessantes:
- Se eu fechar manualmente o chrome assim
killall -SIGTERM chrome
, ele não reclamará que não foi fechado corretamente na próxima vez em que o reiniciar. Se eu fechar assimkillall -SIGKILL chrome
, ele reclamará. Isso me diz que o chrome está manipulando o SIGTERM corretamente. - Observando a saída do meu procedimento de desligamento, o systemd imprime
Sending SIGTERM...
imediatamente seguido porSending 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:
- o GDM não está fechando seus processos filhos (por exemplo, Chrome) corretamente (por exemplo, enviando o SIGTERM para eles)
- ou o systemd está enviando uma mensagem SIGKILL para o GDM com antecedência, não dando tempo para fechar corretamente seus filhos.
Existe uma maneira de verificar / configurar como o GDM realmente fecha seus filhos?
fonte
systemd's
controle -systemd
épid 1
- mas os executivos do Chrome saem de seu script de wrapper em uma subcamação e invocam os processos filhos posteriormente. Ainda assim, ele fará o que for necessáriozygotes
, desde que seu sistema esteja configurado corretamente. Você está usando uma dessas soluções de espaço temporário para o Chrome que você encontrará recomendadas no wiki do Arch?gnome-session
.Respostas:
Para desligar normalmente a área de trabalho, você pode precisar aumentar o
TimeoutStopSec=
GDM ou qualquer outro gerenciador de exibição que esteja usando.fonte
Isso funcionou para mim no meu Arch Linux com Gnome 3.12. Acontece que talvez isso esteja relacionado à configuração
/etc/gdm/PostSession/Default
.Execute
sudo pacman -S wmctrl
para instalar o wmctrl para gerenciamento do Windows.Crie um arquivo executável para fechar todas as janelas. Por exemplo, eu o incluo
/home/[your_username]/bin/close-all-windows
com este conteúdo:Modifique
/etc/gdm/PostSession/Default
e adicione este conteúdo antesexit 0
:Espero que eles funcionem.
fonte
O script wmctrl do sorpass funciona bem para mim (no CentOS 7 eu apenas 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 desligamento. Portanto, em vez de usar / etc / gdm / PostSession / Default, agora chamo o script wmctrl do sorpass a partir do script python de Seamus Phelan, que pode ser encontrado nesses dois sites:
Essa combinação de scripts funciona muito bem para fechar o Firefox, Chrome etc. automaticamente e de forma limpa quando eu saio ou desligo minha máquina de desktop CentOS 7. Observe que no CentOS 7 você deve executar 'yum install gnome-python2-gnome' para que este script python funcione.
fonte