rcmdnk's blog
Last update

20150124_mobaxterm_200_200

Windows内でUnix的な作業を行いたい場合には Cygwin を使っていて、 また、他の端末にsshして作業を行いたい場合には PuTTY を使っています。

Cygwinは古いマシンだと結構重くて、また、PuTTYだと Mosh を使う事が出来ません。

そこでたまに何か無いかな、と思って探してたんですが、 MobaXterm というのが色々便利そうだったので使ってみました。

Sponsored Links

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を立ち上げるとこんな感じのターミナルが立ち上がります。

mobaxterm

ただし、この絵では既に見た目のSkinが変更されていて、 メニューバーや左のセッション等の表示をしないようにしてあります。

CygwinでMinttyを使う様な物と違って、1つのアプリケーションが立ち上がって居るような感じで、 このウィンドウで色々出来るボタンとかメニューが付いているのが特徴的。

ターミナル周りがゴタゴタしてしまいますが、 各タブを本体から切り離すことも出来て、 そうすると少しスッキリしたターミナルになります。

mobaxtermdetach

それでも上のメニューバーの部分を完全に消せないのがちょっと残念。。。

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 ls='ls --color=auto --show-control-char'

みたいなaliasを設定しているとエラーが出ます。

なので共有.bashrcを使いたい場合、MobaXtermであることを見つけて 設定を変更する必要があります。

MobaXtermでは環境変数OSTYPEはCygwin同様cygwinとなっているので これは使えません。

BusyBoxはbusyboxという1つのバイナリ実行ファイルがあって、 これが全てのコマンドを持っている (lsなども全部このファイルに引数を与える事で実行する。実際にはそれをaliasしてあります。) ので、このファイルがあるかどうかをチェック。

1
2
3
4
5
if type -a busybox >& /dev/null;then
  # For MobaXterm(BusyBox)
else
  # For other than MobaXterm(BusyBox)
fi

もしくは上の様なaliasであればlsコマンドを直接調べて

1
2
3
4
5
6
7
if ls --color=auto --show-control-char >/dev/null 2>&1;then
  alias ls='ls --color=auto --show-control-char'
  alias la='ls -A --color=auto --show-control-char'
else
  alias ls='ls --color=auto'
  alias la='ls -A --color=auto'
fi

こんな感じで。

または、BusyBoxというだけではなくて、MobaXtermである、ということを確認するには Homeディレクトリが通常どのユーザーでも/home/mobaxterm/ と設定されてるので

1
2
3
if [ $HOME = /home/mobaxterm/ ];then
  # For MobaXterm
fi

というのもOK。ちなみに/home/<USER>/というディレクトリも元々存在していて、 /home/mobaxterm/へのハードリンクの様になってるみたいです。

また、BusyBoxなので通常コマンドが全てaliasになっています。 例えばln/bin/busybox.ext lnです。

なので通常のコマンドにラッパー関数を割り当てたりしようとすると aliasが優先されてしまうので注意する必要があります。

CygwinではlnコマンドをWindows側でも使えるシンボリックリンクにするため、 cmdでコマンドプロンプトのコマンドmklinkを呼ぶ様な ラッパー関数に割り当ててあります。

Cygwin内外でリンクを共有する

これをそのままMobaXtermに持って行ってもBuxyBoxのaliasされたlnが優先されてしまうので、

1
2
3
4
5
6
if type -a busybox >& /dev/null;then
  unalias ln >& /dev/null # for BusyBox
