2013-06-11

Xming と Teraterm SSH を使って Lubuntu の X クライアントに接続する

◆概要

Oracle VirtualBOX 上の Lubuntu マシンの X クライアントを Windows パソコンから操作したいので「リモートデスクトップ接続」を使用していましたが、反応が遅いので別の方法を考えました。

Xming は Windows 用の X サーバーです。
これを 自宅のパソコンにインストールして、Lubuntu の X クライアントをパソコン上のデスクトップに表示されます。

方法は色々有るんですが次のようにしたいと思います。

  • Xming 起動と同時にターミナルが開く
  • ターミナル上で X クライアントを実行すると Windows パソコン上で表示される
  • このとき「export DISPLAY=xxx.xxx.xxx.xxx:0.0」等の設定が要らないこと。
  • できればターミナルは使い慣れた Teraterm である事。
  • できれば自動的にログインされる事。

◆アジェンダ

次の手順で実行します。
  1.  X フォントサーバー (xfs) をインストール
  2.  SSH X 転送を許可
  3.  Teraterm マクロで 自動ログイン
  4.  Xming をインストール
  5.  XLaunch で接続用ファイルを作成


◆X フォントサーバー (xfs) をインストール

Lubuntu サーバー上のフォントを使用したいのでフォントサーバーをインストールします。
$ sudo apt-get install xfs
ついでに、IPAフォントを入れました。
$ sudo apt-get install fonts-ipafont
インストールが成功したら設定を行います。

◇外部接続の許可

デフォルトでは外部からの接続は無効化されています。
この設定を変更するために設定ファイルを編集します。

$ sudo vi /etc/X11/fs/config

(変更前)
# turn off TCP port listening (Unix domain connections are still permitted)
no-listen = tcp

(変更後)
# turn off TCP port listening (Unix domain connections are still permitted)
#no-listen = tcp

◇フォントパスの追加

デフォルトではフォントパスは限られています。
サーバーの環境に合わせてフォントパスを追加していきます。
(変更前)
# paths to search for fonts
catalogue = /usr/share/fonts/X11/misc/,/usr/share/fonts/X11/cyrillic/,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/75dpi/

(変更後)
# paths to search for fonts
catalogue = /usr/share/fonts/truetype/ttf-dejavu/,/usr/share/fonts/truetype/liberation/,/usr/share/fonts/truetype/ubuntu-font-family/,/usr/share/fonts/truetype/msttcorefonts/,/usr/share/fonts/truetype/freefont/,/usr/share/fonts/truetype/nanum/,/usr/share/fonts/truetype/takao-mincho/,/usr/share/fonts/truetype/wqy/,/usr/share/fonts/truetype/takao-gothic/,/usr/share/fonts/truetype/vlgothic/,/usr/share/fonts/opentype/ipafont-gothic/,/usr/share/fonts/opentype/ipafont-mincho/,/usr/share/fonts/X11/misc/,/usr/share/fonts/X11/cyrillic/,/usr/share/fonts/X11/100dpi/:unscaled,/usr/share/fonts/X11/75dpi/:unscaled,/usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/75dpi/

ファイルを保存したら xfs を再起動します。
$ sudo /etc/init.d/xfs restart
Stopping X font server: xfs.
Setting up X font server socket directory /tmp/.font-unix...done.
Starting X font server: xfs.

◆ SSH X 転送を許可

SSH には X 転送 (X11 Forwarding) 機能があります。
SSH トンネルによって X プロトコルを暗号化する機能です。

これの何が良いのかと言いますと、よりセキュアであると言う点もそうですが、実は環境変数「DISPLAY」の値が自動的に割り当てられるので、いちいち設定しなくても良いというのが今回の狙いです。


この機能はデフォルトで許可されていると思いますが、念のため設定を確認します。

$ grep X11 /etc/ssh/sshd_config
X11Forwarding yes       <- no になっていたら yes に変更します
X11DisplayOffset 10

X11DisplayOffset の値は環境変数「DISPLAY」に設定されるディスプレイ番号です。
デフォルトは「10」このときの「DISPLAY」の値は「localhost:10.0」になります。

もし sshd_config を変更した場合は、sshd を再起動します。
※ ssh 接続中であれば気をつけてください。
$ sudo service ssh restart

◆Teraterm マクロで 自動ログイン 【Windows パソコン】

ここからは Windows パソコンでの操作になります。
始めに、SSH での自動ログインを行う Teraterm マクロ (TTL) を作成します。

テキストエディタで次の内容を記述します。
; SSH ログイン
connect '192.168.0.10:22 /ssh /ssh-X /auth=password /user=hoge /passwd=hogehoge'

; DISCONNECTするまで待つ
waitevent 4


名前を付け保存で任意の場所に保存します。
今回は「C:\Program Files\Teraterm\ssh_login.ttl」としました。

作成した「*.ttl」ファイルを「ttpmacro.exe」にドラッグ&ドロップするとマクロが実行されます。


マクロを実行して、Teratermが起動し自動的にログイン出来ることを確認します。
 

このとき、小さなマクロウィンドウが表示されますが、Teratermでログイン中は表示され続けます。

