Was ist der Unterschied zwischen dem Starten von x und dem Starten des Display-Managers?

8

Was ist der Unterschied zwischen dem Ausführen startxund Starten Ihres Display Managers sudo service (display_manager) start? Es passieren zwei verschiedene Ereignisse, daher bin ich gespannt auf den Unterschied hinter den Kulissen.

Rohan
quelle
Sie können einen X-Server ohne Display-Manager AFAIK
Rui F Ribeiro

Antworten:

8

Die grafische Benutzeroberfläche auf herkömmlichen Unix-Systemen sowie auf den meisten modernen Unix-Systemen außer Mac OS X basiert auf dem X Window System . Eine Komponente, der X-Server, kommuniziert mit der Hardware (Anzeige- und Eingabeperipheriegeräte) und bietet grundlegende Grundelemente zum Anzeigen von Fenstern und zum Weiterleiten von Benutzereingaben. Andere Programme, sogenannte X-Clients, zeigen Fenster an und hören Benutzereingaben ab, indem sie mit dem X-Server kommunizieren.

Um mit der Hardware zu kommunizieren, benötigt ein X-Server möglicherweise spezielle Berechtigungen. Auf einigen Systemen ist der X-Server beispielsweise setuid root. Neuere Systeme versuchen zu vermeiden, dass der X-Server als Root ausgeführt wird, um die Sicherheit zu verbessern. Je nach System kann das Ausführen eines X-Servers auf der Systemkonsole auf bestimmte Benutzer oder auf Benutzer mit physischem Zugriff auf die Konsole beschränkt sein.

Der X-Server allein zeigt lediglich ein fest codiertes Hintergrundmuster und einen Mauszeiger an. Um etwas Nützliches zu tun, müssen einige Clients gestartet werden, normalerweise einschließlich eines Fenstermanagers .

Die normale Methode zum Ausführen einer GUI-Sitzung besteht darin, ein Sitzungsmanagerprogramm auszuführen, mit dem alle gewünschten Clients (Fenstermanager, Desktop-Widgets, Zwischenablage-Manager, wiederhergestellte Programme aus der vorherigen Sitzung des Benutzers usw.) gestartet werden. Der Sitzungsmanager muss nach dem X-Server gestartet werden, da er mit ihm interagiert. Jede Desktop-Umgebung verfügt über einen eigenen Sitzungsmanager. Nahezu jeder Fenstermanager kann auch als Sitzungsmanager verwendet werden, und zur Not kann ein Terminal, auf dem eine Shell ausgeführt wird, als minimalistischer Sitzungsmanager angesehen werden. Entscheidend ist, dass der Benutzer die Programme starten kann, die er ausführen möchte.

Es gibt zwei traditionelle Möglichkeiten, eine GUI-Sitzung zu starten:

  • Wenn ein Benutzer bereits angemeldet ist, aber noch keine grafische Benutzeroberfläche hat, kann er den xinitBefehl ausführen . Dieser Befehl startet einen X-Server, startet dann einen Sitzungsmanager und wartet, bis der Sitzungsmanager beendet wird. dann wird der X-Server beendet. Auf diese Weise haben die Clientseite der Sitzung und der X-Server dieselbe Lebensdauer. Das startxProgramm ist ein kleiner Wrapper xinit.
  • Es ist auch möglich, eine GUI zu starten, bevor ein Benutzer angemeldet ist. In diesem Fall ist der einzige Client ein Display-Manager , der eine Anmeldeaufforderung bereitstellt. Sobald sich ein Benutzer angemeldet hat, ruft der Display-Manager seinen Sitzungsmanager auf. Wenn der Sitzungsmanager beendet wird, stellt der Anzeigemanager sicher, dass in dieser Sitzung keine Programme mehr ausgeführt werden, und zeigt eine neue Anmeldeaufforderung an.

