Hatena::Grouplinux2

Going My Linux Way このページをアンテナに追加 RSSフィード

2012年01月28日(土)

X のディスプレイ

| 12:26 | X のディスプレイ - Going My Linux Way を含むブックマーク はてなブックマーク - X のディスプレイ - Going My Linux Way X のディスプレイ - Going My Linux Way のブックマークコメント

X のディスプレイに関するちょいメモです。

記憶に基づいてます。間違いも含まれているかもです。

----

X サーバ

X は サーバ/クライアント モデルのシステムです。

X サーバは「ディスプレイに対する入出力」をサービスとして提供します。

X サーバは 1つの「ディスプレイ」をハンドルします。

X のディスプレイ

X でいう「ディスプレイ」は論理的な概念で、液晶ディスプレイとかの表示装置(ハードウェア)のことではありません。

ディスプレイは以下の要素を持ちます。

ディスプレイは 0 から始まるディスプレイ番号で識別されます。多くの場合は ディスプレイ番号 0 しか使われません。

スクリーン

ハードウェアとして、通常は表示装置が割り当てられます。

ビデオメモリだけ(画面なし)を割り当てることも可能*1です。

スクリーンは一つのディスプレイに複数あります。これらは 0 から始まるスクリーン番号で識別されます。多くの場合は スクリーン番号 0 しか使われません。

キャラクタ入力デバイス

ハードウェアとして、通常はキーボードが割り当てられます。

他のデバイスを割り当てることも可能と思われますが、例を知りません。

ポインティングデバイス

ハードウェアとして、通常はマウスが割り当てられます。

タブレットなどを割り当てることも可能です。

サーバクライアントの通信

X のサーバクライアントTCP で通信します。

TCP 通信なので、他のホストの X サーバに X アプリケーションの画面を表示させることもできます。(ただし、リモート X サーバアクセス許可の設定が必要です)

ディスプレイ番号 0 のサーバはポート 6000、番号 1 はポート 6001、... を listen します。

ただし、最近の実装では localhost の場合は (効率のため)TCP でなくプロセス間通信を使用します。

ディスプレイの指定

環境変数 DISPLAY は X クライアントデフォルトで使用するディスプレイを指定します。書式は以下の通りです。

  IPアドレス(or名前解決可能なホスト名) +「:」+ ディスプレイ番号

例です。

  DISPLAY=192.168.0.10:0  # 192.168.0.10 のディスプレイ番号 0

  DISPLAY=example.com:1   # example.com のディスプレイ番号 1

  DISPLAY=:0  # ホストを省略(localhostと解釈される)した場合

多くの X クライアントは -display オプションで明示的にディスプレイを指定できます。また、環境変数 DISPLAY が未設定の場合は DISPLAY=:0 と解釈して動作します。

スクリーン番号

スクリーン番号は以下の書式で示します。

  ディスプレイ識別子 + 「.」+ スクリーン番号

例は以下です。

  192.168.0.10:0.0 # ディスプレイ 192.168.0.10:0 のスクリーン 0

  :0.1             # ディスプレイ localhost:0 のスクリーン 1

他のディスプレイに表示する例

ローカルホストのもう一つのディスプレイに表示させる例です。

$ sudo xinit wmaker -- :1  # ディスプレイ番号 1 に WindowMaker を起動
(画面がディスプレイ番号 1 に移動するので「Ctrl + Alt + F7」で戻ってきて)
$ export DISPLAY=:1        # ディスプレイをディスプレイ番号 1 に指定
$ mlterm &     # これ以降の X クライアントはディスプレイ番号 1 に表示される
$ firefox &
$ gimp &
(画面を「Ctrl + Alt + F8」でディスプレイ番号 1 に移動して確認)

----

[追記:(2012/02/02)]

下の図が X のクライアント/サーバのモデルです。

f:id:lnznt:20120204161730j:image

※ X のポートは 6000 + ディスプレイ番号

現在の X サーバの実装では(デフォルトで)TCPポートをlistenしません。Unixドメインソケットでローカルの Xクライアントとだけ通信します。

f:id:lnznt:20120204161732j:image

今回行った、DISPLAY#1(2番目のディスプレイ)として Xサーバをもう一つ起動したイメージ図です。

f:id:lnznt:20120204161731j:image

普通ユーザは表示装置やキーボードがあるホストX側にいるので、ホストAなどにリモートログインして、そこからホストXのディスプレイを指定してXクライアントを起動する、ような使い方をします。

*1:Xvfb という X サーバがあります

トラックバック - http://linux2.g.hatena.ne.jp/lnznt/20120128