Que mecanismo impede o desligamento quando existe outra sessão aberta?

5

O sistema se recusa a desligar ou reinicializar enquanto outra sessão (GUI) está aberta. Ele simplesmente me desconecta quando eu seleciono desligar ou reiniciar no menu do sistema.

Como isso é feito?

Eu não estou pedindo uma justificativa (é claro que o fechamento pode ter impactos adversos no trabalho de outro usuário), mas sim o mecanismo por trás desse comportamento.

    
por guntbert 23.08.2013 / 22:36

1 resposta

3

Quando você clica no botão de desligamento (no Unity):

  1. O SessionView pergunta ao SessionManager se o usuário está autorizado a encerrar.

  2. O SessionManager usa systemd-logind para verificar /org/freedesktop/ConsoleKit/Manager para a autorização.

  3. ConsoleKit define essa propriedade essencialmente verificando se vários usuários estão conectados. Se vários usuários estiverem conectados, ele negará a autorização. Além disso, dependendo de como o sistema foi configurado, ConsoleKit também pode usar polkit ou controle de acesso baseado em função para determinar a autorização.

  4. Se SessionView não receber autorização para o usuário desligar, ele alterará o modo de ação de shutdown para logout .

Como um aparte, note que este comportamento (e como implementá-lo) é uma decisão tomada pelo Ubuntu. Eu tinha instalado recentemente o Arch com o Gnome 3.8 em uma partição, então entrei dois usuários lá para ver como o que aconteceu quando um deles foi desligado. Houve uma mensagem avisando que outros usuários estavam conectados e podem perder o trabalho, mas clicar em OK permite que o desligamento continue.

[Editar com base no comentário do OP]

A maneira mais simples de alterar esse comportamento é ignorá-lo. Em um terminal ou script, problema:

sudo shutdown -h 0 para o encerramento imediato ou sudo shutdown -r 0 para um reinício.

Isso pressupõe que o usuário que deseja desligar tem privilégios administrativos, mas o usuário também pode receber privilégio de administrador apenas para shutdown .

Com um script, você pode adicionar algumas dicas como advertir sobre outros usuários conectados e permitir que o usuário mude de ideia sobre o encerramento.

Alguém pode ter outra ideia (ou provavelmente fornecer um roteiro especial em resposta a uma nova pergunta), mas não consigo pensar em nada fácil (digamos, sem recompilar uma versão personalizada do Unity) ou em algo seguro além esta solução.

    
por chaskes 10.09.2013 / 16:35

Tags