【Linux】X Window Systemの使い方

LinuxにおけるX Window Systemの使い方についてまとめました。

X Window Systemとは

X Window System(X、X11)は、Linux系OSでGUIを実現するために使用されています。
X Window Systemは以下のようなクライアント・ サーバモデルで構成されます。

  • X サーバ
    • ユーザのハードウェア管理(ディスプレイの表示、キーボードからの入力処理など)を行うプログラム。ディスプレイ、キーボード、マウスなどが接続されたローカルホスト上で実行される。
  • X クライアント
    • データを処理し、Xサーバへ話しかけるプログラム。要はブラウザやエディタなど、ウィンドウを表示するプログラム。リモートホスト上で実行される。
  • アプリケーションサーバ
    データを処理しクライアントへ話しかけるプログラム。リモートホスト上で実行される
  • アプリケーションクライアント
    • ユーザのディスプレーや入力デバイスが接続されたプログラム。ローカルホスト上で実行される。

X Window System の設定(xorg.conf)

X Window System の設定は以下のコマンドを実行して生成される「/root/xorg.conf.new」をコピーしてファイル名を変更した「/etc/X11/xorg.conf」ファイルで行います。

$ Xorg -configure

「/etc/X11/xorg.conf」ファイルは、複数のセクションの集まりで構成されます。
各セクションは Section “<セクション名>” 行で始まり、EndSection行で終了します。
「#」マークで始まる行は、コメント行です。

セクション名 概要
ServerFlags グローバルなX サーバの設定
ServerLayout Xサーバで制御される入出力デバイスの定義
Files X サーバへのサービス用パスを設定
Module Xサーバがロードする「/usr/X11R6/lib/modules/」内のモジュール(Xサーバの追加機能)を指定。
InputDevice Xサーバに対して1つの入力デバイスを設定。 システムには2つ以上のInputDeviceセクション(キーボード及びマウス)が必要となる。
Monitor モニタのタイプを設定。
Device ビデオカードを設定。1つ以上のDeviceセクションが必要。
Screen 1つのビデオカードを、DeviceセクションとMonitorセクションを参照して1つのモニタに結合する。
DRI DRI(Direct Rendering Infrastructure)用のパラメータを設定。DRIは、3D ソフトウェアアプリケーションが最新のビデオハードウェアに組み込まれた 3D ハードウェアアクセラレーション機能を活用できるようにするインターフェース。

X Window Systemの操作

① Xサーバー側(ローカル側)で以下のコマンドを実行してXサーバー接続許可リストに追加し、Xクライアントホスト(リモート)からのアクセスを許可します。

$ xhost +Xクライアントホスト名

なお、すべてのクライアントからのアクセスを許可する場合は「xhost +」、アクセス許可を取り消す場合は「xhost -Xクライアントホスト名」を実行します。

②Xクライアント側(リモート側)で「DISPLAY=ホスト名:ディスプレイ番号.スクリーン番号」を実行し、環境変数DISPLAYにXサーバを指定します。

$ DISPLAY=ホスト名:0.0
$ export DISPLAY
  • 補足
    • 「ホスト名(Xサーバ名)」もしくは「XサーバのIPアドレス」を指定
    • ディスプレイ番号とスクリーン番号は通常0

③Xクライアント側で以下のコマンドを実行し、アプリケーションを起動します。

$ xclock &

④Xサーバ側にxclockが表示されます。

X Window Systemの開始

ランレベル3の状態で「startx」コマンドを実行します。
(統合デスクトップ環境のGUI画面が表示されます、つまりCUI環境からGUI環境に移行します)

$ startx 

② xinit コマンドを実行します

$  xinit

③ユーザーのホームディレクトリ内の .xinitrc ファイルを検索し、デスクトップ環境、実行すべき他の X クライアントアプリケーションを定義します。
.xinitrcファイルがない場合、システムデフォルトの「/etc/X11/xinit/xinitrc」ファイルを代わりに使用します。

④xinitrcスクリプトは、ユーザーのホーム ディレクトリ内で「.Xresources」「.Xmodmap」「.Xkbmap」、「/etc/X11/」ディレクトリ内で「Xresources」「Xmodmap」「Xkbmap」などのユーザー定義ファイルやシステムファイルを探し、見つかればそのファイルに従って設定されます。
例えば、XmodmapとXkbmapは、xmodmapユーティリティに使用され、キーボードの設定を行います。

⑤xinitrcスクリプトが「/etc/X11/xinit/xinitrc.d/」ディレクトリ内の全てのスクリプトを実行します。

⑥xinitrcスクリプトは、ユーザーのホームディレクトリ内の .Xclientsを実行します。
.Xclientsスクリプトは .Xclients-default ファイルにあるユーザー指定のデスクトップ環境を起動します。

⑦ウィンドウマネージャが開始され、デスクトップ環境で操作できます。

X Window Systemの主なコマンド

Xサーバー側のコマンド

  • xauth list
    • Xサーバごとの接続に使用される資格情報を表示

