恥は/dev/nullへ by 初心者

プログラミング素人がのろのろと学んだことをつづっています♪

LinuxのGUI環境(X Window System、ディスプレイマネージャ、ウィンドウマネージャ、デスクトップ環境)

今までテキトーに使っていたので、少し真面目にLinuxGUI環境に関する知識を整理してみました。この記事の構成は以下のとおりです。

 

 

 

Part 1 : X Window System

X Window Systemとは?

X Window Systemを簡単に言うと、グラフィカルな環境を提供するためのクライアントサーバー型のシステムです。このシステムでは、X11というプロトコルがクライアントとサーバーの通信に使われます。なお、このシステムにおけるサーバーをXサーバーといい、クライアントをXクライアントと言います。

 

このうち、Xクライアントは、ブラウザやエディタ等、個々のソフトです。Xサーバーは、各Xクライアント間の調整やユーザー側とXクライアントの仲介をするものです。


たとえば、ユーザーがキーボードで文字を入力するとエディタに文字が表示されますね。この時、キーボードからの入力を受け取るのはXサーバーです。Xサーバーは受け取った入力内容を(X11プロトコルを使って)Xクライアントであるエディタに伝えます。すると、エディタ上に文字が表示されます。

 

今の例だと「キーボード  →  Xサーバー  →  Xクライアント」という一方向の説明にしかなっていないので少し補足します。「エディタに文字が表示される」のは、エディタがXサーバーに対して「(ユーザーが見ている)画面にこれを表示してください」と依頼しているからです。つまり、「Xクライアント  →  Xサーバー  →  画面」という処理も行われているということです。

 

X Window Systemに関する用語

ネット上を見ると、X Window Systemに関する用語は結構アバウトに使われています。

 

たとえば、「X11をインストールする」という表現を普通に見かけます。しかし、用語に注意を払って記述されている文書を読むと、X11とはXプロトコルのバージョン11であると説明されています。これを前提にすると、先の表現は「Xプロトコルのバージョン11を実装したX Window Systemをインストールする」と書いた方がいいのかもしれません。

 

でも、表現が無駄に長くなっただけのような気がしなくもありません・・・^^;。
個人的には、文章の読み手に誤解を与えなければ「X11をインストールする」でも良いと思います。


という個人的な意見を述べた上で、調べたことを以下に記します。

 

「X」

単に X とだけ書かれている場合、以下の可能性がありそうです。
X Window System(X というウィンドウシステム)を指している。
・Xサーバーを指している。
・Xというプロトコルを指している(専門的な文書でなければ、この可能性は低そう)。


X11

X11はXプロトコルのバージョン11を指す言葉です。XサーバーとXクライアントはこのプロトコルを使って通信します。

しかし、「X11を実装したX Window System」や「X11を実装したXサーバー」の意味でも使われているようです。

 

このプロトコルに関する文書
https://www.x.org/releases/current/doc/xproto/x11protocol.html


「Xlib」

アプリケーションやツールキットが利用する、Xプロトコルを実装したクライアント用ライブラリのこと。


「Xサーバー」

X Window Systemにおいて、接続しているXクライアント間の調整や、ユーザー側とXクライアントの仲介を担う仕組み(またはその実装)。


Xorg

オープンソースで実装されたXサーバーです。
Xorg(Xの次は小文字のオー)は現在主流のXサーバーでX.Org(Xの次はドットと大文字のオー)によって開発されています。
  

X Window Systemの名前の由来

X Window Systemの名前の由来が以下のPDFに書かれていました。
https://apps.hci.rwth-aachen.de/borchers-old/cs377a/materials/p79-scheifler.pdf

このPDFによると、かつて W Window Systemというものがあったらしく、X Window Systemの階層的な仕組みはW Window Systemから来ているそうです。W Window Systemの「W」に対する言葉として(アルファベット順でWの次の)「X」になったようです。

 

 

Part 2 : ディスプレイマネージャ

ディスプレイマネージャとは?

ディスプレイマネージャは、グラフィカルなログイン画面を提供するソフトです。
Linuxを起動すると、通常はコンソールでログイン画面が表示されますが、ディスプレイマネージャを利用するとグラフィカルなログイン画面が表示されます。

 

メジャーなディスプレイマネージャ

ネット上の記事でよく見かけるものとしては、XDM、GDMKDMなどがあります。

ただ、XDMについてビミョーに気になることがあります。X11 R7.6のmanページにはxdmの記載があるのですが、X11 R7.7のmanページにはxdmの記載がないんですよね。はて?

 

SLiMについて

SLiMというディスプレイマネージャもそこそこ有名なのですが、ArchLinuxのWikiを読むと「SliM プロジェクトは活動を停止しています (プロジェクトのホームページ に繋がらない状態となっており、github のミラー も動きがありません)。また、logind セッションなど、SLiM は systemd に完全には対応していません。他のディスプレイマネージャや Xinitrc を使うようにしてください。」と書かれています。

 活動を停止しているとなると、仮にセキュリティホールが見つかっても対応されないと思いますので、使わない方が良さそうです。

 

 

