端末の背景色に明るさを適用できません

端末の背景色に明るさを適用できません

端末エミュレータの色に問題があります。私はそれをLXTerminalターミナルエミュレータとLXDEデスクトップ環境として使用します。

次のコマンドは、灰色の背景に赤いテキストを印刷する必要があります。

printf "\n\033[1;31;40m"hello"\033[00m\n\n"

しかし、これはうまくいきません。灰色の背景がありません(赤いテキストも機能します)。私の古いコンピュータ(Gnome/Gnome Terminal)では、すべてがうまくいきました。

他の複数の端末エミュレータをインストールしてみましたが、問題は解決しません。この問題がターミナルエミュレータに関連しているのか、それとも何なのかよくわかりません。コンソール(CTRL + ALT + F1)では、背景グレーは両方のシステムで機能しません。

この問題は灰色の背景に制限されます。他のすべての色はうまく機能します。たとえば、次は緑色の背景に赤いテキストを印刷します。

printf "\n\033[1;31;42m"hello"\033[00m\n\n"

助けてくれてありがとう。トラブルシューティングをどこから始めるべきかさえわかりません。

答え1

各端末エミュレータは8つの標準ANSI色をサポートしています。ほとんどの端末エミュレータには、標準のANSI色の8つの明るいバリエーションもあります。

しかし、エスケープコードがマッピングされる実際の色値は標準化されておらず、実際には端末エミュレータごとにわずかに異なる場合が多い。したがって、printf "\e[31;47mTest\n"白い背景に赤いテキストを印刷する場合、実際に表示される赤と白のトーンは、使用する端末エミュレータによって異なります。

したがって、これは問題を部分的に説明します。色の値が標準ではなく、LXTerminal慣れていない他の基本パレットがあるかもしれません。設定を見ると、通常は好きな色でカラースキームを構成できます。

直面するもう1つの問題は、太い属性が実際に実行する作業も標準化されていないことです。 3つの可能性があります。フォントを太字にしたり、前景色を明るくしたり、前景色を明るくしたり、フォントを太字にしたりできます。

ここでも、デフォルトの動作は端末エミュレータによって異なり、通常は正しい設定が見つかったら変更できます。 Grepは「bold」または「bright」への言及を探します。

明るい色を使用するには、太字の代わりにいわゆるaixtermカラーエスケープコードを使用できます。これは標準ではありませんが、私が知っているすべての最新の端末エミュレータはそれをサポートしています。太字のフォントとは異なり、常に明るい色を使用し、明るい背景色を表示するために使用できます。

たとえば、明るい白地に明るい赤いテキストを印刷するには、次のようにしますprintf "\e[91;107mTest\n"

ちなみに、以下はすべてのカラーエスケープコード表です。

|    ANSI |    ANSI |    ANSI    |                | Aixterm | Aixterm 
|   Color | FG Code | BG Code    | Bright Color   | FG Code | BG Code 
+---------+---------+--------    +----------------+---------+-------- 
|   Black |      30 |      40    |   Bright Black |      90 |     100 
|     Red |      31 |      41    |     Bright Red |      91 |     101 
|   Green |      32 |      42    |   Bright Green |      92 |     102 
|  Yellow |      33 |      43    |  Bright Yellow |      93 |     103 
|    Blue |      34 |      44    |    Bright Blue |      94 |     104 
| Magenta |      35 |      45    | Bright Magenta |      95 |     105 
|    Cyan |      36 |      46    |    Bright Cyan |      96 |     106 
|   White |      37 |      47    |   Bright White |      97 |     107 

答え2

1最初のプロパティは1;31;40「太字」(別名「明るく」)モードを設定しますが、一部の端末では前景色にのみ適用されます。前景は16色をサポートしているので、何が理由なのかわかりません($TERM変数を変更しても違いはありません)。1 0(ソース40:4 =背景、0 =色)は実際には黒ですが、「光沢のある黒」は灰色です。これには2つの解決策があります。

  • 色7(白)は白ではなく灰色で表示されることがあります(真の白の場合は「明るい白」が必要です。つまり、実際には白い背景を持つことができないことを意味します)。

  • 必要に応じて、LXDEでgnome端末を使用できる必要があります。ただインストールして起動しますgnome-terminal(コマンド名だと思います)。次に、lx ターミナルの代わりにそれを使用するようにランチャーを構成する必要があります。

1私の推測は次のとおりです。太字に設定すると、前景色に明るさが適用されます。そして太い強調が追加されました。したがって、太字を適用しないと、明るい前景色は使用できません。モノクロ端末が一般的だった頃は、次のようなことを強調するために、単に太字で設定するのが一般的でした。\\033[1mBlah blah\\033[0m- 実際、これはまだ機能しますが、前景色をより明るくします。背景を明るくすることも望ましくないと思ったら(太字で表示する必要があるため)、実装ではそうしないようにします。ああ、まあ。

答え3

これは、一部の端末エミュレータで使用できるトリックです。ビデオ反転プロパティ(7)を使用して明るい前景色を選択し、背景色と置き換えると明るい背景色が表示されます。

echo -e "\e[1;32;7mText on a bright green background"

問題は16の背景色を使用できるようになりましたが、8つの色の制限が前景/テキストに適用されることです。問題をさらに混乱させるには、ビデオ反転プロパティが有効になっている場合は、背景色のプロパティコードを使用してテキストの色を設定する必要があります。

答え4

代わりに、背景は太字の白で表示されます47=background white40=background black

]# printf "\033[0;30;47m"hello"\033[00m\n"
hello (black on grey)
]# printf "\033[1;30;47m"hello"\033[00m\n"
hello (darkgrey on grey)
]# printf "\033[1;37;47m"hello"\033[00m\n"
hello (white on grey)
]# printf "\033[0;37;47m"hello"\033[00m\n"
hello (INVISIBLE grey on grey)

デフォルトでは、太い黒は暗い灰色を生成します。太い白が白なので、普通の白は実際には灰色です。


このループは、黒のすべての色と白の色の組み合わせを含む2つの列を印刷します。

for ((i=30; i<=47; i++))
do
    echo -en  "\e[${i}mHello\e[0m";
    echo -e "\e[1;${i}mHello\e[0m";
done

目に見えない黒と黒の背景に濃い灰色で始まりますが、残りの17行も大丈夫に見え、コンソール全体のカラーパレットを示しています。

(38と39は無視する必要がありますが、単純化のために30から47のみを使用します)


A. 言及を受け入れる色と標準の欠如。

6つの色31-36(赤からターコイズまで)が明確に定義されています。黒(30)と白(37)もありますが、特に背景(40と47)でボールドした変形が少ないです。


私は気づきました:xtermでは、一般的な白いテキストが灰色の背景に表示されますが、Linuxコンソールには表示されません。 (最後の行、i = 47)(30分前までは読めないバリエーションが欲しくなかったため、スクリプトは46で停止しました)

両方の位置をマウスで選択すると、きれいに調整され、反転しても読みやすい状態に保たれます。

関連情報