Linuxコンソール画面の背景色を設定するには?

Linuxコンソール画面の背景色を設定するには?

メモ:問題を明確にするために質問を再構成しました。質問には複数の属性があるため、さまざまな部分で回答できるマイナーな質問です。

残念ながら、質問者が回答の一部と質問の構造を理解(知っている)すると、質問が修正される可能性があります。

したがって、質問はオリジナルとは異なる観点から質問されます。

シェルユーティリティを使用してLinuxコンソールの色設定を変更するには? シェルユーティリティを使用してターミナルエミュレータの色設定を変更するには?

もともと、シェルスクリプトの実行中にLinuxコンソールの背景色を変更したかったのです。次の提案は私が望むように機能します。

#!/bin/sh

# set the background color of the terminal
tput setab 6
clear

printf "%s\n" 'background: cyan'

# do some tasks 
cd /usr/src/initramfs
pwd
ls -l

# the background of the shell output is cyan

それにもかかわらず、誰かがいくつかの欠陥(または困難)に直面する可能性があります。

たとえば、画面が消去されない場合、背景色はシェルスクリプトの実行中にテキスト出力にのみ適用されます。コマンドラインを使用してコマンドをtput setab 6送信し、画面が消去されない場合、背景色は出力テキストの小さな部分にのみ適用されます。コマンドラインからコマンドを送信しtput setab 6て画面が消去されると、背景色は画面全体に適用されますが、他のコマンドを送信するまでのみ適用されます。 [...]

背景色1個

答え1

Linux仮想端末(「コンソール」)から:

背景を色1(赤)に設定するには:

printf %b '\e[41m' '\e[8]' '\e[H\e[J'

最初のエスケープ(setab)は背景を色1に設定し、2番目のエスケープは現在の前景と背景のペアを次のように定義します。基本、3番目(clear)は画面を消去します。

これから「赤」が基本背景になります。

printf %b 'World\e[42mWide\e[mWeb\n'

setab 2()で背景を緑色に設定し、()で\e[42プロパティを消去しても設定は消えません。sgr0\e[m

あるいは、initc「set Palette」(aka = "initialize_color")エスケープを使用して、色0(デフォルトの背景、黒)の意味を上書きすることもできます。

printf %b '\e[40m' '\e[8]' # set default background to color 0 (black)
printf %b '\e]P0ff0000'    # redefine color 0 as 'red'

後者は色番号で、nRRGGBB色を定義する16進三重項形式の引数を取ります。nRRGGBB

このエスケープは以下でもサポートされています。パテ

これらおよびその他の機能については、console_codes(4)およびterminfo(5)のマンページを参照してください。

私もできません:

a) 画面のすべての内容を消去せずに画面の背景色を変更しますclear

b)仮想端末間を前後に切り替えるためにControl-Alt-Fnを使用せずに、画面上の非文字マージンを強制的に更新します。

xtermなどの端末エミュレータでは:

これにより、背景が薄緑色に設定されます。いいえ画面を消去する必要があります。

printf %b '\e]11;#ccffcc\a'

mltermなどにも適用されますrxvtgnome-terminalkonsole

他の形式\e]11;rgb:cc/ff/cc\a(からインポート)ここ)はサポートされていませんkonsole(バージョン12.16.0を使用してテスト済み)。

これはいいえtmuxまたはで働いてくださいscreen

すべてのxterm脱獄は文書化されています。ctlseqs.txtソースコードのファイル。

メモ:

一部のエスケープ(例:\e[8]または\e]11;...\a)はterminfoに含まれていないため、まったく使用できないが、tput他のエスケープ(例initc:)はきちんとした方法で使用するのが難しいです。

次のコマンドを使用して、terminfoデータベースのgrepableバージョンを取得できます。find /usr/share/terminfo -type f -printf '%f\n' | xargs -n1 infocmp -0 -A /usr/share/terminfo

関連情報