Quando você clica no botão de desligamento (no Unity):
-
O
SessionView
pergunta aoSessionManager
se o usuário está autorizado a encerrar. -
O
SessionManager
usasystemd-logind
para verificar/org/freedesktop/ConsoleKit/Manager
para a autorização. -
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 usarpolkit
ou controle de acesso baseado em função para determinar a autorização. -
Se
SessionView
não receber autorização para o usuário desligar, ele alterará o modo de ação deshutdown
paralogout
.
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.