ターミナル エミュレーターの色に問題があります。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 で検索します。
明るい色を使用したい場合は、太字の代わりに、いわゆる 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-terminal の代わりにそれを使用するようにランチャーを構成する必要があります。
1私の推測ですが、太字に設定すると前景色に明るさが適用されることに注意してくださいそして太字の強調を追加します。したがって、太字を適用せずに明るい前景色を使用することはできません。おそらく、モノクロ端末が一般的だった頃は、強調のために単に太字を設定するだけでした。例:\\033[1mBlah blah\\033[0m
が一般的でした。実際、これは今でも機能しますが、前景色も明るくなります。これが背景も明るくするのが望ましくないと判断した場合 (太字にする必要があるだけなので)、実装でそうしないようにします。まあ、仕方ありません。
答え3
これは、一部のターミナル エミュレーターで使用できるトリックです。reverse-video 属性 (7) を使用して明るい前景色を選択し、それを背景色と入れ替えることで、明るい背景色が得られます。
echo -e "\e[1;32;7mText on a bright green background"
問題は、背景色は 16 色まで設定できるようになったものの、前景/テキストには 8 色という制限が適用されるようになったことです。さらに混乱を招くのは、リバース ビデオ属性がアクティブな間は、背景色の属性コードを使用してテキストの色を設定する必要があることです。
答え4
47=background white
の代わりに を使用すると40=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 まで実行します)
Acceptd A. の言及八色と基準の欠如。
31~36(赤からシアン)の 6 つの色は明確に定義されています。黒(30)と白(37)も同様ですが、特に背景(40 と 47)として、それらの太字のバリエーションは少なくなっています。
気付いたのですが、xterm では通常の白いテキストが灰色の背景に表示されますが、Linux コンソールでは表示されません。(最後の行、i=47) (30 分前までスクリプトは 46 で停止していました。判読できないバリエーションは避けたかったからです)
どちらの場所でも、マウスで選択すると巧みに適応し、反転しても読みやすくなります。