GNU screen で ssh したウィンドウタイトルに、ホスト名とかユーザ名とか入れる


スクリーンショット

GNU screen で ssh ログインしたウィンドウを複数開いてると、hardstatus に表示してるウィンドウタイトル一覧が

... 3 ssh  4 ssh  5 ssh  6 ssh  7 ssh  8 ssh  9 ssh ...

ってなって、ちょっとよくわかんないので、どうにかしてスクリーンショットみたいにした。

やり方

基本は、gist においたスクリプト screen_ssh.sh に書いてある。

ざっと説明すると

  1. screen_ssh.sh をダウンロード して好きな場所に配置
  2. ~/.ssh/config の先頭に、三行追加
~/.ssh/config
Host *
  PermitLocalCommand yes
  LocalCommand /path/to/screen_ssh.sh $PPID %n %r
... 以下もともとあった設定

/path/to/screen_ssh.sh は実際に screen_ssh.sh をおいた場所を書く。

ウィンドウタイトルの形式は、screen_ssh.sh の変数 TITLE を好きなように書き換えればいい。

補足

LocalCommand /path/to/screen_ssh.sh $PPID %n %r って書いた部分の、%n%h にすると、ssh で引数として書いたホスト名じゃなくて、逆引き?したもっと正確なホスト名になります。よくわかってないので man ssh_configLocalCommand 見てください。

困ってること

この方法は、screen ssh foobar って感じでウィンドウ生成しつつ ssh 接続する時に有効なんだけど、この状態で ssh foobar ってやると、シェルのウィンドウタイトル書き換えてしまうのに違和感を覚える。

とりあえず、zsh の precmd_funtion にウィンドウタイトル更新するやつ書いてなんとなく納得してる。

理想を言えば、screen_ssh.sh 内で、新たに生成された screen ウィンドウであることが分かればいいんだけどどうしたものか。

おわり

以上です。

そういえば LocalCommand の設定がかち合った時どうなるんだろう。