GNU screen ユーザから見た tmux の良いところ

screen(だけ)の時代は終わり。tmuxでリモートコンソールを便利に使うTips - アシアルブログ によると GNU screen の時代は終わってしまったようです。しかしブックマークコメントあたりでも指摘されているように、この記事で挙げられている大体のことは screen でも実現可能なので乗り換える理由としては微妙です。開発版の screen であれば縦分割やマウス操作もできます。開発版 screen については これからの「GNU Screen」の話をしよう - Keep It Simple, Stupid を参考にすると良いでしょう。
かといって、GNU screen だけ使いつづけていると老害の誹りを受けかねないので、ちょっとだけ tmux 入門して気にいったところを紹介していきます (つづく?)

show-environment

X11 forwarding や SSH agent forwarding をしてログインした際に screen のセッションにアタッチすると、DISPLAY や SSH_AUTH_SOCK といった環境変数が引き継がれずに困ることがあります。私の場合、screen を使う際に環境変数を書き出すスクリプトを用意して必要に応じて読み込んでいましたが、tmux だと show-environment / update-environment という機能があることを知りました。

tmux は、tmux サーバが起動されたときの環境変数をグローバル環境変数に格納するのに加えて、セッション毎にもセッション環境変数を管理しています。新しいウインドウを作る(C-b c)際には、これらの環境がマージされたものが環境変数として子プロセスに渡されます。セッション環境変数を確認するには tmux show-environment を使います。

$ tmux show-environment
DISPLAY=:0.0
SSH_AGENT_PID=6527
-SSH_ASKPASS
SSH_AUTH_SOCK=/tmp/keyring-TohlaR/ssh
-SSH_CONNECTION
WINDOWID=81788933
XAUTHORITY=/var/run/gdm3/auth-for-hogefuga-Rp6XuK/database

セッション環境変数として保存する環境変数は update-environment オプションで指定することができます。デフォルトでは DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY が保存されます。

セッション環境変数はセッション毎に管理されるので、例えば複数のマシンから同時に ssh -X して tmux にアタッチしている場合にも tmux show-environment は、それぞれのマシンの DISPLAY の値を出力してくれます。tmux の中にいるかどうかは TMUX_PANE 環境変数の有無などで確認できるので、zsh の precmd などで tmux show-environment から環境変数へ反映させるようにしておくと良いでしょう。

ペーストバッファがスタック

けつろん

けっきょく慣れ親しんだ screen しか使ってません。自分の環境で安定してる方を使えば良いんじゃないでしょうか。他に tmux のこんなところが便利というのがあったら教えてください。

僕のあとで読むをおまえが読め

screen / tmux 使いはここらへん見ると幸せになれるかもしれません。