そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

X11 ForwardingとOSX、Windowsからのリモート接続の話し

普段、X11はあまり使いませんが、今回、Oracle Databaseをサーバーにセットアップする必要があったので、OUIのために環境を用意しました。

環境は、社外のデータセンターのサーバーで、自宅から接続するため、SSHでトンネリングして、X11を使う必要がありました。

f:id:begirama:20150301225021p:plain

やりかたは複数

  1. CygwinX(Windows)やXQuartz(OSX)でSSHの-Xオプションを使う
  2. CygwinXやXmingのようなX ServerとPuttyや、TeraTermのようなX11フォーワーディングの設定ができるSSHクライアントを組み合わせる

サーバー側の設定

X11 Forwardingの設定が有効になっているか確認。

netstatで確認すると、リモートサーバー側で6000+オフセットの値のポートがリッスンされています。下の例だと、オフセットが10で設定されている。

$ netstat -tan
Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State    
tcp        0      0 0.0.0.0:6010                0.0.0.0:*                   LISTEN  

DISPLAY変数は設定しなくても、自動で設定されます。

$ env | grep DISPLAY
DISPLAY={Remote Server}:10.0

仕組みとしては、リモートサーバー側のDISPLAYで受けて、SSH経由でローカルPCのDIPLAYに転送してくれるようです。

次、クライアント側の設定です

1. CygwinX(Windows)やXQuartz(OSX)でSSHの-Xオプションを指定する

ssh -X -v {User}@{Remote Server}

-Xを付けるとForwardingが有効となります。 -vを付けることで、詳細なメッセージがでるため、上手く利用できない場合は、-vを付けてエラーの内容を見ていきます。

この状態で、Xが必要なプログラムを実行すると、ウィンドウが立ち上がります。

もともとこのやり方で、OSX環境でやろうとしていました。 が、問題がありました。この方法でOracle DBのOUIを実行した場合、ボタンなどのUIコンポーネントを操作することができませんでした。xeyeなんかは普通に実行できたので、アプリケーションの作りによって相性がありそうです。

2. CygwinXやXmingのようなX ServerとPuttyや、TeraTermのようなX11フォーワーディングの設定ができるSSHクライアントを組み合わせる

さて、実際にはこのやり方でやりました。

Puttyや、TeraTermにはX11転送のための設定があります。それを有効にすればOKです。 Puttyや、TeraTerm上でXが必要なプログラムを実行するとローカルPC側のDIPLAYにそれぞれのターミナルソフトが転送してくれます。

それにしても、Oracle DBをセットアップする上で、インストーラーがGUIである必要はまったくないですよね。 ファイルを使ったサイレント・インストールも用意されているけど、GUIとできることが違うし。システム要件の事前チェックのスキップとか。

Linuxや、Redhatをセットアップするときのように、CUIインタラクティブに設定させてもらえると楽だなぁ。

参考させていただいたサイト

X11 Forwarding - なんなんなん行く?