Xクライアント側のコマンド

  • xauthコマンド
    • ユーザ単位でXサーバへのアクセスを制限。
    • xauthのaddコマンドで、接続ユーザの「~/.Xauthority」ファイル(クライアント認証ファイル)にXサーバと同じ資格情報を保存。
    • Xサーバと資格情報が一致したユーザのみアクセス可能になる。
  • xhost
    • ホスト単位でXサーバへのアクセス許可・不許可を制御。ホスト単位の制御はセキュリティ上好ましくないため、xauthコマンドでユーザ単位でXサーバへのアクセスを制限するのが一般的。

Xのウィンドウ情報を表示(xwininfoコマンド)

「xwininfo」コマンドは、Xのウィンドウ情報を表示します。

オプション 概要
-id ウィンドウID(id)を表示。ウインドウIDがわかると、マウスなしで、コマンド行から対象ウィンドウを指定できる。
-tree 全ての子ウィンドウを表示
-root rootウィンドウの情報を表示
-stats 指定したウィンドウの位置や外観の情報を表示

実行例

$ xwininfo

Xサーバのディスプレイ情報を表示(xdpyinfo コマンド)

xdpyinfoコマンドは、Xサーバのディスプレイ情報を表示します。

オプション 概要
-ext all 詳細情報を表示

実行例

$ xdpyinfo

X フォントサーバー(xfs)

X サーバーは、「/etc/X11/xorg.conf」ファイルのFilesセクションのFontPathディレクティブに指定してあるフォントサーバ(xfs)に接続し、フォント情報を取得します。

オプション 概要
alternate-servers フォントサーバーが利用できない場合にの代替フォントサーバーの一覧を指定。
catalogue 使用するフォントパスの順番の一覧を指定。
client-limit フォントサーバーが処理するクライアントの最大数を指定(デフォルトは10)。
default-point-size デフォルトのフォントを指定(デフォルトの120は、12pt)
default-resolutions X サーバーによりサポートされている解像度のリストを指定。
use-syslog システムエラーログを使用するか指定。

ウィンドウマネージャ(twm)

twm」は最小限の機能を備えたウィンドウマネージャです。
ウィンドウマネージャとは、 ウィンドウの外観、アイコン、カーソル、メニューなどを提供するXクライアントのアプリケーションの1つです。

ディスプレイマネージャ

ディスプレイマネージャの特徴は以下のとおりです。

  • デスクトップ環境を準備する
  • initやsystemdによりディスプレイマネージャーサービスが起動
  • ユーザにGUI環境のログインを提供

Xフォントサーバーにフォントを追加

以下の手順で追加します。

①以下のコマンドで「/usr/share/fonts/local/」ディレクトリを作成します。

$ mkdir ./usr/share/fonts/local/ 

②以下のコマンドをルート実行し、ディレクトリをxfsのパスに追加します。

$ chkfontpath --add /usr/share/fonts/local/  

③ 追加したいフォントファイルを「/usr/share/fonts/local/」ディレクトリにコピーします。

④ ルートで以下のコマンドを実行し、フォント情報を更新します。

$ ttmkfdir -d /usr/share/fonts/local/ -o /usr/share/fonts/local/fonts.scale

⑤ rootになり、以下のコマンドを実行し、xfsフォントサーバーを再読み込みします。

$ service xfs reload

【使用例】Xクライアント上で実行したGUIアプリケーションをXサーバ上のデフォルトディスプレイで表示させる場合の環境変数DISPLAYの設定

Xクライアント上で実行したGUIアプリケーションをXサーバ上のデフォルトディスプレイで表示させる場合、Xクライアント側の環境変数DISPLAYで以下のように表示先(Xサーバ)を指定します。

[Xサーバ]:ディスプレイ番号.スクリーン番号

デフォルトのディスプレイを使用する場合はディスプレイ番号に0を指定します。
例えば、XサーバのIPアドレスが「192.168.0.10」のとき環境変数DISPLAYで「192.168.0.10:0」もしくは「192.168.0.10:0.0」と指定します。

【使用例】Xクライアント上で実行したプログラム「xeyes」をXサーバのディスプレイに表示させる場合

Xクライアント上で実行したプログラム「xeyes」をXサーバのディスプレイに表示させる場合、以下の順でコマンドを実行します。
ここで、XサーバーのIPアドレスは「192.168.1.1」、XクライアントのIPアドレスは「192.168.1.2」とします。

Xサーバー側で以下のコマンドを実行し、xhostコマンドで、Xクライアントからのアクセスを許可します。

$ xhost +192.168.1.2

Xクライアント側で以下のコマンドを実行し、環境変数DISPLAYで表示先(Xサーバ)を指定し、Xサーバに表示させたいプログラム(xeyes)を実行します。

$ DISPLAY=172.16.0.1:0
$ export DISPLAY
$ xeyes &

関連ページ

LinuCの試験対策と例題まとめ
LinuCの試験対策と例題(学習サイト)についてまとめました。
404 NOT FOUND | Linux超入門
【Linuxコマンド入門】主なコマンドとサンプル集
Linuxコマンドの主な使い方とサンプル集について入門者向けにまとめました。

コメント