ものぐさ備忘録

2008-02-20 Xアプリのssh越し起動方法

[] Xアプリssh越しで起動する 13:12

バイトの関係で、Xアプリを、外部からデーモンとして起動する必要がありました。

やり方を探してみたところ、ssh接続先で以下のコマンド列をうてばOKでした*1

$ export DISPLAY=:0.0
$ nohup x_program &
$ exit

ようは、ssh接続先のXサーバとXアプリ(Xクライアント)を繋げるように環境変数を設定したうえで、Xアプリを起動すれば良い。

当然、ssh接続先でXサーバが動いていないとだめです。

[] XForwardingのやり方 13:12

ついでに、ssh XForwardingのやり方も調べました。

設定方法

例として、sshdが動いているRemoteマシンと、そこへssh接続するLocalマシンがあり、RemoteマシンでXクライアント(emacsとか)を起動し、LocalマシンのXサーバで表示する場合を考えます。

Remoteマシンのsshd_configを以下のように書き換えます

X11Forwarding noX11Forwarding yes

設定を有効にするため、sshdを再起動します。

# /etc/init.d/sshd restart

あとは、Localマシンから以下のように接続します

$ ssh -X user@remote.domain

sshでRemoteマシンに接続した後、以下のような出力があればXForwardingに成功しているはず。

$ echo $DISPLAY
localhost:10.0

$ emacs     #Localマシン上にemacsのウインドウが表示される

なお、ssh接続時に、~/.Xauthorityが生成されない場合、xauthプログラムが入ってない可能性がありますので、yum install xauthとかで入れて、接続しなおしてください。

やってみた感じ、通信データ量はかなり多いみたいですね。

回線が細いと、emacsの起動をするだけで数分かかります。


また、XForwardingの場合、nohupでXアプリを起動しても、sshコネクションを終了するとXアプリも終了してしまいます。

おそらく、sshコネクション終了時にRemoteマシン上に作られた擬似Xサーバも終了してしまうからでしょう*2

環境変数DISPLAYについて

環境変数DISPLAYは、":0.0"(通常)だったり、"localhost:10.0"(XForwarding)だったりしたんですが、値の意味が気になったので色々検索してみると、解説が見つかりました。

以下引用*3

環境変数`DISPLAY'の書式は`HOST:DISPLAY.SCREEN'です。HOSTはXウィンドウシステムのサーバーマシンの名前、DISPLAYは同じマシンの別のサーバーと読者のサーバー(X端末)を区別するために任意に割り振られた番号、SCREENは稀にしか使いませんが1つのXサーバーで複数の端末画面を制御する場合に使います。ピリオドとSCREENは省いてかまいません。指定する場合、SCREENは普通はゼロです。