fi
function ln {
  opt="/H"
  ...

の様に一度lnunaliasしてから関数に割り当てる必要があります。

追記: 2015/01/25

上のCygwin内外でリンクを共有する の方でコメントもらいましたが、 CygwinではCYGWINという環境変数があって、これにwinsymlinksという値を 設定すると通常のln -sコマンドがWindowsのシンボリックリンクを作る様になります。

試してみたところこれはMobaXtermでも使える様です。 この場合、aliasを解く必要もないので、Cygwin設定と同様、

1
2
3
if [[ "$OSTYPE" =~ cygwin ]];then
  export CYGWIN="winsymlinks $CYGWIN"
fi

と設定するだけで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
if type -a busybox >& /dev/null;then
  PROMPT_COMMAND=""
fi

といった感じでリセットしておきます。

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のパーミッションを持ってるように見えます。

Git + Dropbox使用時の注意点

後は、上でやりましたが、通常の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接続と言う形でも登録することが出来ます。

mobaxtermnewsessions

上の絵を見て分かる通り、sshmoshだけでなく、VNCなども登録して使うことも出来ます。

PuTTYのセッションが使える

PuTTYがインストールされていてセッションの登録があると、 MobaXtermは自動的にそのセッションの設定を取ってきて使えるようになります。

mobaxtermsessions

日本語

設定とかは全て英語のみですが、 ターミナル上で日本語を使うことは出来ました。

日本語ファイルをlsで表示したり、ファイルをopenしたり、 またVim等で日本語を編集することも問題ありません。

設定項目

  • General

mobaxtermgeneral

Homeディレクトリなどを設定できます。 ここでPersistent home directory_CurrentDrive_:\cygwin\home\<USER>に指定すれば Cygwinと同じHomeを使うことも可能です。 (上に書いた様にapt-cygが共有出来ないのでその辺を上手く処理しておく必要があります。)

  • Terminal

mobaxtermterminal

フォントやバックグラウンドなど、ターミナルの設定。

  • X11

mobaxtermx11

X11の設定。デフォルトではMobaXtermが立ち上がると同時にX11も立ち上がります。

PuTTYの場合にはXを別途用意しないといけませんし、 Cygwinでもいちいち立ち上げる必要があったりするので、 何も考えずにX環境がいきなり使える、と言う点では結構うれしいポイントです。

  • Display

mobaxtermdisplay

Skinを選んで見た目を変更したり、 ツールバーやサイドバー等の表示を設定したり出来ます。

上の設定では最小限の表示にしているつもりですが、 出来ればMenus and buttonsとかで両方共表示しない、とかの項目があると嬉しい。。。

  • Toolbar

mobaxtermtoolbar

Toolbarに何を置くかを設定できます。

まとめ

使ってみた感じとしては、Cygwinなんかよりもキビキビ動く感じがしました。

最初に立ち上げる時に環境を立ち上げるために少し時間がかかりますが、 Cygwinでも最初の起動は時間がかかるのでそれよりは速い感じ。

また、初期では最小限度のコマンドしか無いとはいえ、 Cygwinと比べてインストール時間は圧倒的に速いです。 apt-cygも使えるので後は好きにインストールしていけば良い、という感じ。

後はMoshがデフォルトで使える点と X11サーバーも入っていてが自動で立ち上がって使える様になる所は 非常に便利だと思います。

Windowsを導入して初期状態でパッとUnix環境作るのであれば Cygwinと比べて圧倒的に簡単に素早く出来ます。

SSHだけするでも、PuTTYだとX環境が必要だと別途用意する必要があるので、 MobaXtermなら自分でXも用意してくれるので便利。

ポータブル版もあるので、USBメモリに入れておけば他人のWindowsでも 即座に自分のUnix環境を使う、ということも可能。

最大のちょっとあれかな、と思う点は見た目で、 ごちゃごちゃした周りの物が消せないと余り使うきにはなれません。。。 Professional Editionでは、余計なGameとかを削除したり 最初の表示メッセージを変更したりは出来るみたいですが、 この辺の表示は特に変更ないみたいなので残念な所。 もうちょっとターミナルだけのシンプルな物にできたら嬉しいです。

Sponsored Links
Sponsored Links

« github-cheat-sheetが便利 Google Translateのイベントトラックをユニバーサルアナリティクスでも有効にする »