106.1 レッスン 1
Certificate: |
LPIC-1 |
---|---|
Version: |
5.0 |
Topic: |
106 ユーザーインターフェイスとデスクトップ |
Objective: |
106.1 X11のインストールと構成 |
Lesson: |
1 of 1 |
はじめに
X Window Systemは、画面にテキストとグラフィックスを表示するためのソフトウェアスタックです。Xクライアントの全体的な外観とデザインはX Window System自体によって決定されるのではなく、個々のXクライアント、ウィンドウマネージャー(Window Maker、Tab Window Managerなど)、ないしは、KDE、GNOME、Xfceなどの デスクトップ環境 によって処理されます。デスクトップ環境については、後のレッスンで説明します。このレッスンでは、X Window Systemの基本アーキテクチャと、管理者がXを構成するための一般的なツールを取り上げます。
X Window Systemはクロスプラットフォームであり、Linux、BSD、Solaris、その他のUnix系システムなど、さまざまなオペレーティングシステムで実行されます。AppleのmacOSやMicrosoft Windowsで利用可能なものもあります。
最新のLinuxディストリビューションで使用されているXプロトコルは X.org バージョン11で、通常は X11 と表記されます。Xプロトコルは、XクライアントとXサーバー間の通信機構です。 XクライアントとXサーバーの違いを以下で説明します。
Note
|
X Window Systemの前身は、IBM、DEC、およびMITの共同開発物である W と呼ばれるウィンドウシステムでした。このソフトウェアは1984年に Athenaプロジェクト から生まれました。新しいディスプレイサーバーの開発を始めたときに、開発者はアルファベットの文字 “X” を選択しました。現在、X Window Systemは X.orgファウンデーション によって管理されています。 |
X Window Systemのアーキテクチャ
X Window Systemは、基本的な2次元図形(拡張機能によって3次元図形)をディスプレイに描画するための仕組みを提供します。クライアントとサーバーに分割されており、グラフィカルなデスクトップを備えるシステムでは、両方のコンポーネントが同じコンピューター上にあります。クライアントコンポーネントは、ターミナルエミュレータ、ゲーム、Webブラウザなど、アプリケーションの形を取ります。それぞれのクライアントアプリケーションは、コンピュータ画面上に表示するウィンドウの位置とサイズをXサーバーに通知します。クライアントがそのウィンドウに表示する内容を生成し、Xサーバーは要求された図形を画面に表示します。X Window Systemは、マウス、キーボード、トラックパッドなどのデバイスからの入力も処理します。
X Window Systemはネットワーク対応であり、ネットワーク上の異なるコンピューターから、複数のXクライアントが1つのリモートXサーバーに描画要求を行うことができます。つまり、ユーザーは、ローカルシステムには存在していない、リモートシステム上のグラフィカルアプリケーションにアクセスできます。
X Window Systemの重要な特徴は、モジュール化されていることです。X Window Systemが発展する過程で、新しい機能が開発されて、そのフレームワークに追加されました。それらの新しいコンポーネントは、Xサーバーの拡張機能として追加され、コアX11プロトコルはそのまま残されています。これらの拡張機能は、Xorg のライブラリファイルに含まれています。Xorgライブラリには、libXrandr
、libXcursor
、libX11
、libxkbfile
などが含まれていて、それぞれがXサーバーに拡張機能を提供します。
ディスプレイマネージャー は、ローカルないしネットワーク上のコンピュータへのグラフィカルログインを提供します。コンピューターがブートするとディスプレイマネージャーが起動して、ユーザー認証を行ってからそのユーザー用のXサーバーセッションを開始します。ディスプレイマネージャには、Xサーバーを稼働させ続ける役割もあります。ディスプレイマネージャーには、GDM、SDDM、LightDMなどがあります。
実行中のXサーバーの各インスタンスは、識別のために ディスプレイ名 を持っています。ディスプレイ名の書式は次の通りです:
hostname:displaynumber.screennumber
グラフィカルアプリケーションはディスプレイ名を利用して、どのホスト(リモートX接続の場合)のどの画面に表示するかを決定します。
hostname
は、アプリケーションのウィンドウを表示するシステムの名前を示します。ディスプレイ名にhostnameが含まれていない場合は、ローカルホストが仮定されます。
displaynumber
は、ラップトップの画面1枚でも、ワークステーションの複数画面でも、使用する「画面群」を示します。実行中の各Xサーバーセッションには、0
から始まる displaynumber
が与えられます。
デフォルトの screennumber
は 0
です。物理的なスクリーンが1つしかない場合や、複数の物理的なスクリーンが1つのスクリーンとして動作するように設定されている場合に当ります。マルチモニター環境において、すべてのスクリーンが1つの論理的なスクリーンにまとめられている場合は、アプリケーションのウィンドウをスクリーン間で自由に移動できます。それぞれのスクリーンが互いに独立して動作するように設定されている場合は、それぞれのスクリーンにその中で開かれたアプリケーションウィンドウが収容され、ウィンドウをスクリーン間で移動することはできません。独立したスクリーンには、それぞれ番号が割り当てられます。 使用中のスクリーンが1つだけの場合、ピリオドとscreennumberは省略されます。
実行中のXセッションのディスプレイ名は、DISPLAY
環境変数に格納されています。
$ echo $DISPLAY :0
出力されたディスプレイ名の意味は次のとおりです:
-
使用中のXサーバーはローカルシステム上にあるため、コロンの左側には何もありません(hostnameが省略されています)。
-
コロンの直後の
0
(displaynumber) は、現在のXサーバーセッションが最初のセッションであることを示します。 -
論理画面は1つだけなので、screennumberは省略されています。
次の図で、この概念を説明します。上の例は(B)のケースに当たります:
- (A)
-
1つのモニター、1つのディスプレイ、および1つのスクリーン。
- (B)
-
2つの物理モニターを、1つのディスプレイとして構成。アプリケーションウィンドウを、2つのモニター間で自由に移動できます。
- (C)
-
(
:0
が示すように)1つのディスプレイですが、各モニターは独立したスクリーンです。両方の画面は、キーボードやマウスなどの入力デバイスを共有しますが、画面:0.0
で開いたアプリケーションを画面:0.1
に移動したり、その逆を行うことはできません。
アプリケーションを起動する画面を指定するには、アプリケーションを起動する前に、DISPLAY
環境変数にディスプレイ名を割り当てます。
$ DISPLAY=:0.1 firefox &
このコマンドでは、上図(C)の右側の画面でFirefox Webブラウザーを起動します。一部のツールキットには、アプリケーションに実行する画面を指示するためのオプションも用意されています。gtk-options(7)
のマニュアルページの --screen
と --display
に例があります。
Xサーバーの設定
伝統的に、Xサーバーのメインの設定ファイルは /etc/X11/xorg.conf
です。最新の Linux ディストリビューションでは、Xサーバーの開始時に自動的に設定ファイルが生成されるため、xorg.conf
ファイルが存在しないことがあります。
xorg.conf
ファイルは、セクション と呼ばれるブロックに分かれています。各セクションは Section
という語で始まり、その後に設定するコンポーネントを示す セクション名 が続きます。それぞれの Section
ブロックは、対応する EndSection
で終了します。典型的な xorg.conf
ファイルには、以下のセクションが含まれています:
InputDevice
-
キーボードやマウスのモデルやタイプを指定します。
InputClass
-
最近のLinuxディストリビューションでは、このセクションは通常
/etc/X11/xorg.conf.d/
の下にある別の設定ファイルにあります。InputClass
は特定のハードウェアではなく、キーボードやマウスなどのハードウェアデバイスの クラス を設定するために使用されます。以下は、/etc/X11/xorg.conf.d/00-keyboard.conf
ファイルの例です。Section "InputClass" Identifier "system-keyboard" MatchIsKeyboard "on" Option "XkbLayout" "us" Option "XkbModel" "pc105" EndSection
オプション
XkbLayout
は、Dvorak、QWERTY、右利き/左利き、言語など、キーボードのキーレイアウトを指定します。 オプションXkbModel
は、使用中のキーボードの種別を指定します。モデルやレイアウトとその説明は、xkeyboard-config(7)
にあります。キーボードレイアウトに関連するファイルは、/usr/share/X11/xkb
にあります。Chromebookコンピュータでのギリシャ語のPolytonicキーボードレイアウトの例は次のようになります。Section "InputClass" Identifier "system-keyboard" MatchIsKeyboard "on" Option "XkbLayout" "gr(polytonic)" Option "XkbModel" "chromebook" EndSection
また、実行中のXセッションで
setxkbmap
コマンドを使用して、キーボードのレイアウトを変更することもできます。 Chromebookコンピュータでギリシャ語のPolytonicレイアウトを設定するコマンドの例を次に示します。$ setxkbmap -model chromebook -layout "gr(polytonic)"
この設定は、Xセッションの間だけ有効です。変更を永続化するには、
/etc/X11/xorg.conf.d/00-keyboard.conf
ファイルを変更して必要な設定を追加します。Notesetxkbmap
コマンドは、 Xキーボード拡張機能 (XKB)を使用します。これは、X Window System の拡張機能による付加機能の一例です。最新のLinuxディストリビューションでは、(
systemd
の一部として)localectl
コマンドが提供されています。このコマンドはキーボードレイアウトを変更することもできて、設定ファイル/etc/X11/xorg.conf.d/00-keyboard.conf
を自動的に生成します。今度はlocalectl
コマンドを使用して、ギリシャ語のPolytonicキーボードレイアウトを Chromebook に設定してみましょう。$ localectl --no-convert set-x11-keymap "gr(polytonic)" chromebook
ここでは、
localectl
がホストのコンソールキーマップを変更しないように、--no-convert
オプションを指定しています。 Monitor
-
Monitor
セクションには、使用する物理モニターとその接続先を記述します。2番目のディスプレイポートに接続されたモニターをプライマリモニターとして使用する設定例を次に示します。Section "Monitor" Identifier "DP2" Option "Primary" "true" EndSection
Device
-
Device
セクションには、使用する物理的なビデオカードを記述します。このセクションには、ビデオカードのドライバとして使用するカーネルモジュールと、マザーボード上の物理的な位置(訳注: PCIのバス番号)も含まれています。Section "Device" Identifier "Device0" Driver "i915" BusID "PCI:0:2:0" EndSection
Screen
-
Screen
セクションでMonitor
セクションとDevice
セクションを結び付けます。Screen
セクションの例を次に示します:Section "Screen" Identifier "Screen0" Device "Device0" Monitor "DP2" EndSection
ServerLayout
-
ServerLayout
セクションは、マウス、キーボード、画面などのすべてのセクションを、1つのX Window Systemインターフェイスにグループ化します。Section "ServerLayout" Identifier "Layout-1" Screen "Screen0" 0 0 InputDevice "mouse1" "CorePointer" InputDevice "system-keyboard" "CoreKeyboard" EndSection
Note
|
設定ファイルにすべてのセクションが存在とは限りません。セクションが存在しない場合は、実行中のXサーバーインスタンスのデフォルト値が使われます。 |
ユーザー指定の設定ファイルも /etc/X11/xorg.conf.d/
に置かれます。ディストリビューションが提供する設定ファイルは、/usr/share/X11/xorg.conf.d/
にあります。/etc/X11/xorg.conf.d/
に設定ファイルがある場合、/etc/X11/xorg.conf
ファイルより先に読み込まれます。
コンピュータ上で実行中のXサーバーインスタンスに関する情報を表示するには、xdpyinfo
コマンドを使用します。実行例を以下に示します:
$ xdpyinfo name of display: :0 version number: 11.0 vendor string: The X.Org Foundation vendor release number: 12004000 X.Org version: 1.20.4 maximum request size: 16777212 bytes motion buffer size: 256 bitmap unit, bit order, padding: 32, LSBFirst, 32 image byte order: LSBFirst number of supported pixmap formats: 7 supported pixmap formats: depth 1, bits_per_pixel 1, scanline_pad 32 depth 4, bits_per_pixel 8, scanline_pad 32 depth 8, bits_per_pixel 8, scanline_pad 32 depth 15, bits_per_pixel 16, scanline_pad 32 depth 16, bits_per_pixel 16, scanline_pad 32 depth 24, bits_per_pixel 32, scanline_pad 32 depth 32, bits_per_pixel 32, scanline_pad 32 keycode range: minimum 8, maximum 255 focus: None number of extensions: 25 BIG-REQUESTS Composite DAMAGE DOUBLE-BUFFER DRI3 GLX Generic Event Extension MIT-SCREEN-SAVER MIT-SHM Present RANDR RECORD RENDER SECURITY SHAPE SYNC X-Resource XC-MISC XFIXES XFree86-VidModeExtension XINERAMA XInputExtension XKEYBOARD XTEST XVideo default screen number: 0 number of screens: 1 screen #0: dimensions: 3840x1080 pixels (1016x286 millimeters) resolution: 96x96 dots per inch depths (7): 24, 1, 4, 8, 15, 16, 32 root window id: 0x39e depth of root window: 24 planes number of colormaps: minimum 1, maximum 1 default colormap: 0x25 default number of colormap cells: 256 preallocated pixels: black 0, white 16777215 options: backing-store WHEN MAPPED, save-unders NO largest cursor: 3840x1080 current input event mask: 0xda0033 KeyPressMask KeyReleaseMask EnterWindowMask LeaveWindowMask StructureNotifyMask SubstructureNotifyMask SubstructureRedirectMask PropertyChangeMask ColormapChangeMask number of visuals: 270 ...
この例では、ディスプレイの名前 (環境変数 DISPLAY
と同じ)、Xサーバーのバージョン、Xorg拡張の数と一覧、画面自体に関する詳細な情報など、重要な情報を太字で記載しています。
基本的なXorg設定ファイルの作成
最近のLinuxでは、システムの起動時にXが自動設定されますが、今でも xorg.conf
ファイルを使うことができます。永続的な /etc/X11/xorg.conf
ファイルを生成するには、次のコマンドを実行します。
$ sudo Xorg -configure
Note
|
すでにXセッションが起動している場合は、コマンドに別の $ sudo Xorg :1 -configure |
一部のLinuxディストリビューションでは、X
が Xorg
へのシンボリックリンクであるため、Xorg
の代わりに X
コマンドを使うこともできます。
xorg.conf.new
ファイルがカレントディレクトリに作成されます。このファイルの内容は、Xサーバーがローカルシステムのハードウェアとドライバーで利用可能であることを確認したものです。このファイルを使用するには、ファイルを /etc/X11/
ディレクトリに移動し、名前を xorg.conf
に変更します。
$ sudo mv xorg.conf.new /etc/X11/xorg.conf
Note
|
X Window Systemのコンポーネントに関する詳細情報は、以下のmanページに記載されています: |
Wayland
Waylandは、X Window Systemに代わるものとして設計された新しい表示プロトコルです。最近のLinuxディストリビューションの多くは、これをデフォルトのディスプレイサーバとして使用しています。Xよりもシステムリソースの消費が少なく、インストール時のフットプリントも小さくなるように設計されています。このプロジェクトは2010年に始まり、現在も現役および元X.org開発者による作業を取り込みながら活発に開発が行われています。
X Window Systemとは異なり、クライアントとカーネルの間で動作するサーバーインスタンスはありません。代わりに、アプリケーションは直接ないしツールキット(Gtk+やQtなど)経由で、クライアントウィンドウに表示します。カーネルはWaylandプロトコルで、要求をWayland コンポーザ に転送します。 コンポーザは、デバイス入力を処理し、ウィンドウの構成と管理を行い、出力された要素を結合して画面に出力するシステムの一部分です。
Gtk+ 3 や Qt 5 などの最新のツールキットのほとんどは、X Window System と Wayland のいずれにも対応しています。しかしながら現時点では、すべてのアプリケーションが、Waylandでの表示をサポートしているわけではありません。X Window System用に書かれたアプリケーションやフレームワークは、XWayland に内包されたX Window System環境で実行されます。XWaylandシステムには、Waylandクライアントとして実装されたスタンドアロンのXサーバーインスタンスが備わっていて、それがクライアントウィンドウのコンテンツを(Wayland経由で)表示します。
X Window Systemが使用中の画面を識別するために DISPLAY
環境変数を使用するように、Waylandプロトコルは WAYLAND_DISPLAY
環境変数を使用します。Waylandを実行しているシステムのサンプル出力を以下に示します:
$ echo $WAYLAND_DISPLAY wayland-0
この環境変数は、Xを実行しているシステムでは使用できません。
演習
-
システムで使用できるXorg拡張機能を確認するコマンドは何ですか?
-
コンピュータ用の新しい10ボタンマウスを入手しましたが、すべてのボタンを正しく機能させるには追加の設定が必要です。Xサーバー設定の他の部分に影響をあたえずに、このマウス用の新しい設定ファイルをどのディレクトリに作成し、どのセクションに記入しますか?
-
Linuxシステムにおいて、Xサーバーの実行を維持するコンポーネントは何ですか?
-
新しい
xorg.conf
ファイルを作成する、X
コマンドのオプションは何ですか?
発展演習
-
3台のモニタを1つのディスプレイとして使用するように構成された
lab01
というシステムを使用しています。3つ目のスクリーンに開いたリモートマシンのターミナルエミュレータで、DISPLAY
環境変数の値を表示するとどうなりますか? -
X Window Systemで使用するキーボード設定ファイルを作成するコマンドは何ですか?
-
一般的なx86_64アーキテクチャのマシンにインストールしたLinuxでは、キーボードから Ctrl+Alt+F1 〜 F6 を押すことで仮想端末に切り替えることができます。グラフィカルインターフェイスを備えたマルチメディアシステムをセットアップするように求められたので、不正利用を防ぐためにこの機能を無効にする必要があります。
/etc/X11/xorg.conf.d/10-kiosk.conf
に設定ファイルを作成することにします。ServerFlags
セクション(Xorgのグローバルオプションを置きます)に指定するオプションは何ですか?xorg(1)
のマニュアルページを参照して、適切なオプションを見つけてください。
まとめ
このレッスンでは、Linuxで使用されるX Window Systemについて説明しました。X Window Systemは、さまざまな設定ファイルの定義に応じて、画面に画像やテキストを描画します。マウスやキーボードなどの入力デバイスの設定は、X Window Systemによって行われます。このレッスンでは、以下の項目を説明しました。
-
X Window System のアーキテクチャ概要
-
X Window System 設定ファイルと、それらのファイルシステム上の位置
-
DISPLAY
環境変数の使い方 -
Wayland 簡単な紹介
以下のコマンドと設定ファイルについて説明しました:
-
Xorgを使用するマシンにおいて、
setxkbmap
やlocalectl
を使用してキーボードレイアウトを変更すること。 -
新しい
/etc/X11/xorg.conf
設定ファイルを作成する、Xorg
コマンドのオプション。 -
重要なXorg設定ファイルの内容:
/etc/X11/xorg.conf
、/etc/X11/xorg.conf.d/
、/usr/share/X11/xorg.conf.d/
。 -
Xサーバーセッションに関する情報を表示する
xdpyinfo
コマンド。
演習の解答
-
システムで使用できるXorg拡張機能を確認するコマンドは何ですか?
$ xdpyinfo
-
コンピュータ用の新しい10ボタンマウスを入手しましたが、すべてのボタンを正しく機能させるには、追加の設定が必要です。Xサーバー設定の他の部分に影響をあたえずに、このマウス用の新しい設定ファイルをどのディレクトリに作成し、どのセクションに記入しますか?
ユーザー定義の設定は
/etc/X11/xorg.conf.d/
にあり、マウス設定を行うセクションはInputDevice
です。 -
Linuxシステムにおいて、Xサーバーの実行を維持するコンポーネントは何ですか?
ディスプレイマネージャーです。
-
新しい
xorg.conf
ファイルを作成する、X
コマンドのオプションは何ですか?-configure
X
コマンドはXorg
コマンドへのシンボリックリンクです。
発展演習の解答
-
3台のモニタを1つのディスプレイとして使用するように構成された
lab01
というシステムを使用しています。3つ目のスクリーンに開いたリモートマシンのターミナルエミュレータで、DISPLAY
環境変数の値を表示するとどうなりますか?$ echo $DISPLAY lab01:0.2
-
X Window Systemで使用するキーボード設定ファイルを作成するコマンドは何ですか?
$ localectl
-
一般的なx86_64アーキテクチャのマシンにインストールしたLinuxでは、キーボードから Ctrl+Alt+F1 〜 F6 を押すことで仮想端末に切り替えることができます。グラフィカルインターフェイスを備えたマルチメディアシステムをセットアップするように求められたので、不正利用を防ぐためにこの機能を無効にする必要があります。
/etc/X11/xorg.conf.d/10-kiosk.conf
に設定ファイルを作成することにします。ServerFlags
セクション(Xorgのグローバルオプションを置きます)に指定するオプションは何ですか?xorg(1)
のマニュアルページを参照して、適切なオプションを見つけてください。Section "ServerFlags" Option "DontVTSwitch" "True" EndSection