printf コマンドを使用して urxvt-256 の tmux の背景画像を変更する

printf コマンドを使用して urxvt-256 の tmux の背景画像を変更する

tmux 内では printf コマンドを使用できません。

背景をその場で変更するコマンドは次のとおりです。

printf "\e]20;/home/alexsson/Downloads/alternativ.png;\a"

これを urxvt で直接実行できます。

ここに画像の説明を入力してください

画面内にも:

ここに画像の説明を入力してください

しかし、この printf コマンドは tmux では動作しません。

ここに画像の説明を入力してください

tmux でこれを動作させる方法をご存知ですか?

追記: ここにも同様の質問があります:tmux と制御シーケンス文字の問題ただし、正しい検索用語を使用しないと、その質問を見つけるのは困難です。私の投稿は、どの検索用語を使用すればよいかわからないが、より一般的な検索用語 (背景を変更するだけなど) を知っている多くのユーザーにとって興味深いものになると思います。また、これについてはドキュメントにあまり書かれていません。

答え1

urxvttmuxおよび はscreen3 つの異なる端末エミュレーターであり、最初のものは表示/入力のバックエンドとして X11 を使用し、他の 2 つはホスト端末を使用します。

tmuxこれらはscreen実際には端末エミュレータであり、いくつかのエスケープシーケンスを介してアクティブ化されるいくつかの機能(太字の文字属性、画面のクリアなど)を実装していますが、背景画像サポートされている機能には含まれていません。

また、screen/tmuxセッションは、あらゆるタイプのホスト端末に接続でき、一度に複数の端末に接続することもできます ( を使用-x)。一部の端末はこの機能をサポートしている場合もあれば、サポートしていない場合もあります。

screenは、認識できないエスケープ シーケンスを渡しますtmux。OSC ( ) で始まるシーケンスは、\e]BEL ( \a/ ^G) で終わります。tmuxが を見つけると\e]、 (または次のエスケープ シーケンス) まで読み取り\a、そのシーケンスを認識しない場合は破棄します。

しかし、tmux 任意のテキストをそのままホスト端末に渡すことをサポートします。シーケンスを使用します\ePtmux;\e<text>\e\。ここでは次のようにします。

printf '\ePtmux;\e\e]20;/home/alexsson/Downloads/alternativ.png;\a\e\\'

いずれにせよ、これは の非常に危険な機能であることに注意してくださいrxvt。たとえば、rxvtLinux で root として実行し、cat malicious-file次のような内容を含むファイルを実行すると\e]20;/dev/watchdog\a(ウォッチドッグが利用可能なシステムの場合)、数秒後にシステムが再起動します。

関連情報