Part 3 : ウィンドウマネージャ

ウィンドウマネージャとは?

ウィンドウマネージャは、グラフィカルな画面に表示されているウィンドウの管理(サイズ変更、移動、削除など)を担うものです(ここでいうウィンドウとは、画面上にある各ソフトを指しています)。

 

そもそも、X Window Systemはグラフィカルな表示機能を提供しますが、それだけしかしません。表示された個々のウィンドウをマウスで移動したり、サイズを変更したりする機能は提供しないのです。この部分を担当しているのがウィンドウマネージャです。

 

この点に関しては、次の記事が非常に分かりやすいです(必読!)。
https://qiita.com/ai56go/items/1b8bfeede2b467ac0667

 

古いですが、次のページも参考になります。読みものとしても面白いです。

https://linuxjf.osdn.jp/JFdocs/XWindow-Overview-HOWTO/window-managers.html
このページによると、ウィンドウマネージャっていうのは『メタクライアント』だ。その一番基本的な 任務は他のクライアントを管理することなんだ。」とのことです。

なお、このページは、X Window Systemアーキテクチャをざっくり説明する文書の一部です。

 

メジャーなウィンドウマネージャ

Linuxで使えるウィンドウマネージャは沢山ありますので、以下のページをご覧ください。

ウィンドウマネージャ一覧
このページはArchLinux関連のページですが、Linuxで使える様々なウィンドウマネージャが並んでいるので便利です。また、スタック型のウィンドウマネージャとタイル型のウィンドウマネージャに関する説明もあります。

 

 

Part 4 : デスクトップ環境

デスクトップ環境を明確に説明するのは難しいですが、ざっくり言えば、必要なソフトが一通りそろっていて、マウス操作で便利に使えるようになっている環境です。たとえば、WindowsMacBookのデスクトップ画面をイメージしてもらえば良いかなと思います。

 

Windowsのようにマウス操作であれこれできるようになっていますので、当然ですがデスクトップ環境にはウィンドウマネージャ(の機能)も含まれています。

 

Linuxのデスクトップ環境としては昔からGNOMEKDEが有名です。

この2大勢力のほかにも、XfceEnlightenmentなど様々なデスクトップ環境があります。

 

  

Part 5 : 参考にしたページ

X Window System関係

EXPLANATIONS
個人的にイチオシX Window Systemについて学ぶのにとても良いページです。用語に注意を払って文章を書いている点も良かったです。なお、後ろの方にコードも登場します。

私は、以下の3つのパートだけを読みました。
・BASIC ARCHITECTURE
・REQUESTS AND EVENTS
・LET'S GO


ウィキペディアの「X Window System」の項目
日本語で読めますし、ざっくりとした理解をするには良いかなと思います。XサーバーとXクライアントの図が分かりやすいです。


KENスクールブログの記事
説明が簡潔で分かりやすいです。ディスプレイマネージャ、ウィンドウマネージャ等の説明もあります。

 

サルでも分かるX11入門
タイトル通り、読みやすいです。

ディスプレイマネージャ関係

Linux - Display Manager
ディスプレイマネージャからX Window Systemが起動する流れだけでなく、X Window Systemに関する設定ファイルの説明も書かれている点が良いです。

 

ディスプレイマネージャの種類

Linuxが起動してからディスプレイマネージャが実行されるまでのシーケンスが簡単に書かれています。

 

ディスプレイマネージャの概要

ディスプレイマネージャ経由でX Window Systemが起動するまでの流れが少し詳しく書かれています。

 

このページによると、コンソールでLinuxシステムにログインする際は、init、getty、loginが水面下で仕事をしているそうですが、ディスプレイマネージャはグラフィカルな画面でこの3つに相当する役割を果たしているそうです。

 

initLinux上で最初に実行されるプログラムで、起動時に各種スクリプトを実行したり、gettyを起動したりします。


gettyについては良く分かりません。manページによると「ttyポートを開いて、ログインネームの入力を促し、loguinコマンドを実行する」そうです。

 

(追記)

gettyに関して以下の2つのページを見つけました。チラ見したところ何となく参考になりそうなので、後で読んでみます。

 

 

 

<さりげなくDebian関係のリンク>

XWindowSystem - Debian Wiki

このページにある各種リンクが役立ちそうです。まずは「Xorg」と「Xinitrc」から。

 

DisplayManager - Debian Wiki

GNOMEKDEを使う予定は無いので、LightDMにしようかなと思っています。

 

DesktopEnvironment - Debian Wiki

タイトルはDesktopEnvironmentですがウィンドウマネージャ等の記載もあります。