Windows98 UNIX化計画


私はPC-9821Xa7eにFreeBSDをインストールしようとがんばってきました.しかしX-Windowの設定などなかなかうまくいきませんでした.それに今まで使い慣れたWindows環境を離れるのもちょっとつらいものがあります.それで今回は手法を変えて,Windows98をUNIX化しようとする事にしました.題して"Windows98 UNIX化計画".いろいろインチキな手を使ってWindowsをUNIXライクにしてしまおうという企画です.

第一回 DOSKEYを使おう.
第二回 UNIX Like Tools DLL版 を使おう.
第三回 ComWinを使おう.
第四回 UNIX 95 Collection Version 7を使おう.
第五回 Mule for Win32 を使おう.
第六回 シェル環境を整えよう(tcshの利用).
第七回 vncを使おう.

第一回 DOSKEYを使おう.

MS-DOSの"COMMAND.COM"は初期状態ではあまりにも機能が貧弱でそのままでは使用に耐えません.コマンドライン編集機能やヒストリ機能ぐらいは使いたい物です.それを実現するのが"DOSKEY"です.実行の仕方は簡単.MS-DOSプロンプトから"DOSKEY"とタイプインするだけです.それで様々な機能をCOMMAND.COMに持たせることができます.いちいちMS-DOSプロンプトを立ち上げるのが面倒という人はAUTOEXEC.BATに登録しておきましょう.AUTOEXEC.BATをエディタで開いて"DOSKEY"の一行を書き込みましょう(pathが通っていることが条件)."/insert"のオプションでインサートモードも指定できます.DOSKEYの主な機能をTable7.1に示します.

直前のコマンド呼び出し
次のコマンドを呼び出す
行編集,カーソル右
行編集,カーソル左
F7 コマンド履歴を表示
Table7.1 DOSKEYの機能一覧

などです."delキー"や"Back Spaceキー"等もコマンドライン編集に使えます. ついでですから,コマンドもUNIXライクにしてしまいましょう.ここではDOSKEYのマクロ機能を使います.DOSKEYマクロ機能とは複雑な入力を簡単な文字列で置き換えることです.

例えば,UNIXのコマンドで"ls"があります.これはファイル,ディレクトリの一覧を示すコマンドです.これはMS-DOSでは"dir"が相当します."dir"を"ls"という文字列で実行するように設定します.MS-DOSプロンプトから次のようにタイプインしてください.

DOSKEY ls=dir

これで"ls"とタイプインすると"dir"が実行されるようになりました.試しにやってみましょう.MS-DOSプロンプトから"ls"とタイプインしてください.ファイル,ディレクトリの一覧が表示されます.ちなみにこういうのもアリです

DOSKEY ls=dir /p

