tmuxを使ってssh接続先ごとにターミナルの背景色を変更する

サーバへの設定の際、当たり前の話ではあるのだがsshで接続して色々と操作をする。 この際、"このターミナルは今操作中だよ"というのが視覚的にわかりやすいよう、ターミナルの背景色等を自動的に切り替えさせたい事がある。で、なんかいい方法ないかなーと調べてみたところ、tmuxを利用すればできそうだということがわかった。

tmuxでは、以下のようにコマンドを実行することで現在アクティブになっているpaneの背景色等を変える事ができる。

# fgで文字色、bgで背景色を指定する
tmux select-pane -P 'fg=colour0,bg=colour152'

# defaultで元の状態に戻る
tmux select-pane -P 'fg=default,bg=default'

tmuxを利用中のターミナルで上のコマンドを実効すると、以下のような配色に切り替わる。

つまり、(ローカルでtmuxを使用した状態でsshを実行する状況であれば)ssh接続前に上記のようなコマンドを実行することで、ssh接続時のみターミナルの背景色を変化させることができるようになる。指定できる色については、 こちら に出力コマンドを残してあるので、そちらを参照。

一応、これを実際に設定する例を2パターンほど残しておく。

1. 「.ssh/config」でLocalCommandで定義する

.ssh/configで、LocalCommand(ssh接続前にローカルで実行するコマンド)に定義することで対応する方法。 以下のように.ssh/configを作成する。

.ssh/config
Host ホスト名 User ユーザ名 HostName IPアドレスなど IdentityFile 鍵ファイル PermitLocalCommand yes LocalCommand tmux select-pane -P 'fg=colour0,bg=colour152'

また、ssh切断時にtrapで元の状態に戻す必要があるので、以下のような内容をbashrcやzshrcに記述しておく(zshにて確認)。

function cssh() {ssh $*;tmux select-pane -P 'fg=default,bg=default'}
alias ssh='cssh '

2. sshコマンドのラッパーを作成してエイリアス設定する

無難な方法として、tmuxの色変更とssh接続を内部で実行するラッパーコマンドを作っておき、それを利用する方法についても残しておく。 (だいぶやっつけだけど)以下の様なラッパースクリプトを作成し、aliasを設定してやる。

tmux-ssh.sh
#!/bin/bash tmux select-pane -P 'fg=colour0,bg=colour152' ssh $* trap "tmux select-pane -P 'fg=default,bg=default'" 0 1 2 3

あとは、sshのエイリアスとして上記スクリプトを指定してやればいい。

どちらのやり方にせよ、ちゃんと運用するならカテゴリごとに配色を変えられるようにするなど、ちゃんと設定するほうがいいと思う。 まぁ、とりあえずこういう方法で接続ごとにターミナルの色を変えられるよということで今回は終わり。