プラットフォーム、デスクトップ環境に依存しない方法で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ほとんどの端末で機能できますが、端末のリセット後も維持されません。その後、前景色を設定すると、ほとんどの端末で視覚効果を得ることができます。

関連情報