吉見と申します。 linux 3.1 を使っています。 仕事場で使用しているマシンで、リモートマシンで走らせるXクライアントをX window 上に開かせる必要があります。 ログインはテキストで行い、そこでstartx で起動します。 しかし、xauth などの設定を行ってもできません。 具体的には、 ○ ps eaxwf |grep /usr/X11R6/bin/X とすると、以下のように表示される 3607 ? S 268:27 \_ /usr/X11R6/bin/X :0 -dpi 96 -nolisten tcp ○ remote マシンで、kterm -display local:0.0 としてもエラーになる。 などです。X クライアントが使用するポート 6000 が開いていないのです。セ キュリティ上は問題あるようですが、仕事上リモートマシンのクライアントの表 示ができないと困るのです。 詳しくしらべると、原因はstartxにあることがわかりました。 startxはシェルスクリプトで、引数をつくってxinitを呼んでいるのですが、そ のなかで、 serverargs="-dpi 96 -nolisten tcp" として -nolisten tcp をセットしています。 本来、必要ならば $(HOME)/.xserverrc を指定して、その中でオーバーライドで きると man ページには書かれているのですが、これは現在のものではできません。 (1) startx 内で、$HOME/.xserverrc は userserverrc という変数にセットされ ます。 (2) 次に defaultserverargs にassignされます (3) 次に server にassignされます (4) 最後に xinit $client $clientargs -- $server $display $serverargs として xinit の引数になります。 しかし、(3) でserverにassign されるときには、 (3a) server が空 かつ (3b) serverargs と display が空 という条件があるのですが、このserverargs は絶対に空にならないのです! 最初に、 serverargs="-dpi 96 -nolisten tcp" として固定文字列が与えられたあと、何回か変更される文があるのですが、すべて serverargs="$serverargs $1" という変更であるため、長くなることはあっても空になることは金輪際ないので す。したがって(3)の手順は絶対に実行されず、存在の有無にかかわらず $(HOME)/.xserverrcも /etc/X11/xinit/xserverrcも参照されません。(ちなみ に、後者はシステムに存在していません。man には書かれていますが) つまり、startx を使う以上 -nolisten tcp オプションはどうにもいじれないの です。 逃げ方としては、 (A) startx を書き換えて nolisten tcp をはずす (B) どうせ中では xinit を呼んでいるだけなので、startx を使わずに xinit /etc/X11/xinit/xinitrc -- /usr/X11R6/bin/X -dpi 96 とかして立ち上げる (B)' 上のコマンドをalias で startx にしてしまう などが考えられます。 しかし、そもそも man ページで $(HOME)/.xserverrcや /etc/X11/xinit/xserverrcについて書かれているのにそれが使えなくなっている のは、バグではないのでしょうか? ポート6000のセキュリティ問題のためでしょうか? もしそうだとしても man ページには反映すべきです。 もしポート6000がセキュリティ上問題であけることが望ましくないのであれば、 その状態で remote の X クライアントを表示させることは可能なのでしょうか? (補足) ちなみに、startx 内では、最後に xinit にわたる変数 display が正しく初期 化されていません。 -- 吉見 隆 独立行政法人 産業技術総合研究所 知能システム研究部門 3次元視覚研究グループ mail: tak-yoshimi@xxxxxxxxxx Tel: 029-861-5958 内線 9-31-45958