サーバ・クライアントシステム (X Window System ) 坂本 天 (teng@ep.sci.hokudai.ac.jp) original: 前坂たけし (msaka@ep.sci.hokudai.ac.jp)
「サーバ・クライアントシステム」とは サーバ(server) ある機能やデータを,(ネットワークを介して)他の計算機やソフトウエアに提供する計算機 or ソフトウエア. 例) WWWコンテンツを提供する WWWサーバ ドメインネームシステムを提供する DNSサーバ メールを配送する SMTPサーバ 到着したメールを提供する POPサーバ IMAPサーバ
「サーバ・クライアントシステム」とは クライアント(client) サーバの提供する機能やデータを,(ネットワークを介して)利用する計算機 or ソフトウエア. 例) WWWコンテンツを閲覧する WWWブラウザ メールを送信・受信する メーラー (mew, Outlook Express)
「サーバ・クライアントシステム」とは 例:WWWを閲覧する “GET /~inex/ HTTP/1.0” mikan@ep.sci.hokudai.ac.jp www.ep.sci.hokudai.ac.jp (1) galeon というWWWクライアントを起動して,‘http://www.ep.sci.hokudai.ac.jp/~inex/’を要求する. “GET /~inex/ HTTP/1.0” (2)クライアントから“/~inex/”が要求されたので,“/~inex/index.html”を送信する. “/~inex/index.html” (3)受信した“/~inex/index.html”を解釈して表示する.
「サーバ・クライアントシステム」の特徴 機能・情報の集中化 機能・情報を共有できる.データの安全性と負荷の集中をさけるため,分散型サーバシステムが主流. サーバは常にクライアントからの要求を待機 サーバは常に稼動していなければならないが,クライアントは必要な時のみ稼動していればよい. サーバ・クライアント間の通信プロトコルが必要 通信さえできれば地理的拘束から開放される. ネットワーク指向なシステムでは標準的な概念 UNIXでもサーバ・クライアントシステムは多く採用されている(例:X Window System).
「X Window System」とは UNIX 系 OS でよく使用される GUI 環境. 通称「X」,「X11」.窓には s がない. クライアントがサーバの機能を呼び出して使う分散構造. サーバ・クライアント間の通信プロトコル (X プロトコル) と基本的な見栄えが規定されており,この規定に従っていろいろなシステムが開発されている.
「X」におけるサーバ・クライアント host0 Xクライアント (アプリケーション) Xサーバ 作画 マウス キーボード network 青い丸を作画して! 作画 マウスが動いたぞ! マウス 画面のサイズは? キーボード 1024x768ですよ エラー発生!!
「X」におけるサーバ・クライアント network host3 host2 host1 host0 Xクライアント Xクライアント Xサーバ
「X」におけるサーバ・クライアント 他の X 端末 ( X サーバ) の画面に作画することができる.つまり,ウインドウをネットワーク越しに飛ばすことが可能 (ネットワーク透過性). ネットワークを介するため,セキュリティに注意が必要(どの端末に表示するか?,他のクライアントからの要求を制限する等).
前準備 「startx」 とする前に root で以下の作業をしてください. # cd/usr/X11R6/lib/X11/xinit # cpxserverrcxserverrc_org # vixserverrc exec/usr/bin/X11/X-dpi100 -nolistentcp (実際には改行されていない) この部分を削除して保存・終了
(ホスト名):(ディスプレイ番号).(スクリーン番号) 表示するサーバと画面の選択 環境変数 DISPLAY に示されるサーバを使用する. 指定書式 (ホスト名):(ディスプレイ番号).(スクリーン番号) 例) % exportDISPLAY=localhost:0.0 % exportDISPLAY=joho6.ep.sci.hokudai.ac.jp:0.0 現在の DISPLAY の値を確認しよう! % printenv | grepDISPLAY DISPLAY=:0.0
実験! (3n+1)マシンと(3n+2)マシンで互いに xeyes を飛ばそう! 表示するサーバと画面の選択 環境変数 DISPLAY の値に他のマシン (X サーバ) を指定すれば,そこにクライアントの画面を飛ばせる. 実験! (3n+1)マシンと(3n+2)マシンで互いに xeyes を飛ばそう! (3n+1)->(3n+2) % exportDISPLAY=192.168.0.102:0.0 % xeyes& (3n+2)->(3n+1) % exportDISPLAY=192.168.0.101:0.0 % xeyes&
もう一度実験! (3n+1)マシンと(3n+2)マシンで互いに xeyes を飛ばそう! 制御プログラム「xhost」で制限する. xhost[+|-](host) 例) % xhost+192.168.0.111 ← joho11からの要求を受け付ける % xhost+ ← 全てのクライアントに開放 % xhost-192.168.0.111 ← joho11からの要求に答えない もう一度実験! (3n+1)マシンと(3n+2)マシンで互いに xeyes を飛ばそう! 注意! 「xhost」 で設定する前に 「DISPLAY」 を 「:0.0」 に戻しておく.
Xサーバへのアクセス制御 xhost はホスト単位でアクセスを制御 「xauth」でもっと厳しく設定(詳しくは man xauth) サーバ側(joho11:画面を飛ばされる方) % xauth list :0.0 joho11/unix:0 MIT-MAGIC-COOKIE-1 174bakcfd407df4fa7cc5f 4457c11147 サーバ側で表示された記号列を与える. クライアント側(joho12:画面を飛ばす方) % xauth Using authority file /home/hoge/.Xauthority xauth> add joho11:0.0 . 174bakcfd407df4fa7cc5f4457c11147 xauth> exit % xeyes & 注意! xauth を使用するときは 「xhost -」 としておくこと.
sshによるX転送機能 ...これは先週やりましたね ssh を使うと,自動的に画面が転送されます.このとき xhost などの設定は不要です(内部で xauth を設定しています) . サーバ側(joho11:画面を飛ばされる方) % ssh-Xjoho11 password: joho11% xeyes& ...これは先週やりましたね
X のセキュリティ 「xhost +」なサーバの画面を盗み見る. サーバ側(192.168.0.116) % xhost+ クライアント側(192.168.0.117) % xwd-display192.168.0.116:0.0-root -silent-outxhost.xwd % displayxhost.xwd& xwd: X のイメージをダンプする Xクライアント display: 画像ビューワー 実験! (3n+1),(3n+2)でお互いに「xhost +」に設定して,互いの画面をダンプしてみよう.
X のセキュリティ 「xhost +」なサーバの入力を監視する. サーバ側(192.168.0.116) % xhost+ クライアント側(192.168.0.117) % xwininfo-display192.168.0.116:0.0 -root-tree|less (仮想端末らしいウインドウのIDを取得) % xev-display192.168.0.116:0.0-id0x4f8900 xwininfo :ウィンドウの属性を表示 xev :指定したウインドウで発生したイベントを表示 実験! (3n+1),(3n+2)でお互いに仮想端末を検索し,その入力を監視してみよう.
いろいろな X クライアント xlogo : Xのロゴを表示する xclock : 時計 xfontsel : 使用できるフォント一覧を表示する xload : システムの負荷を表示する xcalc : 計算機 netmaj : ネットワーク麻雀 などなど...
X のまとめ X はサーバ・クライアントシステムにより設計されている. 通信可能な X 端末に画面の表示や入出力を飛ばすことができる. 特に xhost + は危険です.できれば xauth を使いましょう (ssh を使うとより安全且つラク).