前々から、Linuxデスクトップで使えるターミナルエミュレーターでiTerm2のようにOSCエスケープのprintfからプロファイルを変更させる方法について調べていたのだけど、どうやら文字色・背景色であれば変更できるようだということがわかった。

OSCエスケープで文字色、背景色を変える場合、1011を使うといいらしい。 RGBを00-ffで指定してやればいいようだ。

echo -ne '\e]10;#000000\a' # 文字色を変更
echo -ne '\e]11;#ffffff\a' # 背景色を変更

以下は実行例のコマンド。 こんな感じで背景色、文字色を指定できる。

echo -ne '\e]10;#ffffff\a\e]11;#000000\a'文字色を白、背景色を黒に
echo -ne '\e]10;#ffffff\a\e]11;#300000\a'文字色を白、背景色を赤に
echo -ne '\e]10;#ffffff\a\e]11;#003000\a'文字色を白、背景色を緑に
echo -ne '\e]10;#ffffff\a\e]11;#000030\a'文字色を白、背景色を青に
echo -ne '\e]10;#000000\a\e]11;#ffffff\a'文字色を黒、背景色を白に

以下は、Ubuntu 18.04 LTSでのGnome Terminalでの実行例。 OSCエスケープをprintしているターミナルだけ背景色、文字色が変わっているのがわかる。

以下はTerminatorでの実行例。 ちゃんと背景色、文字色を変更できている。

これなら、ssh接続時に自動で背景色を変えたりといったことも簡単にできそうだ。