[Exp2008]X Window System

実習の前準備

必須作業

X server の設定

「startx」をする前に root になり, 以下の作業を行ってください.

$ sudo -s 
# cd /etc/X11/xinit
# cp xserverrc xserverrc-org
# vi xserverrc

xserverrc ファイル中の

exec /usr/bin/X11/X -dpi 100 -nolisten tcp 

を下記のように書き換えます.

exec /usr/bin/X11/X -dpi 100 

作業が終了したら,

# exit
$ startx

アクセス制御の設定

/etc/hosts.allow を編集して以下のようにして下さい.

# vi /etc/hosts.allow     
... (コメント文)
ALL: 192.168.16.??        < 全てのデーモンに対して, 192.168.16.?? からのアクセスのみを許可
(または ALL: ALL)           (joho01 と joho04, joho02 と joho03 で互いのIPアドレスを入れる.)

ssh のインストールと設定

ssh サーバをインストールする.

# apt-get install openssh-server

次に, ssh を用いて X (要するに画像やアニメーションなど) を リモートホストと送受信するため, そのためのssh の設定をします.

# cat /etc/ssh/sshd_config

・・・・・・
・・・・・・
・・・・・・

X11Forwarding yes         < X11Forwardingの設定が yes であることを確認する.

Imagemagick のインストール

Imagemagick をインストールする.

# apt-get install imagemagick

アカウントの作成

joho 01と joho 04, joho 02 とjoho 03 でお互いに 1 人ずつアカウントを作る. アカウントの作り方は, [Exp2008]Unix系OSでのアカウント作成を参照してください.

任意での作業

今回の実習で用いる X クライアントとしては xeyes を上げていますが, もしも他の X クライアントを使いたいのであれば自由に変更してください. 以下に, 簡単に使える X クライアントをとりあえずリストしておきます. 中にはパッケージ (= コマンド名) をインストールする必要があるものもあるかもしれません. (何が出るかはお楽しみ)

xlogo, xclock, xfontsel, xload, xcalc, oneko, xsnow, xplanet, xpenguins-applet

X クライアントを表示するサーバと画面の選択

xhost によるアクセス許可

まず X サーバの制御プログラム「xhost」を使って joho01 と joho04, joho02 と joho03 で互いの X クライアントからのアクセスを許可します.

$ xhost +192.168.16.??               < 相手の情報実験機からの要求を受け付ける

このようなやり方もあります.

$ xhost +                            < すべての情報実験機からの要求を受け付ける

DISPLAY の設定

環境変数 DISPLAY に示されるサーバに X クライアント(以下 X と略することがある) が表示されます. 自分が使っている端末に表示するように設定します. 設定の書式は以下の通りです.

(ホスト名):(ディスプレイ番号).(スクリーン番号)

設定例

$ export DISPLAY=localhost:0.0

IP アドレスで指定することも可能です.

$ export DISPLAY=192.168.16.??:0.0   < 自分の情報実験機の IP アドレスを指定

設定を確認してみましょう.

$ printenv | grep DISPLAY

DISPLAY が先程設定した値になっていれば設定完了です. 試しに xeyes を実行してみましょう.

$ xeyes &

目玉のウインドウが出て来ましたね?

停止するには, jobs または ps ux コマンドで確認した後, kill コマンドで停止します.

$ jobs 
[1]+  Running                 xeyes &

$ kill %1

$ ps ux | grep xeyes 
hoge 15881  0.6  0.7  4448 1796 ttyp5    S    15:48   0:00 xeyes

$ kill 15881

X を飛ばしてみる

X は環境変数 DISPLAY の値に設定されている場所へ表示されます. DISPLAY に他の情報実験機 (X サーバ) を指定すれば,そこにクライアントの画面を飛ばせます. joho 01 と joho 04, joho02 と joho03 で互いに xeyes を飛ばしてみましょう.

$ export DISPLAY=192.168.16.??:0.0   < 相手の情報実験機の IP アドレスを指定
$ xeyes &

X サーバ側からのアクセス制限

xhost によるアクセス制限

次に「xhost」を X クライアントからのアクセス制限に使います.

$ export DISPLAY=:0.0      
$ xhost -192.168.16.??               < 相手の情報実験機からの要求に答えない

再び X を飛ばしてみる

制限を加えた状態で X が飛ばせるか試してみましょう. [2.3]と同様にお互いの情報実験機に xeyes を飛ばしてみよう.

$ export DISPLAY=192.168.16.??:0.0   < 相手の情報実験機の IP アドレスを指定
$ xeyes &

もっと厳しいアクセス制限

「xhost」はホスト(マシン)単位でアクセスを制御します. 「xauth」でさらに厳しく制限することができます(ユーザ単位での制限). 詳しくは man で確認してください. 「xauth」を使用するときは必ず 「xhost -」 としておくこと忘れないようにしてください.

サーバ側(例 joho01: 画面を飛ばされる方)

$ xhost -                            < xhost によるアクセス許可を行わないようにします
$ xauth list :0.0
joho01/unix:0 MIT-MAGIC-COOKIE-1 174bakcfd407df4fa7cc5f4457c11147