これはマクロ内で「waitevent 4」とすることで、切断するまでマクロを待機状態にしている為です。


◆Xming をインストール 【Windows パソコン】

Xmingをダウンロードします。
今回は 6.9.0.31 を使用しました。現時点の最新版です。

SourceForge.JP からダウンロードします。
http://sourceforge.jp/projects/sfnet_xming/releases/

リリースファイルから「Xming-6-9-0-31-setup.exe」をダウンロードします。

インストーラを実行します。
基本的には「Next」を押し続けるだけで問題ありません。


インストール先を指定します。

Full Installation を選びます。

  ショートカットの作成オプションです。
 Install ボタンを押すとファイルのコピーが始まります。
 終了しました。

◆XLaunch で接続用ファイルを作成 【Widnows パソコン】

スタートメニューから「XLaunch」を起動します。
「Multiple window」を選びます。
 「Start a program」を選びます。
「Start program」の欄にマクロ実行のコマンドを書きます。
「Run Local」 にチェックを入れます。


(コマンド例)

"<TeraTermインストール先>\ttpmacro.exe" "<先ほど保存したマクロのフルパス"

「Remote font server (if any)」欄に「サーバーIP:ポート番号」を書きます。
今回は「192.168.12.10:7100」を使用しました。

「Additonal parameters for Xming」には「-dpi 100」を入力します。
これはフォントサイズが小さく感じるのでDPIを100にして大きく見えるようにするオプションです。
個人的に、特にこだわりがなければこのオプションは指定した方が良いと思います。
 「次へ」を押した時に先ほど入力したフォントサーバのポート番号「:7100」が自動的に削除されました。「:7100」はデフォルトのポート番号なので省略できるようです。気にせず「次へ」を押します。
 「Save configuration」をクリックします。
 デスクトップに保存します。拡張子は「.xlaunch」です。
 「完了」をクリックして終了します。


完了を押すとXmingがスタートし、同時にTeratermが開きます。

なぜかマクロウィンドウは表示されませんが、正常に動いています。
予想外の動作ですが結果的に文句ナシです!


Teraterm上で gvim (グラフィカルVim) を起動します。
フォントのプレビュー動かすと、正常にフォントサーバーも機能している様です。


ここでTeratermをログアウトして見ると、Xmingも終了します。
これは、Teratermの切断を検知してマクロが終了した為です。


◆おまけ

Xming 上で起動した gvim で日本語入力できませんでした。

これは日本語入力(IM)が起動していない為です。
私の環境ですと「ibus-daemon -d -x」コマンドを入力する事で日本語入力も可能です。


ただ、毎回ログインする度にコマンド入力するのは面倒ですので自動化したいと思います。
色々とやり方は考えられますが、今回はLubuntu側のログインスクリプトでTeratermの設定をトリガーにコマンドを実行したいと思います。
マクロで実行する方法も考えたんですが、設定が分散するので出来るだけ一カ所にまとめたいので、やや一般的ではない方法でやってみました。



Teraterm の上部メニューから設定→TCP/IPを開きます。
端末タイプを「teraterm」に書き換えます。


上部メニューから設定→設定の保存を選びます。

「*.ini」ファイルに名前を付けて保存します。今回は「xming_linux.ini」としました。


次に、先ほど作成した「ssh_login.ttl」を書き換えます。
この変更で、先ほど保存した「*.ini」ファイルが参照されるはずです。

(変更前)
; SSH ログイン
connect '192.168.12.10:22 /ssh /ssh-X /auth=password /user=hoge /passwd=hogehoge'

(変更後)
; SSH ログイン
connect '192.168.12.10:22 /ssh /ssh-X /auth=password /user=hoge /passwd=hogehoge /f=xming_linux.ini'

続いて lubuntu 側で作業を行います。
ユーザのログインスクリプトを編集します。

$ vi ~/.bashrc

(追記)
# check xming and teraterm
if [ "$SSH_TTY" != "" ] && [ "$TERM" == "teraterm" ]; then
  ibus-daemon -d -x
fi


内容を説明しますと、二つの環境変数を参照して条件に一致する場合は「ibus-daemon」を起動しています。

$SSH_TTY は SSH 接続したときの仮想端末の名前です。
SSH 接続以外の場合は変数自体が存在しません。
変数が存在するかどうかをチェックしています。

$TERM はターミナルの種類を表す環境変数です。
先ほど変更した端末タイプがこの変数に設定されます。
変数の値が「teraterm」かどうかをチェックしています。

この2つの条件に一致した場合、日本語入力を起動します。
(正確にはインプットメソッドフレームワークですが……)


余談ですが「TERM」変数は terminfo が認識する端末タイプを設定する必要があります。
適当な値を設定すると宜しくないので注意が必要です。

設定出来る端末タイプは「toe -a」コマンドで確認できます。
今回初めて調べたんですが TeraTerm 様の端末タイプは「teraterm」「teraterm2.3」「teraterm4.59」の 3つが登録されていました。

とはいえ、TeraTermのデフォルトは「xterm」ですし、これを使っている人は殆ど居ないだろうと思いましたのでこんなやり方もありますとと言う意味でご紹介しました。

0 件のコメント:

コメントを投稿