screenをtscreenからtmuxへ乗り換えた

最終更新日

Comments: 0

普段、端末経由で作業をする際、GNU Screen ライクな tscreen を使っていました。tscreen は Screen 系の中ではマイナーな類のもので、Debian の公式リポジトリにも入っていません。自前でソースコードを取ってきてビルドして使っていました。 というのも、自分が Screen を使い始めた当初は今のようにあまり選択肢がなくて、GNU Screen 以外と言えば数えるほどもなかった気がします。

tscreen を使い始めた大きな(覚えている)理由としては、本家ではできなかった画面の縦分割をサポートしていた事でしょうか。本家のキーとも互換性が高かったのも理由の一つだったと思います。

tscreen を常駐させ、中でIRCメーラー、作業環境一式を立ち上げていましたが、cgdb などのターミナル制御をガリガリやっている一部のソフトとの相性が悪かった為、今さらながら tmux に乗り替えることにしました。

tscreen と比べて気付いたこと

画面ロック

tscreen ではスクリーンセイバーとして bsdgames の worms を表示させていました。tmux でも同じように画面ロック機能を用いて、任意のコマンドを実行できましたが、実装に差があるようです。

  • tscreen 画面ロック中もキー入力は tscreen がしっかり管理しており、任意のキーを押すだけで画面ロックが解除される。

  • ** tmux** 画面ロック中のキー入力は、スクリーンセイバーとして実行されたコマンドに移ってしまい、そのコマンドを終了させない限り、tmux はキー入力を感知しない。

worms は C-c で終了しない限り終了しないコマンドです。tscreen では任意のキーを押せば、tscreen が責任をもって worms を殺してくれますが、tmux では自分で殺す必要があるようです。 セキュリティロックさせる意味では、tmux のようにキー入力を完全に画面ロックコマンドに任せてしまう方が良い気がしますが、単にスクリーンセイバーとして使いたいだけだったら、画面ロックコマンドの使い勝手に依存しない tscreen の方が利便性は高いです。 どちらも一長一短なので、まあいいんじゃないかな、と思います。

Unicode 文字の扱い

IRC では UTF-8 のチャンネルに入っていて、最近 Twitter などで良く見る Unicode 文字を駆使したキモい顔文字なんかも表示できるようになっています。 tscreen では、意図的かどうか分かりませんが、とにかく表示しようとしてレイアウト(特に文字幅)が崩れる事がありました。tmux では、文字幅の扱いに不安がありそうな文字は全て半角の「?」で表示されているようで、レイアウトの崩れが少なくなっています。レイアウトが崩れても表示させたいもの、レイアウトが崩れてまで表示させたくないもの、いろいろあるかもしれませんが、Emacs でミニバッファを開きまくっている自分としては、tmux のほうが合っている気がしました。

# 多分、意図的にやっているわけじゃないんだろうな。curses 依存のような。
# ついでに言うと、未だに ISO-2022-JP のチャンネルで CP932 依存の半角カナを垂れ流す奴ら滅びろ。
# 往々にしてそういう発言は読めなくても困ることがないけれど。

ちなみに、tmux のほうが崩れない「気がする」程度で、崩れるタイミングではやっぱり崩れます。ただ、本来の目的であった cgdb がちゃんと表示できているから及第点は超えていますね。

ウィンドウとペインの概念

本家 GNU Screen から tmux へ乗り換えた人のブログ記事でもよく目につきますが、tscreen もウィンドウとペインの概念がなく、単にウィンドウだけです。 最初は戸惑いましたが、これも慣れれば大丈夫そうです。

デザイン比較

ガリガリとカスタマイズをした tscreen と、ほとんどまっさらな設定の tmux を比べるのはちょっとナンセンスですが、なかなかダサくなってしまいました。(tmux はこれから手を入れて行こうと思います。)

tscreen

tscreen

tmux

tmux

緑一色っておま…!

