このチュートリアルでは、Linux システムの X11 をインストールおよび設定する方法を学習します。
- X11 アーキテクチャを理解する。
- X Window 設定ファイルの基本を理解する。
- キーボード配列など、Xorg 設定の特定の側面を上書きする。
- ディスプレイマネージャーやウィンドウマネージャーなど、デスクトップ環境のコンポーネントを理解する。
- X サーバーへのアクセスを管理し、リモート X サーバー上にアプリケーションを表示する。
- Wayland について理解する。
- X11 とは何ですか。 これはほとんどの UNIX ライクなオペレーティングシステムで実装されており、 多くの他のシステムにも移植されています。 Xサーバーは、ウィンドウを表示し、キーボード、マウス、タッチスクリーンなどの入力デバイスを処理するプログラムまたは専用端末です。 クライアントはアプリケーションです。
- 前提条件
- X, the big picture
- The X Window configuration file
- XkbVariant オプションは、2 つのレイアウトのうちどのバリエーションを使用すべきかを定義します。 us レイアウトの場合、デフォルトのバリアントが使用されます。 sk レイアウトの場合、qwerty バリアントが使用されます。 XkbOptions オプションは、ユーザーが CapsLock キーを使用してレイアウトを切り替えることができることを指定します。 キーボード設定の更新
- Manage access to the X server and display applications remotely
- When things go wrong
- Wayland, a new compositing window manager
- Resources
X11 とは何ですか。 これはほとんどの UNIX ライクなオペレーティングシステムで実装されており、 多くの他のシステムにも移植されています。 Xサーバーは、ウィンドウを表示し、キーボード、マウス、タッチスクリーンなどの入力デバイスを処理するプログラムまたは専用端末です。 クライアントはアプリケーションです。
このチュートリアルは、Linuxシステムアドミニストレータ(LPIC-1)試験101のトピック106の目的106.1に対する準備に役立ちます。
前提条件
このシリーズのチュートリアルを最大限に活用するには、Linuxの基礎知識と、このチュートリアルで扱うコマンドを練習することができる動作中のLinuxシステムが必要です。 時には、プログラムのバージョンによって出力のフォーマットが異なるため、ここで示されているリストや図のように、結果が必ずしも正確に表示されないことがあります。 このチュートリアルの例は、Fedora 28、openSUSE Tumbleweed (20181204)、および Ubuntu 18.04 LTS から来ています。
X, the big picture
X はもともと 1984 年に Massachusetts Institute of Technology (MIT) で開発されたものでした。 クライアント/サーバー型の X プロトコルは Version 11 (X11) で、1987 年からそうなっています。 現在は X.Org Foundation が X プロジェクトを主導しており、現在のリファレンス実装である X.Org Server はフリーでオープンソースのソフトウェアとして利用できます。
X アーキテクチャは、ディスプレイ上のウィンドウの描画や移動、 キーボードやマウス、タブレット、タッチスクリーンなどの入力デバイスとの相互作用を含む、 グラフィックディスプレイ用のかなり原始的なクライアント/サーバーフレームワークを提供します。 Xはネットワーク透過的に設計されており、Xサーバーはローカルまたはネットワーク上のアプリケーションソースからウィンドウを表示することができます。 非常に高価なコンピュータを多くのユーザーで共有していた時代、X端末は多くのユーザーが1台のコンピュータのリソースを共有するための安価な方法を提供しました。 端末は X プロトコルを実装し、コンピュータは必要な残りの作業を処理しました。
個々のアプリケーションウィンドウはディスプレイ画面の一部またはすべてを占め、ユーザーは通常、一度に複数のウィンドウを開いています。 X はこの管理タスクがどのように達成されるべきかを規定していないので、通常マネージャプログラムがこれを提供します。 このようなマネージャの例としては、GNOME や KDM ディスプレイマネージャ、 Enlightenment ウィンドウマネージャがあります。 これらのインターフェースは通常、フレーム、タイトルバー、標準メニューなどの機能を提供し、通常、ユーザーがプログラムを起動するための手段を提供します。 このチュートリアルの後半で、ウィンドウマネージャとディスプレイマネージャについてより詳しく説明します。
複数のアプリケーションウィンドウの必要な部分をマージして表示することをコンポジットと呼びます。 これはウィンドウ マネージャの一部です。 つまり、X はアプリケーションの要求を処理し、それをマネージャのコンポジタに渡して、ユーザーに表示するウィンドウを組み立てるのです。
図 1 は、典型的な最新の Linux デスクトップ (openSUSE Tumbleweed による) の例です。 3 つのウィンドウが開いており、ユーザーはシステム メニューを使用して別のアプリケーションを起動しています。 openSUSE デスクトップの例
The X Window configuration file
X の初期には、ディスプレイを設定することは、ディスプレイの機能に関する幅広い知識と解像度だけでなく水平および垂直同期値、色深度などに関する情報を表現する能力を持つことを意味しました。 しかし、VESA(Video Electronics Standards Association)とDDC(Display Data Channel)プロトコルが登場し、ディスプレイからグラフィックスカード、ひいてはコンピュータにこれらの機能を伝達できるようになってからは、設定がより自動的に行われるようになりました。 これは、ノートブックをどこにでも持ち運び、利用可能な外部モニターやプロジェクターに接続できることを期待する私たちにとって幸運なことです。 一般に、デバイスを接続するだけで、多くの場合 USB 接続により動作します。
しかし、Linux のほとんどのものと同様に、使用できる基礎となる設定メカニズムがあります。 実際、X の Xorg 実装は、いくつかのソースから設定情報を取得します。 主な設定ファイルは xorg.conf で、xorg.conf.d ディレクトリからインクルードされるファイルと一緒です。 これらは通常 /etc/X11 に配置されます。
xorg.conf 設定ファイルと xorg.conf.d ディレクトリのファイルは、任意の順序で指定できるセクションに編成されています。 一般的なセクションの形式は、リスト 1 に示されています。 xorg.conf のセクションレイアウト
Section "SectionName" SectionEntry ... EndSection
もっと見るもっと見るアイコン
Xorg コマンドは、実際には通常 /usr/bin にある X
コマンドからのシンボリックリンクである。 ルートとして Xorg
コマンドを実行し、X サーバーが動作していないことを確認する必要があります。 これを行う1つの方法は、Xなしでマルチユーザーモードで起動するようにGRUB2スタンザを編集することです。 ブートメニューのエントリを編集し、図 2 に示すように `linux boot/vmlinuz…’ の行の最後に 3
を追加するだけです。 X
なしでマルチユーザーモードで起動する
もし systemd を使っているなら、3
の代わりに systemd.unit=multi-user.target
を使えます。
Xorg -configure
はハードウェアの利用できるデバイスドライバーとプローブがロードされます。 多くのシステムで動作しますが、man ページによれば、いくつかのシステムで問題があります。 Fedora のドキュメントでは、デフォルトの :0 表示の代わりに :1 表示を使用することを推奨しているので、プレーンな Xorg -configure
が動作しない場合、Xorg :1 -configure
を試してみると良いでしょう。
私の openSUSE Tumbleweed システムでこの方法を使って生成したサンプルファイルをリスト 2 で示しています。 xorg.conf の例
に示すように、システムによって検出されたディスプレイ デバイスに関する情報を /sys/class/drm で見つけることができます。 Detected displays from /sys/class/drm
xrandr コマンドを使用してその能力を照会することができます。 リスト 4 は、ディスプレイが接続されたノートブックの drm 情報と xrandr
からの対応する出力を示しています。 xrandr を使用してディスプレイの能力を判断する
XkbVariant オプションは、2 つのレイアウトのうちどのバリエーションを使用すべきかを定義します。 us レイアウトの場合、デフォルトのバリアントが使用されます。 sk レイアウトの場合、qwerty バリアントが使用されます。 XkbOptions
オプションは、ユーザーが CapsLock キーを使用してレイアウトを切り替えることができることを指定します。 キーボード設定の更新
localectl コマンドを使用したほうがよいかもしれません。 しかし、localectl status
は、リスト 6.
リスト 6 に示すように、システムが再起動されたときにこれらの変更が拾われたことを示します。 localectl を使用してキーボードの状態を表示する
通常、仮想デスクトップ間でウィンドウを移動でき、複数の大きなウィンドウを開いている場合に非常に便利です。
タイル型ウィンドウ マネージャーとは対照的に、スタッキング ウィンドウ マネージャーでは、ディスプレイの端に重なるウィンドウも含め、ディスプレイでサポートされるあらゆるサイズのウィンドウを使用できます。 図 4 は、4 つのウィンドウが重なっている Openbox スタッキング ウィンドウ マネージャの例で、新しいアプリケーションを開くためのメニューが表示されています。 Openbox スタッキング ウィンドウ マネージャー
基本的なスタッキング ウィンドウ マネージャーは、フォーカスがあるウィンドウが変更または移動、閉鎖、サイズ変更されると、ディスプレイ上のすべてのウィンドウを再描画する原則で動作します。 これは、Z オーダー全体が処理されるため、画面のさまざまな領域で複数の書き換えが発生する可能性があります。 アルゴリズムを使用して、不要な書き換えの量を最小限に抑えることができます。
基本的なスタッキングの考えに対する改良は、合成ウィンドウ・マネージャです。 このようなウィンドウ・マネージャは各ウィンドウの内容のバッファを保持し、これらを単一のウィンドウにマージまたはコンポジット(合成)する。 そして、更新された部分だけがディスプレイカードのバッファに書き込まれる必要があります。 Compiz は合成ウィンドウマネージャの一例であり、KDE や GNOME などのデスクトップ環境も合成ウィンドウマネージャを使用しています。
デスクトップ環境は一般に、グラフィカルなログイン・グリーター、グラフィカルなシステムメニュー、時刻などのウィジェット、オープンアプリケーションアイコンなどを表示するトレイなどのフル装備のユーザー体験を提供します。 統合されたアプリケーションのスイートは、通常、ユーザーに一貫したエクスペリエンスを提供します。 ほとんどのウィンドウ マネージャーは、完全なデスクトップ環境よりもはるかに軽量です。
Figure 5 は、合成ウィンドウ マネージャーまたはデスクトップ環境における透過性の概念を示しています。 ターミナルウィンドウのタイトルバー上でマウスの左ボタン(ボタン1)を押しながら、移動の準備をします。 表示が変わり、その下にどのようなウィンドウがあるかが表示されます。 これは、両方を表示させたいときに、あるウィンドウを別のウィンドウの上に移動させるのに役立つかもしれません。
図 5. KDE Plasma デスクトップでの透過性
Figure 6 は Fedora 上の GNOME 3.28 を示しています。 この画面の左上にある Activity ボタンをクリックすると、画面の左側にアイコン化されたお気に入りのリストが表示され、実行中のアプリケーションのセットが小さなウィンドウで表示されます。 お気に入りをクリックしたり、スモールウィンドウをクリックしたり、画面上部の検索ボックスでプログラムを検索したりすることができます。 この特定の例では、トップバーの曜日と時刻をクリックして、利用可能なアップデートや最後に完了したコマンドなどのいくつかのメッセージと、追加の日付と時刻の情報を表示するウィジェットを開いています。 右上のアイコンは、スピーカーの音量、ネットワーク設定、アクセシビリティ オプション、およびシャットダウン、ログアウト、または再起動オプションなどの機能にアクセスすることができます。 Fedora GNOME のアクティビティとウィジェット
デスクトップ環境には、デスクトップまたはシステムのさまざまな側面を管理するのに役立つ統合アプリケーションが頻繁に含まれていることを述べました。 図 7 は、ディスプレイの設定で開いた Fedora GNOME 3.28 の設定ダイアログです。 この例は、外付けの Viewsonic モニターを持つノートブックのものです。 この場合の一般的な選択は、2 つの画面を 1 つのディスプレイとして結合するか、1 つの画面の内容をもう 1 つの画面にミラーリングすることです。 この場合、内蔵ディスプレイを外部モニターの論理的な右側に配置して、2 つのディスプレイを結合することを選択します。 Fedora GNOME 画面設定ダイアログ
xorg.conf ファイルで画面の解像度を変更できるように、コンポジターにウィンドウを 100% または 200% にスケールするように指示することもできます。 利用可能なスケーリングは、使用している特定のデスクトップと同様に、モニター サイズに依存する場合があります。 私はUHD(4K)モニターと、非常に小さなネイティブテキスト解像度を読み取ることができない目を持っています。 そのため、そのモニター上で、私は頻繁に 200% のスケーリング率を使用します。
GNOME 設定を使用して行った変更は xorg.conf を更新しないことに注意してください。 代わりに、これらの設定はホーム ディレクトリの .config/monitors.xml ファイルに保存されます。 GNOME は、ホーム ディレクトリの下にある dconf データベースで、他のディスプレイやキーボードの設定も管理しています。 これらの設定をホームディレクトリに置くことで、あなただけに適用されます。
複数のデスクトップ環境またはウィンドウ マネージャーをインストールしている場合、それらの間でどのように選択するのか不思議に思うかもしれません。 このチュートリアルで先に説明したようにマルチユーザーモードで起動し、 startx
のようなコマンドを実行すると、適切なマネージャで X を起動することができます。 GNOME のようなデスクトップ環境がグリータを提供している場合、おそらくグリータ画面で設定の選択肢があるはずです。 図 8 は、私の Fedora 28 システムにインストールされた選択肢を示したものです。 Fedora GNOME 3 greeter with WM selection
Manage access to the X server and display applications remotely
これまで、1 つ、あるいは、2 つのモニターを備えたデスクトップ コンピューター上で X を実行する例を見てきました。 X サーバーは、単一のディスプレイを、入力デバイスの共通セットを共有するモニターの集合体として扱います。
そのため、図 7 に示すノートブックには、内蔵モニターと外部モニターがありますが、ディスプレイは 1 つです。 この例では、2 つのモニターは結合しているかのように動作します。 これにより、1つの論理的な画面となり、ウィンドウをモニター間で移動したり、分割して表示したりすることができます。
X は hostname:displaynumber.screennumber という形式のディスプレイに 3 つのパートからなる名前を使用します。hostname はコンピュータのホスト名、displaynumber は特定のディスプレイを説明する 0 から始まる番号、screennumber は 2 つ以上のモニタが単一の論理画面としてではなく別の画面として扱われる場合に適用されます。 hostnameとscreennumberはどちらも省略可能なので、最も一般的なディスプレイ表記は:0です。 現在の設定は、リスト 7.
に示すように、DISPLAY
環境変数で確認することができます。 DISPLAY 環境変数
ian@attic5-u18:~$ echo $DISPLAY:0
Show moreShow more icon
DISPLAY を設定すれば、どんなユーザーでも画面上に出力を書き込めると思っているかもしれませんが、X にはアクセス制御の制限があるのです。 X サーバに接続する 3 つの方法を紹介します。
- Use ssh with X forwarding
- Use Xauthority and xauth
- use host or user control with xhost
他のディスプレイで X を使う最も安全な方法は X forwarding (tunneling とも呼ばれます) を使用することです。 これは接続する SSH サーバで、設定ファイル /etc/ssh/sshd_config の X11Forwarding yes
という行で有効になっていなければなりません。 また、クライアント側でも、ssh
コマンドに-X
(大文字のXです)というオプションを指定して、有効にする必要があります。 リスト 8 では、su - jane
を使用してシステムのユーザー jane に切り替えた後、ssh -X jane@localhost
を使用するとどうなるかを比較しています。 どちらの場合も、xclock
コマンドを実行して、画面に小さな時計を表示しようとします。
Listing 8. X 転送
DISPLAY 変数が localhost:10.0 に設定されていることに注目してください。 sshd サーバは事実上、ターゲットシステム上にあなたのための X サーバを作成しているのです。 システム上の実際の X サーバと干渉しないようにしたいものです。 そのため、設定ファイル /etc/ssh/sshd_config には X11DisplayOffset 10
という行があり、ssh 上の X サーバーの (0 からの) 開始オフセットを指定しています。 デフォルトは 10 で、通常シングルユーザーのワークステーションでは十分ですが、 マルチユーザーシステムでは増やす必要があるかもしれません。 サーバーへの 2 番目の ssh 接続は、ディスプレイ 11 を割り当てられ、以下同様です。
他の人が X サーバーに接続できるようにする 2 番目の方法は、Xauthority 方法です。 Xauthority ファイルには、X サーバーに接続するときに使用される認証情報が含まれています。 XAUTHORITY
環境変数は現在使用されているファイルの名前を指定します。私の Ubuntu 18 システムでは /run/user/1000/gdm/Xauthority のようなシステムが生成したファイル、または独自の .Xauthority ファイルが使用されます。
新しい権限をリストアップ、抽出、またはマージするには、xauth
コマンドを使用します。XAUTHORITY
環境変数にあるもの以外の Xauthority ファイルを指定するには、-f
オプションを使用します。 コマンドラインからxauth
コマンドを指定するか、起動してプログラム内からコマンドを使用することができます。 リスト 9 では、いくつかの例を示し、ディスプレイ :0 に対する私の権限を auth-ian.
Listing 9 という名前のファイルに抽出しています。 xauth を使用した権限情報の抽出
XAUTHORITY 環境変数を設定する方法を示しています。 これで、ユーザー jane は私のディスプレイにアプリケーションを表示できるようになります。
Listing 10. xauth を使用して権限情報をマージする
xhostコマンドを使用する方法です。 ワークステーションでは、他のユーザとして実行中にグラフィカルなプログラムを開くことができるようにするために、これを使用することがよくあります。 オプションなしの xhost
コマンドは、現在のアクセス制御リストを表示する。 システムまたはユーザを追加で許可するには、+
オプションに名前を付けて使用する。 リスト 11 では、ローカルシステムのユーザー john をアクセス制御リストに追加し、ユーザー john がグラフィカルな xclock
プログラムを開いている様子を示しています。 xhost を使用して 1 人のローカルユーザーを有効にする
xhost +local: を使用してすべてのローカル非ネットワーク型ユーザーを有効にします。 local
.
Listing 12 の最後にあるコロン (:) に注意してください。 xhost を使用してすべてのローカル非ネットワークユーザーを有効にする
+ の代わりに -
を使用します。
セキュリティのために、xauth
や xhost
ではなく、SSH トンネリングや場合によっては Virtual Network Computing (VNC) のような他のソリューションを使用すべきです。 VNC はこのチュートリアルの範囲外ですが、SSH トンネリングより良いパフォーマンスを提供します。
When things go wrong
X の設定情報の非常に多くの可能なソースで、ログ情報を探す場所を知っておく必要があります。 個々の X セッションに関連するエラーは、ホーム ディレクトリの .xsession-errors またはおそらく .xsession-errors-:0 にある可能性があります。 接尾辞 :0 は、ディスプレイ :0 のエラーのためです。
メインの X ログは /var/log に置かれています。 名前は通常 /var/log/Xorg.0.log で、0 はあなたのディスプレイ番号です。
Wayland, a new compositing window manager
最近、Wayland という新しいディスプレイサーバとコンポジットプロトコルが開発されました。 このモデルでは、アプリケーションがウィンドウの内容をオフスクリーンバッファに自ら作成します。 コンポジターとサーバーは統合されています。 Wayland の目的は、X よりもシンプルで効率的なソリューションを提供することです。Wayland のほとんどは、プロジェクトを可能にする既存のドライバーとインフラストラクチャを再利用しています。 もしリモートウィンドウ表示が必要なら、VNC のような他のソリューションが使われるかもしれません。
Weston は Wayland を実装したリファレンスコンポジターです。 GNOME、KDE、Enlightenment、および他のいくつかのウィンドウマネージャは、現在 Wayland をサポートしています。 Qt 5 や GTK+ などのツールキットも、Wayland をサポートしています。 執筆時点 (2018 年 12 月) では、Fedora と Ubuntu の両方がデフォルトのディスプレイ サーバーとして Wayland を出荷しています。
Xorg サーバーには、既存の X アプリケーションを Wayland コンポジターで実行可能にする XWayland が含まれています。
現在のほとんどの実装には、各セッションで X または Wayland を実行するという選択が依然として存在します。 GMS グリーターがセッションの種類を選択できるようにする方法の例として、図 7 を参照してください。 Fedora では、デフォルトで Wayland 上で GNOME を実行します。
また、ログインすることなく実行時に確認することも可能です。 Wayland を実行している場合、WAYLAND_DISPLAY
環境変数が設定されます。 systemd を使用しているシステムでは、loginctl
コマンドを使用してログイン・セッション番号を確認し、さらにそれを使用してセッションの種類を確認することができます。 リスト 13 は、これらのツールを、最初は Wayland を使用する Fedora 28 システムで、次に Xorg を使用する Ubuntu 18 システムで示しています。 X と Wayland のどちらを使用しているかを判断する
Resources
- The Linux Professional Institute Web サイトで、資格の詳しい目的、タスクリスト、サンプル質問を見つけることができます。 特に、以下を参照してください。 LPIC-1: System Administrator Certification program 詳細 LPIC-1 exam 101 objectives および LPIC-1 exam 102 objectives。 最新の目標については、常にLinux Professional InstituteのWebサイトを参照してください。
- Learn Linux, 101: A roadmap for LPIC-1: LPI Version 4.0 April 2015 and Version 5.0 2018 objectivesに基づいてLPIC-1認定の学習に役立つIBM Developerチュートリアルの包括的リスト
- LPIC-1: Linux Server Professional Certification: Linux Professional InstituteによるLPIC-1認定に関する情報
- The XKB Configuration Guide: X keyboard configuration
- X Window System を xorg.conf ファイルを使用して設定する。 Fedora で X を設定する
。