
startx
ディスプレイマネージャの実行と起動の違いは何ですかsudo service (display_manager) start
? 2つの異なるイベントが行われていましたが、その裏面の違いが何なのか気になります。
答え1
従来のUnixシステムとMac OS X以外のほとんどの最新のUnixシステムのグラフィカルユーザーインターフェースは、次のように構築されています。Xウィンドウシステム。 Xサーバーは、ハードウェア(ディスプレイおよび入力ペリフェラル)と通信し、ウィンドウを表示し、ユーザー入力をルーティングするための基本的な基本要素を提供するコンポーネントです。 X クライアントと呼ばれる他のプログラムは、X サーバーと通信してウィンドウを表示し、ユーザー入力を聞きます。
ハードウェアと通信するには、X サーバーに特別な権限が必要な場合があります。たとえば、一部のシステムでは、X サーバーは setuid ルートです。最近のシステムは、セキュリティを強化するためにXサーバーがrootとして実行されるのを防ぎます。システムによっては、システムコンソールでXサーバーを実行することは、特定のユーザーまたはコンソールに物理的にアクセスできるユーザーに制限されることがあります。
Xサーバーは、ハードコードされた背景パターンとマウスカーソルを表示する以外には何もしません。便利なタスクを実行するには、通常、次のような一部のクライアントを起動する必要があります。ウィンドウマネージャ。
GUIセッションを実行する一般的な方法は、必要なすべてのクライアント(ウィンドウマネージャ、デスクトップウィジェット、クリップボードマネージャ、ユーザーの以前のセッションで再起動するプログラムなど)の起動を担当するセッションマネージャプログラムを実行することです。セッションマネージャはXサーバーと対話するため、Xサーバーの後に起動する必要があります。すべてのデスクトップ環境には独自のセッションマネージャがあります。ほとんどすべてのウィンドウマネージャをセッションマネージャとして使用でき、状況に応じてシェルを実行している端末を最小限のセッションマネージャとして扱うことができます。重要なのは、ユーザーが次のことを実行できることです。実行したいプログラムを起動します。
GUIセッションを開始する2つの伝統的な方法があります。
- ユーザーがすでにログインしているがまだGUIがない場合は、次のように実行できます。
xinit
注文する。このコマンドはXサーバーを起動し、セッションマネージャを起動し、セッションマネージャが終了するのを待ってからXサーバーを終了します。このようにして、セッションのクライアントとXサーバーは同じライフサイクルを持ちます。このstartx
プログラムは小さなパッケージで提供されていますxinit
。 - ユーザーがログインする前にGUIを起動することもできます。この場合、唯一のクライアントはディスプレイマネージャ、ログインプロンプトを表示します。ユーザーがログインすると、ディスプレイマネージャはセッションマネージャを呼び出します。セッションマネージャが終了すると、ディスプレイマネージャはセッションで実行中のプログラムがないことを確認し、新しいログインプロンプトを表示します。
これを見るもう1つの方法は、グラフィカルログインセッションを持つためにはグラフィカルインターフェイスが必要であり、ユーザーがログインする必要があることです。これら2つの手順は、順序に関係なく実行できます。つまり、ログインしてGUIを起動するか(startx
方法)、GUIを起動してログインします(ディスプレイマネージャの方法)。
他の設定はあまり一般的ではありませんが、可能です。たとえば、キオスク設定では、システム起動スクリプトはXサーバーと単一のフルスクリーンクライアントを起動します。自動ログイン設定では、ディスプレイマネージャは起動時にデフォルトのユーザーに対してセッションマネージャを実行します。
答え2
通常、Unixシステムでは、X(またはX内で実行されているディスプレイマネージャ)を起動するにはルートが必要です。
ディスプレイマネージャなしでルートがXを起動すると、Xセッションの現在のユーザーはrootです。
ディスプレイマネージャを使用すると、ルートはXとディスプレイマネージャを起動しますが、他のユーザーがその環境でセッションを開始できるようにします。これは、Xをrootとして起動しても、「一般」ユーザーがすべてのプロセスを安全に制御して実行できることを意味します。
しかし、ルートはまだXセッションを「所有」します。シャットダウンや再起動などの重要な操作を実行する権限をユーザーに付与しないと(適切なグループにユーザーを追加して)、ユーザーはXを停止できません。ルートのみがこれを実行できます。これは、ユーザーが突然コンピュータを再起動してプロセスの他のセッションを妨げたくないマルチユーザーシステムにとって重要です。