"/p"オプションは一覧が全部一度に表示できないときに,どれかキーを押すまで表示をストップさせるものです.このようにスペースを含んでも大丈夫です.このようにして"copy"を"cp"に,"del"を"rm"にとつぎつぎにマクロを設定しましょう.またAUTOEXEC.BATに登録することも可能です.これでUNIX風DOSの出来上がりです.(^^;


第二回 UNIX Like Tools DLL版 を使おう

DOSKEYマクロ機能は便利ですが,しかしUNIX風のコマンドをいちいち登録するのは面倒ですし,バッチ処理で組み込むのはナンセンスな気がします.ここではUNIX風の外部コマンド集"UNIX Tools"を紹介します.

入手は窓の杜からダウンロードできます.サーチパスの通ったディレクトリにコピーして解凍してください.(ちなみに私はA:\DOS\unix にダウンロードし,パスを通しました)その中に"Inst_nt.bat"があるはずです.これがMS-DOSプロンプト用のモジュールです.これを実行するといろいろなUNIX風の外部コマンドが自己解凍されます.品揃えは cal cat chdir chmod cmp cp date df diff echo expand fold grep head join ls man mkdir mv od pwd rm rmdir sort split tail tee touch tr unexpand uniq wc which

などです.これらのプログラムはMS-DOSプロンプト上でしか実行できません.MS-DOSをリアルモード(MS-DOSモード)で起動した場合,これらのコマンドは一切利用できません.しかしこれでさらにいろいろなコマンドを使えるようになりました.


第三回 ComWinを使おう.

ComWin32はWindowsでのキャラクタベースのコマンド入力を実現するシェルです.特にその中でも気に入っているのが,"cwsh.exe"です.cwsh.exe とは Windows95, Windows NT のコマンド(DOS)プロンプト用に開発された Win32コンソールアプリです。UNIX の csh, DOS の command.com に相当するプログラムです。

"cwsh.exe"はコマンドプロンプトに常駐し次の機能を付加します。

(a) ハイテキスト機能

(b) 色変更機能

(c) ラインエディット機能

(d) ヒストリ機能

(e) ファイル名補完機能

(f) エイリアス機能

(g) マルチステートメント機能

(h) 関連付け起動機能

(i) 拡張バッチファイル機能

(j) Unicodeフィルター機能

特に気に入っているのはファイル名補完機能です.これはTabキーを押すことで実行できます.学部の時,この機能を使ってEWS上での作業を大幅に軽減していたので,MS-DOSでこの機能が使えないことが一番のストレスでした.MS-DOS上でファイル名補完機能を実現しようとがんばっていたときに見つけたのがこのtoolでした.


第四回 UNIX 95 Collection Version 7を使おう.

これもUNIX Like Tools と同じくUNIX風の外部コマンド集です. 場所は"http://www.itribe.net/virtunix/mystuff.html"にあります.解凍はWinZipなどのツールを使えばよいでしょう.32bit用と16bit用が用意されていて,解凍するとそれぞれ別ディレクトリに解凍されます.パスを通せば即使えるようになります.

しかし,ここで困ったことが・・・ たくさんのUNIX風のコマンドを入手したまではよかったのですが,たくさんパスを設定しても,まず最初に書かれたパスからサーチしていくので,思った通りのコマンドを実行できなくなってしまいました.その結果,環境がごっちゃになってしまいました.そこで考えた方法がバッチ処理する方法です.サンプルを以下に示します.ここではMS-DOSプロンプトで一緒に実行するバッチファイルを記述しています."cwsh.exeを"を実行するようになっています.


@ECHO OFF
path ;
path c:\dos;\c:\windows;c:\windows\command
c:\windows\cwsh.exe
IF errorlevel 0 exit

パスを新たに設定し直しています.またcwsh.exeが終了したとき自動的にMS-DOSプロンプトを終了できます.

ここまで,いろいろなUNIX風のコマンドを使用してきましたが,結局この UNIX 95 Collection Version 7が一番UNIXに近いようです.私は結局,UNIX 95 Collection Version 7とtcshの組み合わせで使用しています.


第五回 Mule for Win32 を使おう.

Mule(Muletiligual enhancement to gnu Emacs)は電総研の半田氏らにより作成された他国語対応のGNU Emacsでありますが,単なるエディタの一種ではありません.メールの送受信,NetNewsの購読,Webページのブラウジングなど,枚挙にいとまがないほど環境をMule上から行えるのであり一つのプラットフォームを提供していると言っても過言ではありません.

ということで,Windows版のMule for Win32をインストールしてみました.入手方法は各anonymous FTPサイトからダウンロードできます.

Mule2.3Win32-W121-xxx.tar.gz

というファイル名になっています.私は探すのが面倒だったので,窓の杜からダウンロードしました.

さっそくダウンロードしてみました.東工大のネットワーク接続環境はかなり速いので7582KBの巨大なファイルも速攻でダウンロードできました.

私がダウンロードしたファイルは"mule2.3win32-w122-i386.tar.gz" です.tar + gzip で圧縮されて解凍するにはちょっとした工夫が必要です.私は同サイトからTar.exeとgzip.exeも一緒に落としてきました.

具体的な解凍方法はコマンドラインから次のように入力します.(今はA:\usr\localに圧縮ファイルがあるとします.)

A:\usr\local>Tar zxvf mule2.3win32-w122-i386.tar.gz

無事解凍作業が終了すれば,Mule2というディレクトリがつくられます.今の例ではA:\usr\local\Mule2というディレクトリができます.具体的なインストール方法はInstallコマンドを実行すればインストールを開始できます.最初にデフォルトのホームディレクトリを指示しなければなりませんが,使用状況に応じて決定してください.後でコマンドラインから設定し直すこともできます.環境変数を設定し直すのです.
例えば

set HOME=A:\usr\local\manabu

などと決定すればよいわけです.


第六回 シェル環境を整えよう(tcshの利用).

みなさんご存じでしょうが,WindowsやMS-DOSのCommand.comはあまりにも機能が貧弱すぎて使い物になりません.これまではいかにしてこの状況を改善するかを紹介してきたわけですが,Mule上からでもshellを実行させることができます.Mule for Win32から,

M-x shell

を実行すると,コマンドプロンプトを立ち上げることができます.ここで"M-x"とはMETAキーを押してからxキーを押すことです.私のマシンにはMETAキーがありませんでしたので,ESCキーで代用しました.ここではコマンドライン編集機能やヒストリ機能もどきの使い方も一応できます.ただしコマンド・ライン補完機能などを持たないため,それだけではやはり物足りないはずです.

そこで登場するのがtcsh 6.08.01をWin32へ移植したものです.これは

tcsh_exe.gz

という名前で

http://www.itribe.net/virtunix/contributors.html

にあります.なにか適当なtoolで解凍してください.解凍後にはtcsh.exeができます.タスクマネージャなどに登録すれば,通常のWindowsアプリケーションと同じように起動できます. もちろん環境変数shellにtcshを指定することもできます.これを標準のシェルに設定するには,

set SHELL=c:\usr\local\bin\tcsh.exe

などと設定すればO.K.です.

ただこのまま使用していてもかまわないのですが,それでは少々もったいないともいえます.なぜならtcshはほかのシェルにはない強力なcomplete機能を持っており,Win32版でもその機能を実現しているからです.

tcshは設定ファイルとして$HOME/.tcshrcを参照するようになっています.".tcshrc"が見つからなかった場合,$HOME/.cshrcを参照します.私がやった設定を例として載せておきます.

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

# .tcshrc の例です.
# "#"で始まる行はコメントで,プログラムの中では無視されます.


# shell と homeはAUTOEXEC.BATで設定されていれば特に指定する必要はない.
set path = (a:/usr/local/bin a:/windows a:/windows/command)
set shell = /usr/local/bin/tcsh
set home = /usr/local/manabu

# ファイル補完に失敗した際ビープ音を出さない.これを設定しないとうるさくて仕方がない.
set nobeep
# Ctrl-Rでヒストリの後方検索ができる.
set edit


umask 022
bindkey ^s i-search-back
bindkey ^r i-search-fwd


# プロンプトの表示を設定できます.
if( ${?prompt} ) then
    set prompt="$USER@"$HOST":%~%"
    set histdup

# ヒストリに保存するコマンドの最大数を256に指定
set history=256
set histfile = ~/.history
set savehist = 256
alias ls ls -F
endif


# complete機能,Tabキーで実行できます.ぜひ使ってみて.
if( ${?tcsh} ) then
set autocorrect
set autolist = ambiguous
set complete = enhance
# どれだけ時間がたってもlogoutしない.
unset autologout
endif

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

tcshはMS-DOSプロンプト上からも実行でき,コンプリート機能も当然使えます.しかし,少々動作が異なります.Muleのシェルモードでは必ず,大文字と小文字は区別されるのですが,MS-DOSプロンプトでは当然ながら大文字と小文字が区別されません.そのくらいかな.



第七回 vncを使おう.

vncてなに?

vncはクライアント側でサーバー側のデスクトップを操作できるものです.つまり私の98からUNIXマシンのX Windowを操作できるようになります.

vncserverの起動

vncを動かすには,サーバーが動いてなければなりません(当たり前か).サーバーが動く環境は結構豊富です.

サーバーの動かし方はそれぞれ違うのですが,WindowsとMACの場合は結構簡単です.というのはこれらのOSにはデスクトップは一個しかないので,サーバーを最初に動作させると,パスワードを決めさえすれば,あとは終わりです.

このページの意図はWindowsをUNIXみたいにしてしまおうというものです.しかし,Windowsでサーバーを起動してもWindowsのデスクトップを持ってくるだけです.ですからvncでUNIX化計画を実行するためには,X-Windowが動いているUNIXマシンがどうしても必要です.またそのサーバーとなるコンピュータとクライアント側が接続されていなければなりません.その接続も通信速度を考慮するとLAN接続が望ましいです.一度自宅から28.8kbpsのモデムで挑戦してみました.その速さはPC-H98に無理矢理インストールしたWindows95ぐらいの速さでした.(分かる人はいないか・・・)

幸いなことに,うちの研究室ではLAN環境がある程度整備されており,かつUNIXマシンがあって,またまた幸いなことに,そこでvncサーバーとX サーバーが動いてました.ですからその環境を使わせてもらいました.

しかし,LAN接続されたUNIXマシンを自由に使える環境にある人はそうはいないでしょう.とりあえず,UNIXマシンに接続できて,かつvncserverがすでにつかる状態であると仮定して話を進めます.

vncでX Windowを使おうとする場合,Xサーバー兼vncサーバーとなるプログラムが動いてなければなりません.それがXvncです.またXvncを直接呼ぶと,いろいろ操作が面倒なので,それを包む優しいプログラムが用意されています.それがvncserverというperlスクリプトです.

Windowsとの違いは,UNIXの場合ユーザーがたくさんいてそれぞれがデスクトップをもっています.ですから,UNIXのvncserverはいっぺんに何個も動かせるようになっています.その場合,複数のデスクトップを区別しなければなりません.X プログラムは クライアントですから,どこのサーバーに接続するのか知らなければなりません.これを設定するのが環境変数"DISPLAY"です.Xクライアントは"DISPLAY"の値が示すサーバーに接続されるわけです.変数DISPLAYは"ホスト名:番号.番号"という構造体です.

同じホストで複数のX サーバー動いている場合は,コロンの後ろの番号で区別します.スクリプト vncserverを実行すると,どの番号でX サーバーが動いているか報告してくれます.vncviewerで接続できるのは,パスワードを知っているvncserverだけです.だからvncviewerで接続するときにどのサーバーに接続するか聞かれますが,自分が動かしたサーバーの番号をよく覚えていてください.

vncserverをいよいよ実行してみましょう.コマンドは

vncserver -geometry 800x600 -depth 16

オプションが設定されていますが,この例だと,解像度:800x600,色数:16bitで表示されます.もし何もいわないとvncserverは解像度:640x480,色数:同時256色で表示されます.

vncviewerの起動

vncserverが無事起動できたら,早速クライアント側でもvncviewerを起動してみましょう.起動すると接続するvncserverを聞いてきます.そこで先ほどでてきた"ホスト名:番号"を入力してください.例えば,

131.112.30.1:0

こんな感じです.うまくいけば,めでたくX Windowが表示されるはずです.

カスタマイズ

ディレクトリ~/.vnc/ に xstartup というスクリプトがおいてあります.これを変更すれば動作をいろいろと変更できます.この設定の仕方は,ここでは紹介しないことにします.vncの使い方とは全く別の問題です.これを紹介した本,ホームページなど探せば結構あるはずです.

このvncに関しては,うちの研究室のUNIXマシン管理者である藤田さんが,研究室のメンバーのために研究室のUNIXマシンの使い方を説明したホームページを参考にして書かせてもらいました.



参考文献:UNIX USER 1997年12月号 『Win32 UNIX化計画 』 ソフトバンク株式会社