Как рабочий стол Linux выполняет системные действия?

8

Рабочий стол Linux может выполнять несколько действий, которые в противном случае недоступны пользователю при входе в систему с терминала. Такие действия, как выключение системы и изменение системного времени, доступны только пользователю sudo после ввода пароля. Как это работает. Работает ли корневой демон, который принимает команду от пользователя, выполняющего вход в систему. Пожалуйста, наведите меня на правильный ответ.

Я использую Ubuntu 13.10.

cnvzmxcvmcx
источник
1
Нет такой вещи как «рабочий стол Linux». Какую рабочую среду вы используете?
Мат
Я использую Ubuntu 13.10 Unity (ubuntu-desktop). Я предположил, что идея одинакова во всех дистрибутивах, поэтому спросил здесь вместо askubuntu
cnvzmxcvmcx
Дело не в дистрибутиве, а в том, какую среду рабочего стола вы используете - KDE может делать это не так, как Gnome, как Unity. (Хотя все они могут использовать одну и ту же технику.)
Мат
Вероятно, ответы / комментарии о том, « как все работает под капотом (также известный как GUI)» здесь -> unix.stackexchange.com/questions/101074/… , объясненные на примере mount(ing), могут немного помочь в понимании. Я лично сильно пережевываю их на данный момент
erch
@ Mat AFAIK теперь все они стандартизированы на D-Bus.
Жиль "ТАК - перестань быть злым"

Ответы:

6

В настоящее время на Ubuntu, фактическое завершение работы выполняется console-kit-daemon, в ConsoleKit демон, который работает с привилегиями суперпользователя. Демон ConsoleKit получает запрос на отключение от приложения панели рабочего стола через D-Bus . Политика, которая позволяет непривилегированным процессам общаться с привилегированными процессами, обрабатывается polkit (ранее PolicyKit). Вы можете эмулировать вызов ConsoleKit через, dbus-sendесли хотите. В частности, чтобы заставить ConsoleKit выполнить выключение, вы можете сделать:

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

В Ubuntu ConsoleKit заменил Hardware Abstraction Layer (HAL), подсистему, предназначенную для того, чтобы приложения для настольных компьютеров могли обнаруживать и использовать оборудование хост-системы через переносимый и абстрактный API, независимо от типа базового оборудования. HAL сегодня устарел в большинстве дистрибутивов Linux. Эквивалентный dbus-sendвызов с использованием HAL:

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

В настоящее время ConsoleKit активно не поддерживается. Фокус проекта freedesktop.org сместился в сторону встроенного управления местом / пользователем / сеансом системы инициализации systemd, называемой systemd-logind . Как это повлияет на дистрибутивы, которые приняли свои собственные системы инициализации, такие как upstart в Ubuntu, еще неизвестно.

Томас Найман
источник