Como o desktop Linux executa as ações do sistema?

8

A área de trabalho do Linux pode executar várias ações que, de outra forma, não estão disponíveis para o usuário quando conectado a partir de um terminal. Ações como o desligamento do sistema e a alteração do horário do sistema são acessíveis apenas a um usuário sudo após digitar a senha. Como é que isso funciona. Existe um daemon root em execução que assume o comando do usuário de login. Por favor me guie para a resposta certa.

Estou executando o Ubuntu 13.10.

    
por cnvzmxcvmcx 30.11.2013 / 14:28

1 resposta

6

Atualmente no Ubuntu, o desligamento real é realizado por console-kit-daemon , o daemon ConsoleKit , que é executado com privilégios de root. O daemon do ConsoleKit recebe a solicitação de desligamento do aplicativo do painel de área de trabalho por meio do D-Bus . A política que permite que processos sem privilégios falem com processos privilegiados é tratada pelo polkit (antigo PolicyKit). Você pode emular a invocação do ConsoleKit via dbus-send , se desejar. Em particular, para dizer ao ConsoleKit para realizar um desligamento, você pode fazer:

dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" \
/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

No Ubuntu, o ConsoleKit substituiu a Camada de Abstração de Hardware (HAL), um subsistema destinado a permitir área de trabalho aplicativos para descobrir e usar o hardware do sistema host por meio de uma API portátil e abstrata, independentemente do tipo de hardware subjacente. O HAL está hoje obsoleto na maioria das distribuições do Linux. A invocação equivalente de dbus-send usando HAL é:

dbus-send --print-reply --system --dest=org.freedesktop.Hal \ 
/org/freedesktop/Hal/devices/computer/org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

Atualmente, o ConsoleKit não é mantido ativamente. O enfoque do projeto freedesktop.org mudou para o gerenciamento integrado de assentos / usuários / sessões do < href="http://www.freedesktop.org/wiki/Software/systemd/"> systemd sistema init chamado systemd-logind . Como isso afetará as distribuições que adotaram seus próprios sistemas init, como o upstart no Ubuntu, continua a ser visto.

    
por 30.11.2013 / 19:24

Tags