uni/indexCygTerm

 CygwinはWindows上で動くプログラムで、Unixの端末としてはコマンドプロンプトを使うことになる。 でもコマンドプロンプトは最大化しても幅が広がらなくて不便。 できればTeraTermやPuTTYのような端末エミュレータを使いたい。 xtermを使うという手もあるけど、Windows環境との親和性を考えるとやっぱりWindowsで動く端末エミュレータがいい。 そんなあなたにCygTerm。

●その前に

 Cygwin1.7になってしばらく経った頃に、こっそりmintty(Cygwin Terminal)というのが入るようになった。 baseカテゴリに入っているので、今はデフォルトで入るようになっているはず。 このプログラム、PuTTYベースでしかもEUCが通るので、先にこちらを試したほうがいいかもしれない。 スタートメニュー / Cygwin / Cygwin Terminal がそれ。 デスクトップのアイコンもminttyへのショートカットに変更されたような気がするけど、よく覚えてない。

●開発元

ターミナル・エミュレータによる Cygwin コンソール http://www.dd.iij4u.or.jp/~nsym/cygwin/cygterm/

●原理
 極端な話、ローカルにtelnetdかsshdを立ち上げて、端末エミュレータでlocalhostに接続すれば済むわけです。 要するにlocalhostで接続を待ち受けて、入ってきたデータをシェルに流してやるプログラムを作ればいいわけです。 それがCygTermです。 実際には、CygTermを実行すると適当なソケットで接続を待ち受け、IPアドレス(普通はlocalhost)とポート番号を指定して端末エミュレータを子プロセスとして立ち上げます。 端末エミュレータがソケットに接続してくると、指定されたシェルを立ち上げて、入出力の橋渡しをします。 これで端末エミュレータからシェル(普通はbash)を使うことができます。 端末エミュレータとシェルはCygTermの設定ファイルやコマンドラインから自由に指定できます。

 何を言っているのか言葉だけではよく分からないかもしれませんが、人間が実行を指示するのはCygTermです。 CygTermが端末エミュレータとシェルを立ち上げてその橋渡しをするので、CygTermを実行するとおもむろに端末エミュレータが立ち上がってその中でシェルが動くという不思議な動きになります。

page top
●導入

・Cygwinの開発環境(GCC・make)が必要なので入れておく。

$ tar xfz cygterm107.tgz

$ cd cygterm107

$ make install

・/usr/local/binにインストールしに行くので、書き込めない場合は書き込めるユーザーで。

●設定

ここではPuTTYの場合について説明します。

・まず、PuTTYでCygTerm用の設定を作ります。

・[Session] / [Connection type] を「telnet」に。

・[Window] / [Appearance] でお好きなフォントに。

・[Window] / [Translation] の [Character set translation on received data] で「Use font encoding」を選んでおけば、たいてい何とかなります。

・あとはお好きな設定に。

・適当な名前で保存。ここで保存した設定名をcygterm.cfgの設定で使います。

・次に、CygTerm側の設定を行います。

・CygTermをインストールしたフォルダにcygterm.cfgがあるので編集します。

・TERMの行を「TERM = putty.exeのWin32フルパス -load 保存した設定名 %s %d」と書き換える。

− 例えば TERM = C:\program files\putty\putty.exe -load cygterm %s %d

補足: CygTermは上記の%sをホスト名に、%dをポート番号に置き換えて、CreateProcess Win32 APIを呼び出します。 この置き換えがsprintfで行われている(!)ので、%sと%dは必ずこの順でなければなりません。 つまり「-load cygterm -P %d %s」では動かないので注意。

page top
●実行

 あとはCygTermを実行するだけ。 CygTermのショートカットをデスクトップに作っておくと便利。

 パスを通しておくと、コマンドプロンプトから cygterm でも実行できるし、CygTermから立ち上げた端末エミュレータの中からも cygterm & で新しい端末エミュレータが立ち上がって便利。 コマンドラインから設定の一部を変更して立ち上げることもできる。

シェルを指定する
cygterm -s '/bin/bash --norc'
シェルは中でexecvしているだけなので、実はシェルスクリプトでもよい
cygterm -s '/home/user/somescript.sh'
端末エミュレータの指定
cygterm -t 'putty -load cygterm-utf8 %s %d'
環境変数も指定する
cygterm -t 'putty -load cygterm-utf8 %s %d' -v 'LANG=ja_JP.utf8'
全部指定する
cygterm -t 'putty -load cygterm-utf8 %s %d' -s '/home/user/utf8script.sh' -v 'LANG=ja_JP.utf8'

 つまり、好きな端末設定で、好きな環境を指定して、任意のスクリプトを、端末エミュレータの中で実行できる。

 Windows上でCygTermのショートカットを作り、プロパティで「リンク先」にこのコマンドラインを書いておくと、DOS窓を通さずに端末エミュレータ内でスクリプトを実行できる。

Copyright (C) 2009 You SUZUKI

$Id: cygterm.htm,v 1.4 2017/05/10 05:36:43 you Exp $