tmux のペインには、tscreen のウィンドウのタイトルバーみたいなものがないので、視覚的にどのペインがアクティブになっているか分かりづらいです。あくまでもデフォルト設定なので、カスタマイズする方法はあると思いますが。ちなみに、tscreen ではアクティブウィンドウのタイトルバーを赤く、ノンアクティブを薄い緑色で表現しています。tmux 側に立って言うと、タイトルバーがない分 1 行だけ広く使えるメリットもありますね。

tmux が使っている色が緑一色というのは、「ひょっとしてANSI 256 colorをサポートしていない端末向け…」と思ったりもしますが、このご時世、あんまりメリットがない気がします。ステータスバーのアクティブウィンドウ表示も「*」で表現していますが、背景色を変えたほうがよっぽど分かりやすいです。 かと言って、画面ダンプのモノクロ印字に耐えられるほどカラー表示にレイアウトが依存していないわけでもなさそうなので、今どき「4ビットカラー対応だぜ」っていうのもなんだか。

「最初からやっといてくれる」の感覚が、もうちょっとおせっかい気味でも良い気がしました。結局、RC ファイルをいじるなら量が減ろうが増えようが、普段使いにはあんまり関係なくなります。

その他 tmux の良いところ

他の方もたくさん書いていますが、軽い気がしたり、レイアウトがそこまで崩れなかったり、そんなに設定しなくてもそこそこ使えたり、とメリットもたくさんありそうです。

下のステータスバーには、ログイン名、ホスト名、カレントパスが常に表示されているので、bash のプロンプトは「$」だけにしても良さそうですね。tscreen でも設定をガリガリ書けば出来そうですが、地味に便利です。

時刻表示は、まあ当たり前として…あとはやはり慣れでしょうかね。

tscreen では日頃の惰性から C-a をコマンドキーにしていたのですが、bash や emacs で行頭に移動したい場合や、vim で数値をインクリメントしたい場合 C-a a とタイプしなければならず、少し手間でした。コマンドキーを変更すれば良かったんですが、慣れもあってついつい使い続けていました。 tmux のデフォルトは C-b なので、vim のバックスクロールにぶち当たりはしますが、こちらに「慣れ」を変更してもいいかもしれません。ちなみに ratpoison ではコマンドキーは C-t でした。

総評

ダサさは自分で改善できるので良いとして、全体的なメリットを考えても乗り換える理由には充分だと感じました。tscreen は、公式サイトも消えてしまっているようで、多分メンテナンスも行なわれていないと思います。代わって tmux は、今もっともナウい Screen 系ソフトらしいので、ユーザ数や開発頻度、これからの改善にも期待が持てます。

さっさと調教して慣れていきたいと思います。

オマケ

全く需要がないと思いますが、これまで使っていた tscreenrc を貼っておきます。

[perl] startup_message off autodetach on

backtick 0 5 5 sh /home/dyama/bin/stat

shelltitle “$ |shell”

caption always “%{= mW} %n %{-}%?%F%{= rW}%:%{= Gk}%? %t %=” defhstatus “%n:%t” hardstatus alwayslastline “%{= bW}%-w%{= Wk}%n:%t%{-}%+w%= $USER %0`(%m/%d %02c)”

msgwait 10

defscrollback 2000

bind r eval ‘echo “Resize Window”‘ ‘command -c resize’ bind -c resize ^] command bind -c resize j eval ‘resize +1’ ‘command -c resize’ bind -c resize k eval ‘resize -1’ ‘command -c resize’

defutf8 on encoding utf-8 utf-8 defencoding utf-8

cjkwidth on

defkanji utf-7

color

defbce “on”

do not use ‘screen-bce’

term rxvt-256color termcapinfo rxvt-256color ‘Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm:hs:ts=\E]0;:fs=\007:ds=\E]0;\007’

idle 1800 blankerprg /home/dyama/bin/worms2

↑たしか /usr/games/worms に上手く引数を渡せなかったので

シェルスクリプトを指定しています。

[/perl]

佐世保のシステムエンジニアです。詳しいプロフィールやこのブログについてはこちらをご覧ください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください