X Window Programming

Index Prev. Step Next Step

Step2:ディスプレイサーバとの接続


1. 接続の確立

簡単にいうと X Window システムは画面への表示やキーボード、マウスなどからの入力を行なう X サーバと、それに対して依頼をする X クライアント(これから作ろうとしているプログラム)という、クライアント/サーバモデルに基づいています。
よってクライアントは最初にサーバとの接続を確立する必要があります。接続の確立と解除を行なうのが以下の関数です。
Display *XOpenDisplay (char *display_name)
void XCloseDisplay (Display *display)
display_name"" または NULL にすると環境変数 DISPLAY の値が使われます。

ではサンプルプログラム 0201.cです。

/* 0201.c ; connect and disconnect display */

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <stdio.h>

void
main()
{
  Display *d;

  d = XOpenDisplay(NULL);
  XCloseDisplay(d);
}
実行結果は、
shin@harp% 0201 shin@harp%
何もしてないように見えるけど、エラーが出ないので正しく動いているようです。

2. サーバ情報の入手

ここでは主なものをあげます(ヘッダファイルを調べれば全部わかると思う)。
char *ServerVendor (display)
int DisplayWidth (display, screen_number)
int DisplayHeight (display, screen_number)
int DisplayWidthMM (display, screen_number)
int DisplayHeightMM (display, screen_number)
int DefaultScreen (display)
int ProtocolVersion (display)
int ProtocolRevision (display)

Display *display
int screen_number
DisplayWidthDisplayHeight はスクリーンの幅、高さをピクセル単位で返します。
DisplayWidthMMDisplayHeightMM はスクリーンの幅、高さをミリメートル単位で返します。
ProtocolVersion はメジャーバージョン番号を返します。
ProtocolRevision はマイナーバージョン番号を返します。

ではサンプルの 0204.c です。

/* 0204.c ; get display infomation */

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <stdio.h>

void
main()
{
  Display *d;

  d=XOpenDisplay(NULL);

  printf("Vendor: %s\n",       ServerVendor(d));
  printf("Width: %d\n",        DisplayWidth(d,0));
  printf("Height: %d\n",       DisplayHeight(d,0));
  printf("Widthq(mm): %d\n",   DisplayWidthMM(d,0));
  printf("Width: %d\n",        DisplayHeightMM(d,0));
  printf("DefaultScreen: %d\n",DefaultScreen(d));
  printf("Protocol: %d-%d\n",  ProtocolVersion(d),
	 ProtocolRevision(d));

  XCloseDisplay(d);
}
実行結果は以下のようになります。この結果はシリコングラフィックス社のマシンから SunOS のマシンに rlogin していることにより得られたものです。
shin@harp% 0204 Vendor: Silicon Graphics Width: 1280 Height: 1024 Widthq(mm): 293 Width: 234 DefaultScreen: 0 Protocol: 11-0 shin@harp%

Index Prev. Step Next Step
Technical Resource Title Page
Shin SAITO: shin@yl.is.s.u-tokyo.ac.jp