Windows内でUnix的な作業を行いたい場合には Cygwin を使っていて、 また、他の端末にsshして作業を行いたい場合には PuTTY を使っています。
Cygwinは古いマシンだと結構重くて、また、PuTTYだと Mosh を使う事が出来ません。
そこでたまに何か無いかな、と思って探してたんですが、 MobaXterm というのが色々便利そうだったので使ってみました。
- MobaXterm
- MobaXtermの見た目
- Cygwinのパッケージをインストール
- MobaXterm用(BusyBox用)に.bashrcをアップデートする
- PROMPT_COMMAND
- Windowsのファイル操作
- openコマンド(cygstart)
- mosh-clientがデフォルトで入ってる
- PuTTYのセッションが使える
- 日本語
- 設定項目
- まとめ
MobaXterm
MobaXterm
Enhanced terminal for Windows with X11 server, tabbed SSH client, network tools and much more
ということで、Windows環境でUnix環境を提供してくれて、 X11サーバーも付随して使える様になります。
MobaXtermはBusyBoxをベースとしていて、 本体自体は非常に軽い(20MB程度)ものになっています。 (インストール版とポータブル版があります。)
Cygwinの様にローカルでもUnix環境を使うことが出来ます。 また、SSHのセッション等の登録が出来るので、 それらを使うことでPuTTYの様にGUIベースでセッションを直接始めることも可能です。
Home Edition(フリー版)とProfessional Edition($69) 1 がありますが、 フリー版で殆ど問題無いと思います。
気になる所だと
- Max. 12 sessions
- Max. 2 SSH tunnels
- Max. 4 macros
という制限がありますが、これらはMobaXtermへ登録出来る数で、 普通にコマンドラインからsshしたりする分には影響無いので 特に問題無いと思います。
MobaXtermの見た目
MobaXtermを立ち上げるとこんな感じのターミナルが立ち上がります。
ただし、この絵では既に見た目のSkinが変更されていて、 メニューバーや左のセッション等の表示をしないようにしてあります。
CygwinでMinttyを使う様な物と違って、1つのアプリケーションが立ち上がって居るような感じで、 このウィンドウで色々出来るボタンとかメニューが付いているのが特徴的。
ターミナル周りがゴタゴタしてしまいますが、 各タブを本体から切り離すことも出来て、 そうすると少しスッキリしたターミナルになります。
それでも上のメニューバーの部分を完全に消せないのがちょっと残念。。。
Cygwinのパッケージをインストール
また、環境自体はCygwinに合うように設計されている様で、 Cygwinのレポジトリにあるバイナリを使うことが出来ます。 つまり、 apt-cyg を使ってパッケージをインストールすることが出来ます。
apt-cyg
はデフォルトでインストールされていて、
apt-get
にもaliasされています。
ただし、注意としてこのapt-cyg
は普通のCygwinで使うapt-cyg
とは違う物で
互換性が無いので、
自分でCygwin用のapt-cyg
をインストールしてしまうと使えません。
取り敢えず必要そうなものとして
$ apt-cyg install make gcc-core git vim screen ncurses
こんな感じ(makeやgcc-coreはvimでvimprocを使う用)。 これで、Vimはif_luaでほぼ最新のパッチが当たった物が入りますし、 screenも4.2.1が入りました。
MobaXterm用(BusyBox用)に.bashrcをアップデートする
BusyBoxではコマンドの機能を必要最小限にする、 と言う思想があって、通常のGNUコマンド等と違う部分があったりします。
ls
に関してとかだと
show-~
のオプションがありません。
なので.bashrcとかで
1
|
|
みたいなaliasを設定しているとエラーが出ます。
なので共有.bashrcを使いたい場合、MobaXtermであることを見つけて 設定を変更する必要があります。
MobaXtermでは環境変数OSTYPE
はCygwin同様cygwin
となっているので
これは使えません。
BusyBoxはbusybox
という1つのバイナリ実行ファイルがあって、
これが全てのコマンドを持っている
(ls
なども全部このファイルに引数を与える事で実行する。実際にはそれをaliasしてあります。)
ので、このファイルがあるかどうかをチェック。
1 2 3 4 5 |
|
もしくは上の様なaliasであればls
コマンドを直接調べて
1 2 3 4 5 6 7 |
|
こんな感じで。
または、BusyBoxというだけではなくて、MobaXtermである、ということを確認するには Homeディレクトリが通常どのユーザーでも/home/mobaxterm/ と設定されてるので
1 2 3 |
|
というのもOK。ちなみに/home/<USER>/というディレクトリも元々存在していて、 /home/mobaxterm/へのハードリンクの様になってるみたいです。
また、BusyBoxなので通常コマンドが全てaliasになっています。
例えばln
は/bin/busybox.ext ln
です。
なので通常のコマンドにラッパー関数を割り当てたりしようとすると aliasが優先されてしまうので注意する必要があります。
Cygwinではln
コマンドをWindows側でも使えるシンボリックリンクにするため、
cmd
でコマンドプロンプトのコマンドmklink
を呼ぶ様な
ラッパー関数に割り当ててあります。
これをそのままMobaXtermに持って行ってもBuxyBoxのaliasされたln
が優先されてしまうので、
1 2 3 4 5 6 |
|
の様に一度ln
をunalias
してから関数に割り当てる必要があります。
追記: 2015/01/25
上のCygwin内外でリンクを共有する
の方でコメントもらいましたが、
CygwinではCYGWIN
という環境変数があって、これにwinsymlinks
という値を
設定すると通常のln -s
コマンドがWindowsのシンボリックリンクを作る様になります。
試してみたところこれはMobaXtermでも使える様です。 この場合、aliasを解く必要もないので、Cygwin設定と同様、
1 2 3 |
|
と設定するだけでln -s
コマンドでWindowsのシンボリックリンクを
作れる様になります。
追記ここまで
PROMPT_COMMAND
.bashrc設定の続きですが、 上の最初の絵にあるように、MobaXtermでは
Each command status is specified by a special symbol
ということを勝手にしてくれます。 が、これが邪魔です。
今使ってる設定と組み合わせるとこんな感じの表示に。
hostname ~]$ ls
Desktop LauncherFolder MyDocuments usr
✔
-----------------------------------------------------------------------------]
hostname ~]$
これはPROMPT_COMMAND
に
r0=$?;if [ -z "$NP" ]; then i0=0;s0="";while [ "$i0" -lt "${COLUMNS:-80}" ];do s0="q$s0";i0=$[$i0+1];done;builtin echo -ne "\n\E[1;30m\E(0$s0\E(B\E[0m"; [ $r0 == 0 ] && builtin echo -ne "\e[1A\e[32m\e(0d\e(B\e[0m\e[1B" || builtin echo -ne "\e[1A\e[31m\e(0e\e(B\e[0m\e[1B";else unset NP;fi;
という値が入ってるためです。
これを最初に外しておくために、.bashrcの自分のPROMPT_COMMAND
を設定する前に
1 2 3 |
|
といった感じでリセットしておきます。
Windowsのファイル操作
MobaXtermでは上のスクリーンショットにもあるように /drivesというディレクトリにc等のドライブ名が書かれたディテクトリがあって、 Windowsの環境へアクセス出来ます。
Cygwinとの互換性を持たせるために/cygdriveも/drivesへの シンボリックリンクとして存在しています。
HomeディレクトリにはMy Documentなどへのリンクが元々貼られています。
このHomeディテクトリの実態は通常インストールしたものだと
C:\Users\<USER>\Documents\MobaXterm\home
の位置でWindows側からアクセスできます。 なので初期状態ではCygwinとは違うHomeを使うことになります。 (下にCygwinと同じHomeにする設定があります。)
また、Windows側で作られたファイルのパーミッションがそれぞれどう見えるか、
ですが、これはCygwinの場合と同じで、
Windows側で作られたファイルは通常全て700
のパーミッションを持ってるように見えます。
後は、上でやりましたが、通常のln -s
を使ってシンボリックを作ってしまうと、
それはWindows側からはリンクとして認識できないので、
ラッパー関数でコマンドプロンプトのmklink
へ渡す様にします。
openコマンド(cygstart)
Macではopen
というコマンドに引数でファイルを与えると、
適当なアプリを選択してファイルを選んでくれると言う機能があります。
これと同じことがCygwinではcygstart
と言うコマンドを使って出来ます。
わかりづらいのでCygwinでは
alias open='cygstart`
としています。
MobaXtermにもcygstart
というコマンドは入っていますが、
さらにこれが最初からopen
という名前でaliasされていました。
こういう細かい所で結構良い感じのオプティマイズが進んでる感じがします。
mosh-clientがデフォルトで入ってる
Windows環境での新たなターミナルっぽいものを求める1つの理由である Moshを簡単に使える、 と言う事をMobaXtermは実現してくれます。
現時点でMoshはCygwinのレポジトリには無いので、 Cygwinで使いたい場合自分でコンパイルして入れる 必要があります。
また、PuTTYでもやろうと思えば出来る 2 みたいなんですが、結構面倒です。
一方、MobaXtermにはmosh-client
がデフォルトで入っていていきなり使えます。
また、接続セッションを登録する際にもssh
だけでなく、
mosh
接続と言う形でも登録することが出来ます。
上の絵を見て分かる通り、ssh
やmosh
だけでなく、VNCなども登録して使うことも出来ます。
PuTTYのセッションが使える
PuTTYがインストールされていてセッションの登録があると、 MobaXtermは自動的にそのセッションの設定を取ってきて使えるようになります。
日本語
設定とかは全て英語のみですが、 ターミナル上で日本語を使うことは出来ました。
日本語ファイルをls
で表示したり、ファイルをopen
したり、
またVim等で日本語を編集することも問題ありません。
設定項目
- General
Homeディレクトリなどを設定できます。
ここでPersistent home directoryに
_CurrentDrive_:\cygwin\home\<USER>
に指定すれば
Cygwinと同じHomeを使うことも可能です。
(上に書いた様にapt-cyg
が共有出来ないのでその辺を上手く処理しておく必要があります。)
- Terminal
フォントやバックグラウンドなど、ターミナルの設定。
- X11
X11の設定。デフォルトではMobaXtermが立ち上がると同時にX11も立ち上がります。
PuTTYの場合にはXを別途用意しないといけませんし、 Cygwinでもいちいち立ち上げる必要があったりするので、 何も考えずにX環境がいきなり使える、と言う点では結構うれしいポイントです。
- Display
Skinを選んで見た目を変更したり、 ツールバーやサイドバー等の表示を設定したり出来ます。
上の設定では最小限の表示にしているつもりですが、 出来ればMenus and buttonsとかで両方共表示しない、とかの項目があると嬉しい。。。
- Toolbar
Toolbarに何を置くかを設定できます。
まとめ
使ってみた感じとしては、Cygwinなんかよりもキビキビ動く感じがしました。
最初に立ち上げる時に環境を立ち上げるために少し時間がかかりますが、 Cygwinでも最初の起動は時間がかかるのでそれよりは速い感じ。
また、初期では最小限度のコマンドしか無いとはいえ、
Cygwinと比べてインストール時間は圧倒的に速いです。
apt-cyg
も使えるので後は好きにインストールしていけば良い、という感じ。
後はMoshがデフォルトで使える点と X11サーバーも入っていてが自動で立ち上がって使える様になる所は 非常に便利だと思います。
Windowsを導入して初期状態でパッとUnix環境作るのであれば Cygwinと比べて圧倒的に簡単に素早く出来ます。
SSHだけするでも、PuTTYだとX環境が必要だと別途用意する必要があるので、 MobaXtermなら自分でXも用意してくれるので便利。
ポータブル版もあるので、USBメモリに入れておけば他人のWindowsでも 即座に自分のUnix環境を使う、ということも可能。
最大のちょっとあれかな、と思う点は見た目で、 ごちゃごちゃした周りの物が消せないと余り使うきにはなれません。。。 Professional Editionでは、余計なGameとかを削除したり 最初の表示メッセージを変更したりは出来るみたいですが、 この辺の表示は特に変更ないみたいなので残念な所。 もうちょっとターミナルだけのシンプルな物にできたら嬉しいです。