この174bakcfd407df4fa7cc5f4457c11147は, ログインしているユーザ, ホストによって決まる文字列で, X を起動する毎 (startx する毎) に変化します.

サーバで表示された174bakcfd407df4fa7cc5f4457c11147 (暗号化された文字列) をクライアント側に設定します. (当然資料のこの文字をそのまま設定しても無効です).

クライアント側(例 joho02: 画面を飛ばす方)

$ xauth
Using authority file /home/hoge/.Xauthority
xauth> add 192.168.16.??:0.0 . 174bakcfd407df4fa7cc5f4457c11147
xauth> exit
$ export DISPLAY=192.168.16.??:0.0   < 相手の情報実験機の IP アドレスを指定
$ xeyes &

暗号化された文字列がサーバとクライアントで一致したときのみ目玉が表示されます.

設定の削除方法

$ xauth
xauth> remove 192.168.16.??:0.0
xauth> exit

時間に余裕がある場合は, 再度 xauth を実行し, add の部分の暗号化された文字列をわざと間違えてみて, 本当に目玉が表示できないことを確かめてみよう.

ssh による X 転送

相手のコンピュータに接続し, X を自分のコンピュータのディスプレイに表示します. 接続先のコンピュータにアカウントが必要です. ssh を使うと,自動的に画面が転送されます.このとき xhost などの設定は不要です(内部で xauth を設定しています).

$ ssh -X 192.168.16.??               < 相手の情報実験機の IP アドレス
password:
joho??$ xeyes &

-X の代わりに -x オプションを指定したり, オプションを指定しないで X の転送を試してみましょう. これらの場合には -X オプションを指定した場合とは挙動が異なるはずです. 理由は man ssh で調べてみてください.

$ ssh -x 192.168.16.??               < 相手の情報実験機の IP アドレス
password:
joho??$ xeyes &

$ ssh 192.168.16.??                  < 相手の情報実験機の IP アドレス
password:
joho??$ xeyes &

X のセキュリティ

画面を盗み見る

joho01 と joho04, joho02 と joho03 の互いの情報実験機で「xhost +」を設定し, お互いに覗き見てみよう.

サーバー側

$ export DISPLAY=:0.0 
$ xhost +

クライアント側

$ xwd -display 192.168.16.??:0.0 -root -silent -out xhost.xwd     < xhost.xwd ファイルに画像を
                                                                    ダンプ(記録)する. 
                                                                    相手の情報実験機の IP アドレス
$ display xhost.xwd &                                             < ダンプした画像を表示

使用しているコマンドの解説

xwdX のイメージ(画像)をダンプする X クライアント
display画像ビューワー

display コマンドで画像を表示しようとすると, 始めは縮小して表示されると思いますが, ウィンドウの端を広げるなどすると原寸大表示に近づけることが出来ます.

入力を監視する

joho01 と joho04, joho02 と joho03 の情報実験機で, お互いに仮想端末を検索し, お互いの入力を監視してみよう.

サーバー側

$ xhost +

クライアント側

$ xwininfo -display 192.168.16.??:0.0 -root -tree | less     < 仮想端末らしいウインドウのIDを探す
                                                               相手の情報実験機の IP アドレス
xwininfo: Window id: 0x3e (the root window) (has no name)      

  Root window id: 0x3e (the root window) (has no name)
  ...
  ...
  ...

$ xev -display 192.168.16.??:0.0 -id 0x3e                    < 探し出した ID を設定しのぞく

使用しているコマンドの解説

xwininfo ウィンドウの属性を表示
xev指定したウインドウで発生したイベントを表示

セキュリティー上の注意点

これまで試してきて分かるように xhost + と設定すると全てのホストからのウィンドウ表示要求を受け入れることになってしまいます. これは密かに誰かから監視される可能性があることを意味しています. セキュリティー上好ましくないのでなるべく xauth を使うようにしましょう.

実習後の作業

実習の始めに行った変更について元に戻してください.

X server の設定変更

root になり, X server の設定を以下の作業で元に戻します.

$ sudo -s 
# cd /etc/X11/xinit
# cp xserverrc-org xserverrc
# exit

アクセス制御の設定変更

/etc/hosts.allow のアクセス制御の設定を元に戻します.

コメント文の下に書き加えた,

ALL: 192.168.16.?? (または ALL: ALL) 

を削除する.

参考資料

  • 松田晃一, 暦本純一 著「入門X Window」 アスキー, ISBN4-7561-0166-6
  • 山口和紀, 古瀬一隆 監修「新 The UNIX Super Text (上・下)」 技術評論社, (上巻)ISBN4-7741-1682-2, (下巻)ISBN4-7741-1683-1
  • Linux Software Search -- スクリーンマスコット

このページは 北海道大学 理学院 情報実験 (INEX)最低限 UNIX / Linux [III] シェル (2007 年度資料) を基に作成しました.

スケジュール表・各回資料 (06/27)

Last modified:2008/06/27 17:43:39
Keyword(s):
References:[[Exp2008]スケジュール表・各回資料]