В чем разница между началом x и запуском диспетчера дисплеев?

В чем разница между запуском startx и запуском вашего диспетчера дисплеев при запуске sudo service (display_manager) start ? Происходят два разных события, поэтому мне любопытно узнать разницу закулисных сцен.

Графический пользовательский интерфейс на традиционных Unix-системах, а также большинство современных Unix-систем, отличных от Mac OS X, построен на X Window System . Один компонент, X-сервер, взаимодействует с аппаратным обеспечением (дисплей и периферийные устройства ввода) и предлагает базовые примитивы для отображения окон и ввода пользовательского ввода. Другие программы, которые, как говорят, являются X-клиентами, отображают окна и прослушивают ввод пользователя, обмениваясь данными с X-сервером.

Чтобы поговорить с оборудованием, для X-сервера могут потребоваться специальные привилегии; например, в некоторых системах, сервер X – это setuid root. Недавние системы стараются избегать того, чтобы X-сервер выполнялся как root, чтобы повысить безопасность. В зависимости от системы запуск X-сервера на системной консоли может быть ограничен для определенных пользователей или для пользователя с физическим доступом к консоли.

Один только X-сервер ничего не делает, кроме отображения жестко закодированного фонового рисунка и курсора мыши. Чтобы сделать что-нибудь полезное, нужно запустить несколько клиентов, как правило, включая оконный менеджер .

Обычный способ запуска сеанса GUI – запустить программу диспетчера сеансов, которая заботится о запуске всех желаемых клиентов (оконный менеджер, виджеты рабочего стола, менеджер буфера обмена, восстановленные программы из предыдущего сеанса пользователя и т. Д.). Менеджер сеансов должен запускаться после X-сервера, так как он будет взаимодействовать с ним. Каждая среда рабочего стола имеет собственный диспетчер сеансов; практически любой оконный менеджер также может использоваться в качестве диспетчера сеансов, и в крайнем случае терминал, запускающий оболочку, можно рассматривать как минималистичный диспетчер сеансов – важно, чтобы у пользователя был способ запустить программы, которые они хотят запустить.

Существует два традиционных способа запуска сеанса GUI:

  • Если пользователь уже вошел в систему, но еще не имеет графического интерфейса, он может запустить команду xinit . Эта команда запускает X-сервер, затем запускает диспетчер сеансов и ждет выхода из диспетчера сеансов; то он убивает X-сервер. Таким образом, клиентская сторона сеанса и сервер X имеют одинаковое время жизни. Программа startx представляет собой небольшую оболочку вокруг xinit .
  • Также возможно запустить графический интерфейс перед тем, как любой пользователь войдет в систему. В этом случае единственным клиентом является диспетчер отображения , который предоставляет приглашение для входа. Когда пользователь вошел в систему, диспетчер отображает его диспетчер сеансов. Когда диспетчер сеансов выходит из системы, диспетчер отображает, что в этом сеансе не запущено больше программ и отображается новое приглашение для входа.

Другим способом увидеть это является то, что для того, чтобы иметь графический сеанс входа в систему, должен быть графический интерфейс, и пользователю необходимо войти в систему. Эти два шага могут выполняться в любом порядке: логин, затем запустите GUI (метод startx ) , или запустите GUI, а затем войдите в систему (метод диспетчера дисплеев).

Другие настройки являются необычными, но возможны. Например, в настройке киоска сценарии запуска системы запускают X-сервер и один полноэкранный клиент. В настройке автологинга диспетчер дисплея запускает диспетчер сеансов для пользователя по умолчанию во время загрузки.

Как правило, для системы Unix требуется root для запуска X (или диспетчера отображения, который выполняется внутри X).

Без диспетчера отображения, если root запускает X, тогда текущий пользователь X-сеанса будет root.

С менеджером дисплея root запускает X и диспетчер отображения, но затем позволяет другим пользователям запускать сеансы в этой среде. Это означает, что даже при том, что для запуска X укоренилось, «нормальный» пользователь теперь может управлять и безопасно выполнять все процессы.

Однако корень все еще «владеет» сеансом X. Если вы не предоставили пользователю разрешения (добавив этого пользователя в соответствующую группу) для выполнения важных важных задач, таких как Shutdown или Restart, пользователь не может остановить X. Только root может это сделать. Это иногда важно для многопользовательской системы, где вы не хотите, чтобы пользователи вдруг решили перезапустить машину, уничтожив другие сеансы в этом процессе.