Eine andere Möglichkeit, dies zu sehen, besteht darin, dass für eine grafische Anmeldesitzung eine grafische Oberfläche vorhanden sein muss und sich der Benutzer anmelden muss. Diese beiden Schritte können in beiden Reihenfolgen ausgeführt werden: Anmelden und Starten der GUI ( startxMethode); oder starten Sie die GUI und melden Sie sich an (Display Manager-Methode).

Andere Einstellungen sind ungewöhnlich, aber möglich. In einem Kiosk-Setup starten die Systemstart-Skripts beispielsweise einen X-Server und einen einzelnen Vollbild-Client. In einem Autologin-Setup führt der Display-Manager beim Booten einen Sitzungsmanager für den Standardbenutzer aus.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Was ist der Unterschied zwischen startxund xinit?
Rohan
3

Im Allgemeinen benötigt ein Unix-System root, um X zu starten (oder einen Display-Manager, der in X ausgeführt wird).

Wenn root ohne Display-Manager X startet, ist der aktuelle Benutzer der X-Sitzung root.

Mit einem Display-Manager startet root X und den Display-Manager, ermöglicht dann aber anderen Benutzern, Sitzungen in dieser Umgebung zu starten. Dies bedeutet, dass ein "normaler" Benutzer jetzt die Kontrolle übernehmen und alle Prozesse sicher ausführen kann, obwohl Root zum Starten von X benötigt wurde.

Root "besitzt" jedoch weiterhin die X-Sitzung. Ohne die Erlaubnis eines Benutzers (durch Hinzufügen dieses Benutzers zur entsprechenden Gruppe), wichtige wichtige Dinge wie Herunterfahren oder Neustart auszuführen, kann der Benutzer X nicht stoppen. Dies kann nur root tun. Dies ist manchmal auf einem Mehrbenutzersystem wichtig, auf dem Benutzer nicht plötzlich entscheiden müssen, den Computer neu zu starten, wodurch andere Sitzungen zerstört werden.

Klaatu von Schlacker
quelle
Damit ich meine GUI-Sitzung beenden und zur virtuellen Konsole wechseln kann, muss ich ausgeführt werden sudo service mdm stop, um den Display-Manager zu stoppen. Gibt es eine Möglichkeit für mich, X einfach zu beenden? Übrigens muss ich nicht root sein, um X zu starten. Ist das nicht mehr erforderlich, um root zu sein, um X zu starten?
Rohan
So ziemlich alles, was Berechtigungen betrifft, kann entweder von Ihnen (wenn Sie über Root-Kräfte verfügen) oder von Ihrer Distribution oder Ihrem Systemadministrator geändert werden. Möglicherweise haben Sie von Ihrem Systemadministrator oder Ihrer Distribution die Erlaubnis erhalten, X zu starten und zu stoppen. Technisch gesehen können Sie X einfach stoppen (Display Manager enthalten), aber normalerweise haben Distributionen es so eingestellt, dass es automatisch neu gestartet wird, wenn Sie X töten. Es ist eine Art ausfallsicherer Mechanismus, um sicherzustellen, dass der Benutzer über eine grafische Benutzeroberfläche verfügt. Dies tun nicht alle Distributionen (z. B. Slackware). Sie können das Verhalten auch in Upstart oder Systemd oder einem beliebigen von Ihnen verwendeten Init ändern.
Klaatu von Schlacker
1
Diese Antwort ist sehr irreführend und impliziert, dass nicht privilegierte Benutzer nicht ausgeführt werden können startx.
Gilles 'SO - hör auf böse zu sein'
1
@ Gilles Aus diesem Grund verwende ich in meinem Kommentar den Begriff "allgemein" und den Ausdruck "es sei denn, Sie haben ein Benutzerrecht erteilt" und dann den Ausdruck "So ziemlich alles, was Berechtigungen betrifft, kann geändert werden". Ich sehe das nicht als irreführend an; Ich antworte im Kontext der Frage und behaupte nicht, bei jeder Implementierung für alle Einheiten zu sprechen.
Klaatu von Schlacker