アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

screen(だけ)の時代は終わり。tmuxでリモートコンソールを便利に使うTips

※ コメントをいただきましたので、一部本文を修正させて頂きました。
1.サーバー・クライアントモデルというのはネットワーク接続なイメージになってしまいますので、取り外しました
2.mouse-utf8に関してコメントを頂いたので補足しました
3.タイトルを「screenの時代は終わり。tmuxでリモートコンソールを便利に使うTips」から「screenだけの時代は終わり。tmuxでリモートコンソールを便利に使うTips」に変更しました(変な誤解を受けられた方がいらっしゃったため)

お久しぶりの田中です。最近、ずっと大型案件に携わっていた関係で、あまりブログ等でのアウトプットができていませんでした。これからはドンドン書いていきますので、どうぞよろしくお願いします。本日はGNU screenと同様の機能を持つtmuxを紹介します。

GNU screenやtmuxは、1つのターミナル画面上に複数のコンソールウィンドウを表示するためのソフトです。デファクトスタンダードであるGNU screenと比べて、tmuxは比較的最近、注目を浴びています。私も1年ほどtmuxを常用し、便利に使わせていただいています。ここでは、tmuxを便利に使うために僕が行なっている設定を紹介します。



○ tmuxの特徴

screenとは異なり、tmuxはクライアント・サーバーモデルとなります。tmuxサーバーが常時起動し、tmuxクライアントのattachを待ちます。そのため、複数のPCで同じ画面を表示することができます。

・また、tmuxでは1つの画面(window)を複数のコンソールに分割する(複数pane)ことができます。その分、tmuxでは、client、window、paneという概念があり、screenよりは複雑になっています。

コマンドラインも充実しています。ウィンドウ分割やバッファ操作などの命令は、キーバインドだけでなく、tmuxコマンドを用いても指示を出せます。これを使って各サーバーの自作管理ツールを作っていますが、その話はまたどこかで言及したいと思います。

○ tmuxを起動する

Debianの場合、



apt-get install tmux


でサクっとインストールできます。tmuxコマンドをタイプすると、コンソールが表示されると思います。

○ よく使うtmuxコマンド

私は下記のコマンドをよく使います:



tmux attach - すでに開いたセッションにアタッチする
tmux list-windows (C-b w) - ウィンドウの一覧を取得する
tmux new-window (C-b n) - 新しいウィンドウを作る
tmux detach-client (C-b d) - クライアントをデタッチする
tmux list-keys (C-b ?) - キーバインドの一覧を表示する
tmux next-window (C-b n) - 次のウィンドウを表示する
tmux previous-window (C-b p) - 前のウィンドウを表示する
tmux kill-window (C-b k) - ウィンドウを強制的に閉じる


tmux attach以外は、すべてキーバインドアサインされています。デフォルトはCtrl-bですが、.tmux.confを編集することで変更可能です。

○ tmux.confでカスタマイズ

ホームディレクトリの.tmux.confを作成して編集することで、キーバインドの変更や、オプションの設定を行えます。ここでは、私が設定している設定について説明します。

1.バックスクロール行数を増やす



set-option -g history-limit 10000


この例では、tmuxのヒストリサイズを1万行に設定しています(デフォルトは2000行)。tmuxではウィンドウごとにバッファを管理しており、さかのぼって検索するだけでなく、コピー&ペーストを行うことも可能です。

2.ステータスラインの見た目変更



set-option -g status-utf8 on
set-option -g status-interval 5
set-option -g status-bg black
set-option -g status-bg white
set-window-option -g window-status-current-bg blue
set-window-option -g window-status-current-fg white


この辺の設定はお好みで。マニュアルを見ながらカスタマイズすると良いでしょう。

3.マウス操作に対応する



set-option -g mouse-select-pane on
set-option -g mouse-select-window on
set-option -g mouse-resize-pane on
set-option -g mode-mouse on
# PuTTYを使う場合は、下記の設定はoffを推奨(コメントを参照してください)
set-option -g mouse-utf8 on


上記設定により、私が普段使っているPuTTYにて、マウスが使えるようになります。マウスの範囲選択でバッファへのコピー&ペーストを行ったり、ステータスラインでマウスクリックによるウィンドウ選択などが可能になります。PuTTYの場合、デフォルトのマウス動作(Windows標準クリップボード)を使いたい場合は、Shiftキーを押しながら操作します。

4.キー割り当てのカスタマイズ



bind -n C-Space next-window
bind -n M-Space previous-window


私はフルスクリーン作業を中心にするため、頻繁にウィンドウ切り替えを行います。そのため、Ctrl-スペース、およびAlt-スペースをウィンドウ操作に割り当てています。

5.画面に表示されている内容を自分宛にメールで送る



bind S run "tmux capture-pane -S -10000; tmux show-buffer | /usr/sbin/sendmail masahiro@example.com"


よく、今見えている画面を残しておきたい(ログがわりに取得しておきたい)ことがあります。そういう時には、上記設定が便利です。Ctrl-Sをタイプすると、バッファの1万行分の画面表示が、自分のメールアドレスに送信されます。

上の例のように、tmuxではバインドキーに対してシェルスクリプトを実行できます。使い方次第では、他にも応用例が考えられるでしょう。

○ tmuxの注意点

ウィンドウを多数開いている場合、スクロールバッファを増やしすぎると、tmuxサーバープロセスのメモリ使用量が非常に大きくなり、固まってしまうことがあります。tmuxの安定性に対して疑問に思うことはありませんが、あまりスクロールバッファを大きくすることは控えたほうが賢明です。