O que acontece quando pressiono “Shut Down” da GUI?

15

Eu tenho batido minha cabeça contra isso por um bom tempo agora. Está relacionado com esta questão . Eu gostaria de descobrir exatamente o que acontece quando eu escolho desligar minha caixa do Linux da GUI. Isso parece ser mal documentado (se for o caso).

O ideal é que eu esteja esperando uma resposta independente de DE e de sistema operacional. Exceto isso, estou interessado no caso específico do Mandriva 2010.1 e Debian 6.x (Squeeze) e 7.0 (Wheezy) todos executando o Gnome. (Se você está prestando muita atenção, sim, é o Gnome 2 e o Gnome 3)

Basicamente, eu gostaria de saber qual comando / script / seqüência de scripts é iniciado quando pressiono "Desligar" ou "Reiniciar" para que eu possa modificar o comportamento deles. Algumas postagens do fórum que eu olhei sugerem hacking /etc/polkit-1/* , mas essa estrutura de diretório é apenas um esqueleto na minha caixa Debian (Squeeze), por exemplo.

Alguém pode ajudar?

EDITAR

O que tentei até agora

  • Substitui o executável shutdown por um script próprio. Isso não funciona: quando pressiono shutdown o Gnome efetua logout sem executar meu script.
  • Tentei editar o menu do Gnome 2. Sem alegria: as opções "Desligar", "Efetuar logout" e "Bloquear tela" não aparecem no editor de menus.
  • Analisou /usr/share/menu , nada de útil lá.

Possíveis caminhos para a solução

  • strace das opções da GUI (isso é possível?)
  • Observando o código-fonte de shutdown
  • Observando o código-fonte de gnome-session

Atualizar

De acordo com meus comentários sobre a resposta abaixo, examinei as ações polkit em /usr/share/polkit-1/actions/ e localizei (no arquivo org.freedesktop.consolekit.policy ) uma ação chamada org.freedesktop.consolekit.system.stop-multiple-users que exibe a mensagem

System policy prevents stopping the system when other users are logged in

Estou pensando (devido à convenção de nomenclatura org.freedesktop.* ) que este é algum tipo de sinal enviado ao DM via D-BUS. Além disso, esta mensagem aparece quando se tenta desligar graficamente enquanto outros usuários estão logados, então o mecanismo que aciona deve ser o mesmo mecanismo acionado quando "Desligar" ou "Desligar" for selecionado na GUI.

Alguém pode confirmar / refutar? Existe a possibilidade de, de alguma forma, interceptar este sinal ou modificá-lo?

    
por Joseph R. 22.05.2013 / 16:12

1 resposta

9

Depende do seu Gerenciador de exibição! (isto é, KDM, GDM)

Por favor, tenha em mente que o seu DM é executado como root! (precisa de privilégios de root para executar o processo de sessão como o usuário que você faz login)

Quando você clica em desligar no KDE ou no GNOME, o seu DE envia um sinal ao seu DM para desligar ou reiniciar após o término da sessão. Então, o seu DE diz para cada programa terminar e assim que todos os outros processos terminarem (ou expirou um tempo limite), o último processo do seu DE - o processo de sessão - termina.

O processo de sessão é o primeiro processo iniciado em uma sessão do X11. Quando é morto ou termina, a sessão termina. Você já viu o xterm quando rodou o X sem o DE? Esse é um processo de sessão. Este processo é chamado kdeinit no KDE e gnome-session no GNOME.

Uma vez terminada a sessão, o controle é retornado ao seu DM (que aguarda o término do processo X) e verifica o que o DE lhe disse para fazer. Se ele disse para desligar ou reiniciar, ele fará isso. Em outro caso, apenas iniciará uma nova tela de login no X.

Isto também está relacionado com problemas que você possa ter tido no passado, com algum DE não sendo capaz de desligar ou reiniciar, apenas para sair, quando usado em combinação com alguns outros DMs.

Em qualquer caso, isso não é tão ruim documentado. O GDM tem uma página de manual de um comando que lhe permite dizer para desligar, como eu disse antes (%código%). O KDM também tem documentação excelente e tem um utilitário semelhante (um pouco mais complexo) chamado gdm-control .

Desligar e reiniciar é possível sem o PolicyKit, mas o PolicyKit atende a muitos propósitos necessários nos sistemas atuais, como montar discos sem ser root, suspender ou hibernar o computador. E nem é mal documentado!

Verifique isso se quiser saber mais sobre o que é o PolicyKit e como ele funciona: link

    
por 22.05.2013 / 21:26