「startx」をする前に root になり, 以下の作業を行ってください.
$ sudo -s# cd /etc/X11/xinit
# cp xserverrc xserverrc-org
# vi xserverrc
![]()
xserverrc ファイル中の
exec /usr/bin/X -nolisten tcp "$@"を下記のように書き換えます.
exec /usr/bin/X "$@"
次に, 前回の授業で編集した /etc/hosts.allow が以下のようになっていることを念のため確認して下さい.
# vi /etc/hosts.allow |
< vi を用いて /etc/hosts.allow を編集. < 全てのデーモンに対して, 192.168.0.1?? からのアクセスのみを許可 (?? は相方の実験機番号) |
ImageMagick をインストールしておきます.
# export LANG=C# aptitude update
# aptitude install imagemagick
![]()
以上の作業が終了したら, 一般ユーザに戻り, startx を実行します.
# exit$ startx
![]()
今回の実習で用いる X クライアントとしては xeyes を上げていますが, もしも他の X クライアントを使いたいのであれば自由に変更してください. 以下に, 簡単に使える X クライアントをとりあえずリストしておきます. 中にはパッケージ (= コマンド名) をインストールする必要があるものも あるかもしれません. (何が出るかはお楽しみ) なお xplanet には -window オプションが必要となります.
xlogo, xclock, xfontsel, xload, xcalc, oneko, xplanet, xteddy, xpenguins, debroster, tuxeyes
まず X サーバの制御プログラム「xhost」を使って 3n+1 or 3n+2 の X クライアント からのアクセスを許可します.「xhost」とは X クライアントからのアクセスを許可または制限を設定するコマンドです.
$ xhost +192.168.16.1?? |
< joho??からの要求を受け付ける
|
アクセス許可がされたかどうかを確認してみましょう.
$ xhost |
< アクセス許可をしたホストのリストを表示
|
xhost によるアクセス許可には以下のようなやり方もあります.(今回はやりません)
$ xhost + |
< すべてのマシンからの要求を受け付ける
|
環境変数 DISPLAY に示されるサーバに X クライアント(以下 X と略することがある) が表示されます. 自分が使っている端末に表示するように設定します. 設定の書式は以下の通りです.
(ホスト名):(ディスプレイ番号).(スクリーン番号)
設定例
$ export DISPLAY=localhost:0.0
または (joho06 の場合)
$ export DISPLAY=joho06.ep.sci.hokudai.ac.jp:0.0
IP アドレスで指定することも可能です. (joho01 の場合)
$ export DISPLAY=192.168.16.101:0.0
設定を確認してみましょう.
$ printenv | grep DISPLAY
DISPLAY が先程設定した値になっていれば設定完了です. 試しに xeyes を実行してみましょう.
$ xeyes &![]()
目玉のウインドウが出て来ましたね?
停止するには, jobs または ps ux コマンドで確認した後, kill コマンドで 停止します.
$ jobs[2]+ Running xeyes & $ kill %2
![]()
$ ps ux | grep xeyeshoge 15881 0.6 0.7 4448 1796 ttyp5 S 15:48 0:00 xeyes $ kill 15881
![]()
X は環境変数 DISPLAY の値に設定されている場所へ表示されます. DISPLAY に他のマシン (X サーバ) を指定すれば,そこにクライアントの 画面を飛ばせます. それでは相方のマシンに xeyes を飛ばしてみましょう. IP アドレスは相手のマシンのアドレスを入力してください.
$ export DISPLAY=192.168.16.1??:0.0$ xeyes &
![]()
次に「xhost」で X クライアントからのアクセス制限を行います
$ export DISPLAY=:0.0 |
< joho?? からの要求に答えない
|
設定を確認してみましょう
$ xhost |
< 指定したホストが表示されなければ OK
|
何も記述されていない状態で X が飛ばせるか試してみましょう. [2.3]と同様にお互いのマシンに xeyes を飛ばしてみよう.
$ export DISPLAY=192.168.16.1??:0.0# 相手のホストの IP を指定 $ xeyes &
![]()
「xhost」はホスト(マシン)単位でアクセスを制御します. 「xauth」でさらに厳しく制限することができます(ユーザ単位での制限). 詳しくは man で確認してください. 「xauth」を使用するときは必ず「xhost」によるアクセス許可を全て解除 しておく (許可しない) こと忘れないようにしてください. (「xhost -」や「xhost -(相手ホストのIP)」など)
サーバ側(例 joho11: 画面を飛ばされる方)
$ xhost -# xhost によるアクセス許可を行わないようにします $ xauth list :0.0
joho11/unix:0 MIT-MAGIC-COOKIE-1 174bakcfd407df4fa7cc5f4457c11147
この174bakcfd407df4fa7cc5f4457c11147は, ログインしているユーザ, ホストによって決まる文字列で, X を起動する毎 (startx する毎) に変化します.
サーバで表示された174bakcfd407df4fa7cc5f4457c11147 (暗号化された文字列) をクライアント側に設定します. (当然資料のこの文字を そのまま設定しても無効です).
クライアント側(例 joho12: 画面を飛ばす方)
$ xauthUsing authority file /home/hoge/.Xauthority xauth> add 192.168.16.1??:0.0 . 174bakcfd407df4fa7cc5f4457c11147
xauth> exit
$ export DISPLAY=192.168.16.1??:0.0
# 相手のホストの IP を指定 $ xeyes &
![]()
暗号化された文字列がサーバとクライアントで一致したときのみ目玉が表示されます.
設定の削除方法
$ xauthxauth> remove 192.168.16.1??:0.0
xauth> exit
![]()
時間に余裕がある場合は, 再度 xauth を実行し, add の部分の 赤字の文字列をわざと間違えてみて, 本当に目玉が表示できないことを 確かめてみよう.
相手のコンピュータに接続し, X を自分のコンピュータのディスプレイに表 示します. 接続先のコンピュータにアカウントが必要です. ssh を 使うと,自動的に画面が転送されます.このとき xhost などの設定は 不要です(内部で xauth を設定しています).
まずはディスプレイを localhost に戻しましょう.
$ export DISPLAY=localhost:0.0 |
相手のコンピュータに接続します.
$ ssh -X 192.168.16.1?? |
< ?? は相手のマシン番号
|
-X の代わりに -x オプションを指定したり, オプションを指定しないで X の転送を試してみましょう. これらの場合には -X オプションを 指定した場合とは挙動が異なるはずです. 理由は man ssh で調べてみてください.
$ ssh -x 192.168.16.1?? |
< ?? は相手のマシン番号
|
$ ssh 192.168.16.1?? |
< ?? は相手のマシン番号
|
3n+1 マシンおよび 3n+2 マシンで「xhost +」を設定し, お互いに覗き見てみよう.
サーバー側
$ export DISPLAY=:0.0$ xhost +
![]()
クライアント側
$ xwd -display 192.168.16.1??:0.0 -root -silent -out xhost.xwd |
< xhost.xwd ファイルに画像をダンプ(記録)する ?? は相手のマシンの番号 < ダンプした画像を表示 |
xwd | X のイメージ(画像)をダンプする X クライアント |
display | 画像ビューワー |
3n+1 マシンおよび 3n+2 マシンで, お互いに仮想端末を検索し, お互いの入力を 監視してみよう.
サーバー側
$ xhost +![]()
クライアント側
$ xwininfo -display 192.168.16.1??:0.0 -root -tree | less |
< 仮想端末らしいウインドウのIDを探す ?? は相手のマシン番号 < 探し出した ID を設定しのぞく |
xwininfo | ウィンドウの属性を表示 |
xev | 指定したウインドウで発生したイベントを表示 |
これまで試してきて分かるように xhost + と設定すると全てのホストからの ウィンドウ表示要求を受け入れることになってしまいます. これは密かに誰かから 監視される可能性があることを意味しています. セキュリティー上好ましくないので なるべく xauth を使うようにしましょう.
最終更新日: 2011/07/08 (山下 達也) | Copyright © 2010 inex |