LinuxのGUI環境(X Window System、ディスプレイマネージャ、ウィンドウマネージャ、デスクトップ環境)
今までテキトーに使っていたので、少し真面目にLinuxのGUI環境に関する知識を整理してみました。この記事の構成は以下のとおりです。
- Part 1 : X Window System
- Part 2 : ディスプレイマネージャ
- Part 3 : ウィンドウマネージャ
- Part 4 : デスクトップ環境
- Part 5 : 参考にしたページ
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、GDM、KDMなどがあります。
ただ、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 : デスクトップ環境
デスクトップ環境を明確に説明するのは難しいですが、ざっくり言えば、必要なソフトが一通りそろっていて、マウス操作で便利に使えるようになっている環境です。たとえば、WindowsやMacBookのデスクトップ画面をイメージしてもらえば良いかなと思います。
Windowsのようにマウス操作であれこれできるようになっていますので、当然ですがデスクトップ環境にはウィンドウマネージャ(の機能)も含まれています。
Linuxのデスクトップ環境としては昔からGNOMEとKDEが有名です。
この2大勢力のほかにも、XfceやEnlightenmentなど様々なデスクトップ環境があります。
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つに相当する役割を果たしているそうです。
initはLinux上で最初に実行されるプログラムで、起動時に各種スクリプトを実行したり、gettyを起動したりします。
gettyについては良く分かりません。manページによると「ttyポートを開いて、ログインネームの入力を促し、loguinコマンドを実行する」そうです。
(追記)
gettyに関して以下の2つのページを見つけました。チラ見したところ何となく参考になりそうなので、後で読んでみます。
<さりげなくDebian関係のリンク>
このページにある各種リンクが役立ちそうです。まずは「Xorg」と「Xinitrc」から。
GNOMEやKDEを使う予定は無いので、LightDMにしようかなと思っています。
DesktopEnvironment - Debian Wiki
タイトルはDesktopEnvironmentですがウィンドウマネージャ等の記載もあります。