Como a área de trabalho do Linux executa 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 efetuado login em um terminal. Ações como desligamento do sistema e alteração da hora do sistema são acessíveis apenas a um usuário sudo após a digitação da senha. Como é que isso funciona. Existe um daemon raiz 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.

cnvzmxcvmcx
fonte
1
Não existe "a área de trabalho do Linux". Qual ambiente de desktop você está usando?
Mat
Estou usando o Ubuntu 13.10 Unity (ubuntu-desktop). Eu presumi que a idéia é a mesma nas distribuições, portanto perguntei aqui em vez de askubuntu.
cnvzmxcvmcx
Não é uma questão de distro, é uma questão de qual ambiente de área de trabalho você usa - o KDE pode não fazê-lo da mesma maneira que o Gnome, nem o Unity. (Eles podem todos usam a mesma técnica embora.)
Mat
Provavelmente as respostas / comentários sobre " como as coisas funcionam sob o capô (GUI)" aqui -> unix.stackexchange.com/questions/101074/… , explicadas no exemplo de mount(ing), podem ajudar um pouco na compreensão. Eu, pessoalmente, mastigar pesadamente sobre eles no momento
erch
@ Mat AFAIK, todos eles estão padronizados no D-Bus agora.
Gilles 'SO- deixa de ser mau'

Respostas:

6

Atualmente no Ubuntu, o desligamento real é realizado pelo daemon console-kit-daemondo ConsoleKit , que é executado com privilégios de root. O daemon do ConsoleKit recebe a solicitação de desligamento do aplicativo do painel da área de trabalho via D-Bus . A política que permite que processos não privilegiados se comuniquem com processos privilegiados é tratada pelo polkit (anteriormente PolicyKit). Você pode emular a chamada do ConsoleKit via, dbus-sendse desejar. Em particular, para pedir ao ConsoleKit para executar um desligamento, você pode:

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

No Ubuntu, o ConsoleKit substituiu o Hardware Abstraction Layer (HAL), um subsistema destinado a permitir que aplicativos de desktop descubram e usem o hardware do sistema host por meio de uma API portátil e abstrata, independentemente do tipo de hardware subjacente. Hoje, o HAL está obsoleto na maioria das distribuições Linux. A dbus-sendchamada equivalente 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 foco do projeto freedesktop.org mudou para o gerenciamento interno de assento / usuário / sessão do sistema systemd init chamado systemd-logind . Ainda não se sabe como isso afetará as distribuições que adotaram seus próprios sistemas init, como o iniciante no Ubuntu.

Thomas Nyman
fonte