Como o botão de energia desliga o computador sem permissão de root?

35

Quando tento desligar o computador a partir de uma linha de comando ou terminal, devo ter privilégios de root:

amy@amy:~$ shutdown now
shutdown: Need to be root

e

amy@amy:~$ halt
halt: Need to be root

mas ao desligar usando a interface gráfica do usuário, ou seja, o botão de desligamento, ou o botão de desligamento do hardware, eu não pedi a senha para fazê-lo. O que faz esse desligamento para a interface gráfica e por que não precisa da senha ou dos privilégios de root?

Estou usando o Ubuntu 11.04 Natty.

    
por amyassin 10.08.2011 / 19:42

2 respostas

32

O botão de energia do hardware aciona um evento ACPI que acpid (o daemon ACPI) percebe e reage; neste caso, desligando o sistema, embora você possa fazer o que quiser. O daemon ACPI é executado como root, portanto, ele tem permissão para encerrar o sistema. Os ambientes de área de trabalho (por exemplo, gdm para Gnome) normalmente são executados também como root, então suspeito que eles funcionem da mesma maneira - você não tem permissão para desligar o sistema, mas pode dizer gdm que deseja desativá-lo e pode fazer isso em seu nome

    
por 10.08.2011 / 19:48
11

A resposta de Michael discute corretamente a função do sistema ao usar a chave liga / desliga do hardware, mas a maioria dos ambientes de área de trabalho realmente usa dbus para essa finalidade, em vez de fazê-lo sozinhos. Por exemplo, o GNOME usa dbus org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown quando o botão de desligamento é clicado. Quando isso é enviado, dbus faz algumas verificações para determinar se o usuário que está enviando a mensagem está autorizado a executar um desligamento e, se estiver, o sistema será desligado.

Você pode emular isso usando dbus-send . Por exemplo, para desligar seu sistema usando dbus , use algo assim:

dbus-send --system --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
    
por 24.12.2012 / 12:44