Display ManagerとしてのX Window System の仕組み

Understanding systemd, systemctl 2/N

公開日: 2021-05-12
更新日: 2024-02-27

  Table of Contents

X Window Systemとは?

LinuxのGUIは多くのディストリビューションでX Window Systemと呼ばれる仕組みで提供されています. X Window SystemはX11(正確にはversion 11のXプロトコルを実装したX Window System)やXと呼ばれたりします.

1
2
3
4
5
6
7
## X Window Systemを利用している場合
% echo $XDG_SESSION_TYPE
x11

## Waylandを利用している場合
% echo $XDG_SESSION_TYPE
wayland

X Window SystemはXサーバ, ディスプレイマネージャxdm, ウィンドウマネージャtwm, 基本的なXクライアント, Xライブラリ, フォントファイルなどから構成されていますが, 一義的にはクライアントサーバー方式を採用したネットワーク型のウィンドウシステムです.

X Window Systemの仕組み

X Window Systemにおいて,

Xサーバー キーボードからの入力処理や, ディスプレイへの出力処理等のハードウェアの管理を行う Xorg
Xクライアント クライアント Webブラウザ,オフィスのアプリケーション,xclockなど

XサーバーとXクライアントはXプロトコルで通信するので,XクライアントとXサーバーが異なったアーキテクチャをもつハードウェアやOS上にあっても動作することができます(=同一ホストである必要はない)

    sequenceDiagram
    participant A AS 入力機器
    participant B AS ディスプレイ

    box ローカルホスト
    participant C AS Xサーバー
    participant D AS Xクライアント<br>(gnome-terminal etc)
    end
    
    A->>C: 入力
    C->>D: Xサーバは入力データを<br>受け付けて<br>Xクライアント(アプリ)<br>にデータを送る
    D->>C: Xクライアントは受け取った<br>データを処理して<br>処理結果をXサーバへ送る

    C->>B: XサーバはXクライアント<br>から受け取った<br>処理結果をディスプレイ<br>に出力

上記の処理がX Window Systemの処理の流れとなります. このようにXサーバーは, 各Xクライアント間の調整やユーザー側とXクライアントの仲介をするものと理解することができます.

X Window Systemが起動するまでの流れ

X Window Systemが起動するまでの流れは

  • テキストログイン(ランレベル3)の場合
  • グラフィカルログイン(ランレベル5)の場合

の2種類があります. 基本的にはGUI環境でログインする機会が多いので, 日常的には後者がメインとなります.

テキストログインの場合

テキストログインの流れ

  1. ランレベル3で立ち上げ
  2. テキストベースでログイン
  3. startxコマンドを実行 → xinitコマンドでXサーバとクライアントアプリケーションを起動
flowchart TD
    A[ multi-user.target経由でログイン ] --> B[コンソールからstartxコマンドを実行]
    B --> C[xinitコマンド]
    C -->D{~/.xinitrcがあれば実行}
    D -->|no| E[ /etc/X11/xinit/を実行 ]
    D -->|yes|F
    E --> F[Xサーバー起動] 
    F --> Z{ ~/.xsessionを実行}
    Z -->|no| G{~/.Xclientsを実行}
    G -->|no| H{ /etc/X11/xinit/Xclientsを実行}
    Z -->|yes| I[統合デスクトップ環境GNOMEや<br>ウィンドウマネジャーが起動]
    H -->|yes| I
    G -->|yes| I
  • startxxinitを起動するシェルスクリプト
  • xinitはXサーバを起動するプログラム
  • /etc/X11/xinit/Xclients: ウィンドウマネージャの起動
  • .xinitrc: startxやxinitコマンドで読み込まれるスクリプト
  • .xsession: 起動後の処理設定. ログイン後の起動プログラムの定義スクリプト

グラフィカルログインの場合

Xサーバー(/usr/bin/Xorg)をもつシステムについて, 起動シーケンスを介してsystemdgraphical.target を起動すると

  1. ディスプレイマネージャ(gdm, kdm, xdmが有名)が起動
  2. ディスプレイマネジャーがXサーバ(通常は/usr/bin/Xorg)を起動
  3. グラフィカルログイン画面が表示

という流れになります. /lib/systemd/system/graphical.targetを確認すると以下のようにdisplay-manager.serviceを呼んでいます.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
% cat /lib/systemd/system/graphical.target       
#  SPDX-License-Identifier: LGPL-2.1-or-later
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yes

ディスプレイマネージャからログインした後,セッションが開始してX Window画面を表示します. Xsession起動シーケンスはランレベル3の場合と同じになります.

X Window Systemにおけるアプリケーション

アプリケーションをディスプレイに表示する

Rule

  • Xのアプリケーションは環境変数 DISPLAY で司祭されたディスプレイに表示される
1
2
## DISPLAU変数の書式
サーバー名:ディスプレイ番号.スクリーン番号
サーバー名 リクエストの送り先のXサーバーを指定,省略するとlocalhostになる
ディスプレイ番号 同じキーボードとマウスを共有するモニタの集合に対して付けられる(通常は0)
スクリーン番号 モニタに付けられる番号(一台目は0)

アプリケーション xclock を2台目のモニタに表示する場合は, Xクライアント側で環境変数 DISPLAYの設定が必要なので

1
% export DISPLAY=:0.1; xclock

となります.

Appendix: ウィンドウマネージャと統合デスクトップ環境

Def: ウィンドウマネージャ

ウィンドウマネージャはWindow System Xの外観を管理するシステム. ウィンドウの外観, アイコン, メニュー などを提供しユーザが設定できるようになる.

ウィンドウマネジャーの種類として, Metacity, Kwin, twm, fvwm, enlightmentが有名です. ウィンドウマネジャーはあくまでもユーザーがログインした後に立ち上がります.

ウィンドウヘッダのデザインが変更されてしまった/したい場合は, ウィンドウマネージャの設定を変更します. ログイン画面の表示を変更したい場合は, etc/X11/xdm/Xresources(設定ファイル自体とは別)のようにディスプレイマネージャの方で表示変更を行います.

Def: 統合デスクトップ環境

ウィンドウマネジャーにデスクトップ用のユーティリティを組み合わせたものを総合デスクトップ環境と呼ぶ.

GNOMEが有名ですが, Ubuntuインストール時にLibreOfficeやFirefoxなどのツールがついていますが, これは UbuntuがGNOMEという総合デスクトップ環境を提供してくれているからです. また定義より, ウィンドウマネジャーも 統合デスクトップ環境が提供する機能の一部といえます.

References



Share Buttons
Share on:

Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)