startx
を実行することと、Sudo service (display_manager) start
を使用してディスプレイマネージャーを開始することの違いは何ですか? 2つの異なるイベントが発生するので、舞台裏の違いを知りたいと思います。
従来のUnixシステム、およびMac OS X以外の最新のUnixシステムのグラフィカルユーザーインターフェースは、 X Window System 上に構築されています。 1つのコンポーネントであるXサーバーは、ハードウェア(ディスプレイおよび入力周辺機器)と通信し、ウィンドウを表示してユーザー入力をルーティングするための基本的なプリミティブを提供します。 Xクライアントと呼ばれる他のプログラムは、ウィンドウを表示し、Xサーバーと通信することによってユーザー入力をリッスンします。
ハードウェアと通信するために、Xサーバーは特別な特権を必要とする場合があります。たとえば、一部のシステムでは、Xサーバーはsetuid rootです。最近のシステムでは、セキュリティを向上させるために、Xサーバーをrootとして実行しないようにしています。システムによっては、システムコンソールでのXサーバーの実行が特定のユーザー、またはコンソールに物理的にアクセスできるユーザーに制限される場合があります。
Xサーバーだけでは、ハードコードされた背景パターンとマウスカーソルを表示するだけです。何か便利なことをするために、いくつかのクライアントを起動する必要があります。通常は ウィンドウマネージャ を含みます。
GUIセッションを実行する通常の方法は、必要なすべてのクライアント(ウィンドウマネージャー、デスクトップウィジェット、クリップボードマネージャー、ユーザーの以前のセッションから復元されたプログラムなど)の起動を処理するセッションマネージャープログラムを実行することです。セッションマネージャはXサーバーと対話するため、Xサーバーの後に起動する必要があります。各デスクトップ環境には、独自のセッションマネージャが付属しています。ほぼすべてのウィンドウマネージャーをセッションマネージャーとして使用することもできます。ピンチでは、シェルを実行しているターミナルを最小限のセッションマネージャーと見なすことができます。重要なのは、実行したいプログラムをユーザーが起動する方法があるということです。
GUIセッションを起動する従来の方法は2つあります。
xinit
コマンドを実行できます。このコマンドはXサーバーを起動してからセッションマネージャーを起動し、セッションマネージャーが終了するのを待ちます。次に、Xサーバーを強制終了します。このように、セッションのクライアント側とXサーバーのライフタイムは同じです。 startx
プログラムはxinit
の小さなラッパーです。これを確認するもう1つの方法は、グラフィカルログインセッションを使用するために、グラフィカルインターフェイスがあり、ユーザーがログインする必要があるということです。これらの2つのステップは、どちらの順序でも実行できます。ログインしてGUIを起動します(startx
メソッド)、またはGUIを起動してログインします(ディスプレイマネージャメソッド)。
その他の設定は一般的ではありませんが、可能です。たとえば、キオスクセットアップでは、システム起動スクリプトはXサーバーと単一のフルスクリーンクライアントを起動します。自動ログイン設定では、ディスプレイマネージャーは起動時にデフォルトユーザーのセッションマネージャーを実行します。
一般に、UNIXシステムでは、X(またはX内で実行されるディスプレイマネージャ)を起動するためにrootが必要です。
ディスプレイマネージャーがない場合、rootがXを起動すると、Xセッションの現在のユーザーはrootになります。
ディスプレイマネージャーを使用すると、rootはXとディスプレイマネージャーを起動しますが、他のユーザーがその環境内でセッションを開始できるようにします。つまり、Xを起動するのにrootがかかったとしても、「通常の」ユーザーがすべてのプロセスを制御して安全に実行できるようになります。
ただし、ルートはまだXセッションを「所有」しています。 (適切なグループにそのユーザーを追加することによって)シャットダウンや再起動などの非常に重要なことを実行するためのユーザー権限を付与しない限り、ユーザーはXを停止できません。これを実行できるのはrootだけです。これは、ユーザーが突然マシンを再起動して、プロセスの他のセッションを破壊することを望まないマルチユーザーシステムでは、時々重要です。