プラットフォーム、デスクトップ環境に依存しない方法で、bash スクリプトからターミナルの背景を変更しますか?

プラットフォーム、デスクトップ環境に依存しない方法で、bash スクリプトからターミナルの背景を変更しますか?

ターミナル プロトコルのみを利用し、特定のターミナル プログラムまたはそれが実行されている環境に保存されている構成 (「プロファイル」など) に依存せずに、ターミナルの背景色を変更するにはどうすればよいでしょうか。

ターミナルを使用してマシンにログインし、スクリプトを実行するユーザーに対して、ターミナルの背景色を確実に変更するスクリプトを作成できるようにしたいと考えています。

「これは不可能です」という簡潔で権威ある回答は、解決策として歓迎されます。ただし、そのような回答は、端末プロトコルを徹底的に理解し、そのような機能が存在しないことを証明できる専門家からの回答のみ受け入れられます。

答え1

これは不可能です。私は端末プロトコルを熟知している専門家ではありませんが、背景色を変更する方法がない端末が存在することは知っています。たとえば、次のようなダム端末がこれに該当します。期待するまたは、M-x shellEmacs では です。これはほとんどのハードウェア端末にも当てはまりますが、最近ではそれらを使用する人はほとんどいません。

ほとんどのターミナルエミュレータには背景色を変更する方法があります。ターミナルエミュレータは、アプリケーションとターミナル間のインターフェイスとして xterm をコピーすることが多いため、このような機能が必要な場合は xterm の方法を試してください。一部のターミナルエミュレータでは動作しますが、すべてのターミナルエミュレータでは動作しません。xterm 制御シーケンスそして、どれがあなたの希望に合っているか確認してください。

端末全体の背景色を変更するには、OSC 11; color BELつまり

printf '\e]11;%s\a' "$color"

これは、xterm、urxvt、gnome-terminal、konsole、lxterm では機能しますが、rxvt、xfce4-terminal、terminator、Emacs では機能しません。背景色の変更は、ターミナルをリセットしても保持されます。を にM-x term置き換えることで、前景色を変更することもできます。11;10;

もちろん、これはデフォルトの背景色です。このエスケープ シーケンスをサポートする端末、および何らかの方法で色をサポートする他のほとんどの端末では、\e[41m(赤の場合) を使用して、後続に表示されるテキストの背景色を切り替えることができます。

エスケープ シーケンスが端末でサポートされていない場合は、それを見つける方法はありません。端末を照会し、同じ端末セットでサポートされているエスケープ シーケンスを見つけることはできますが、通常、そのようなシーケンスはありません。

反転ビデオへの切り替えは、\e[?5hおそらくほとんどの端末で機能しますが、端末をリセットすると無効になります。これを実行してから前景色を設定すると、ほとんどの端末で視覚効果が得られます。

関連情報