Ich habe ein Problem mit den Farben in meinem Terminalemulator. Ich verwende LXTerminal
als Terminalemulator und LXDE
als Desktop-Umgebung.
Der folgende Befehl soll roten Text auf grauem Hintergrund drucken:
printf "\n\033[1;31;40m"hello"\033[00m\n\n"
aber das geht nicht. Der graue Hintergrund fehlt (roter Text ist OK). Auf meiner älteren Maschine ( Gnome/Gnome Terminal
) funktioniert alles einwandfrei
Ich habe versucht, mehrere andere Terminalemulatoren zu installieren, aber das Problem besteht weiterhin. Ich bin mir nicht einmal sicher, ob dieses Problem mit dem Terminalemulator oder etwas anderem zusammenhängt. In der Konsole (STRG + ALT + F1) funktioniert die graue Hintergrundfarbe auf beiden Computern nicht.
Dieses Problem ist nur auf grauen Hintergrund beschränkt. Alle anderen Farben funktionieren einwandfrei. Im Folgenden wird beispielsweise roter Text auf grünem Hintergrund gedruckt.
printf "\n\033[1;31;42m"hello"\033[00m\n\n"
Ich würde mich über jede Hilfe freuen. Ich weiß nicht einmal, wo ich mit der Fehlerbehebung beginnen soll.
quelle
echo $TERM
druckt?$TERM
Lesen, um zu bestimmen, wie Escape-Sequenzen behandelt werden sollen?$TERM
wird durch (n) lesen Flüche / Slang /...- Programme , um festzustellen , welche Escape - Sequenzen zu senden .konsole
kann es überTERM=konsole-256color tput setab 8; echo foobar; tput setab 0
Antworten:
Es gibt acht Standard-ANSI-Farben, die von jedem Terminalemulator unterstützt werden. Die meisten Terminalemulatoren haben auch acht helle Varianten der Standard-ANSI-Farben.
Die tatsächlichen Farbwerte, denen die Escape-Codes zugeordnet sind, sind jedoch nicht standardisiert, und tatsächlich variieren sie häufig geringfügig zwischen den Terminalemulatoren. Wenn Sie also
printf "\e[31;47mTest\n"
roten Text auf weißem Hintergrund drucken, können die tatsächlichen Rot- und Weißtöne je nach verwendetem Terminalemulator unterschiedlich sein.Dies erklärt teilweise das Problem: Farbwerte sind nicht Standard und haben
LXTerminal
möglicherweise andere Standardeinstellungen für die Farbpalette, an die Sie nicht gewöhnt sind. Wenn Sie sich in den Einstellungen umschauen, können Sie das Farbschema normalerweise so konfigurieren, wie Sie möchten.Das andere Problem, mit dem Sie konfrontiert sind, ist, dass das, was das fettgedruckte Attribut tatsächlich tut, auch nicht standardisiert ist. Es gibt drei Möglichkeiten: Es kann die Schrift fett machen, es kann die Vordergrundfarbe heller machen oder es kann sowohl die Vordergrundfarbe heller machen als auch die Schrift fett machen.
Auch hier variiert das Standardverhalten zwischen den Terminalemulatoren, und Sie können es normalerweise ändern, wenn Sie die richtige Einstellung finden. Greifen Sie nach etwas, das "fett" oder "hell" erwähnt.
Wenn Sie eine helle Farbe verwenden möchten, können Sie anstelle von Fett die sogenannten aixterm-Farb-Escape-Codes verwenden. Diese sind nicht Standard, werden aber in jedem mir bekannten modernen Terminalemulator unterstützt. Im Gegensatz zu Fettdruck verwenden sie immer helle Farben und können zur Anzeige heller Hintergrundfarben verwendet werden.
Wenn Sie beispielsweise leuchtend roten Text auf hellweißem Hintergrund drucken möchten, gehen Sie folgendermaßen vor :
printf "\e[91;107mTest\n"
.Als Referenz finden Sie hier eine Tabelle aller Farb-Escape-Codes:
quelle
joe editor
. Ingnome-terminal
kann ich grauen Hintergrund sehen. DarinLXTerminal
fehlt.LXTerminal
und öffnegnome-terminal
, sieht die blaue Farbe ganz anders aus. Aber zurück zu meinem ursprünglichen Problem: Der graue Hintergrund inLXTerminal
hat nicht nur eine andere Farbe als ingnome-terminal
, sondern fehlt vollständig.LXTerminal
aber Graugnome-terminal
. Ich benutze es nichtLXTerminal
, aber ich wette, wenn Sie in den Einstellungen nachsehen und die 'schwarzen' Farben in 'grau' ändern, wird es sichtbar.LXTerminal
in etwas anderes als Schwarz ändere , kann ich sehen, dassprintf "\n\033[1;31;40m"hello"\033[00m\n\n"
Text auf schwarzem Hintergrund gedruckt wird. Was alsognome-terminal
als grauLXTerminal
interpretiert wird, wird als schwarz interpretiert. Gibt es eine Möglichkeit grau in angezeigt werdenLXTerminal
, gleich wie ingnome-terminal
?Das
1
Attribut am Anfang von1;31;40
aktiviert den "Fett" -Modus (auch bekannt als "Hell"), aber einige Terminals wenden dies nur auf die Vordergrundfarbe an. Ich habe keine Ahnung aus welchem Grund (und das Ändern der Variablen $ TERM macht keinen Unterschied), da sie 16 Farben im Vordergrund unterstützen. 1 0 (von40
: 4 = Hintergrund, 0 = Farbe) ist tatsächlich schwarz, aber "helles Schwarz" ist grau. Hier sind zwei Lösungen:Farbe 7 (weiß) wird sich wahrscheinlich als grau herausstellen, nicht als weiß (für echtes Weiß benötigen Sie "helles Weiß", was bedeutet, dass der Hintergrund, den Sie eigentlich nicht haben können, weiß ist).
Sie sollten in der Lage sein, das Gnome-Terminal in LXDE zu verwenden, wenn Sie möchten. Installieren Sie es einfach und beginnen Sie mit
gnome-terminal
(ich glaube, das ist der Befehlsname). Dann müssen Sie alle Starter konfigurieren, um diese anstelle des lx-Terminals zu verwenden.1 Hier ist meine Vermutung: Beachten Sie, dass die Einstellung Fett die Helligkeit der Vordergrundfarbe anwendet und eine Fettbetonung hinzufügt. Daher können Sie keine helle Vordergrundfarbe verwenden, ohne auch Fettdruck anzuwenden. Vermutlich damals, als monochrome Terminals üblich waren, einfach nur fett hervorgehoben, z. B.:
\\033[1mBlah blah\\033[0m
War üblich - und tatsächlich funktioniert dies immer noch, aber es macht auch Ihre Vordergrundfarbe hell. Wenn wir es für unerwünscht halten, dass dies auch den Hintergrund aufhellt (weil es nur fett sein soll), würden wir sicherstellen, dass die Implementierung dies nicht tut. Naja.quelle
gnome-terminal
und die Farben werden korrekt angezeigt. Bedeutet das, dass dieses Problem spezifisch istLXTerminal
? Gibt es eine Möglichkeit, dies zu beheben? Ich würde es vorziehenLXTerminal
, wenn dieses Problem gelöst werden könnte.gnome-terminal
vielleicht das einzige Terminal, das das tut, was Sie wollen. Ich bin seit ~ 15 Jahren ein Linux-Benutzer und habe aufgrund der Eingabeaufforderung frühzeitig etwas über ANSI-Sequenzen gelernt. es war schon immer so. Ich könnte in der Lage sein, entscheidend herauszufinden, warum, indem ich die offiziellen ANSI-Spezifikationen recherchiere und / oder durch die Quelle blättere, aber das würde einen sehr unbestimmten Zeitraum erfordern;) Ich habe nach dem Surfen im Internet nichts Hoffnungsvolles gefunden, also ist deins ein Gute Frage, aber jemand, der es bereits weiß, könnte am nächsten Tag oder so kommen ...Hier ist ein Trick, den Sie mit einigen Terminalemulatoren verwenden können. Sie erhalten helle Hintergrundfarben, indem Sie mit dem Umkehrvideoattribut (7) eine helle Vordergrundfarbe auswählen und diese dann mit der Hintergrundfarbe austauschen.
Der Haken ist, dass, obwohl Sie jetzt 16 Hintergrundfarben haben können, die Beschränkung von 8 Farben jetzt stattdessen für den Vordergrund / Text gilt. Und um die Sache noch weiter zu verwirren, müssen Sie die Textfarbe mithilfe der Attributcodes für Hintergrundfarben festlegen, während das Reverse-Video-Attribut aktiv ist!
quelle
echo -e "\e[1;33;40;7m TEST2 \e[0m"
Mit
47=background white
anstelle von erhalten40=background black
Sie das nicht fette Weiß als Hintergrund.Fettschwarz führt standardmäßig zu Dunkelgrau. Normales Weiß ist eigentlich grau, weil kräftiges Weiß weiß ist.
Diese Schleife druckt zwei Spalten mit allen Farb-auf-Schwarz- und Weiß-auf-Farbe-Kombinationen.
Es beginnt mit unsichtbarem Schwarz und Dunkelgrau auf Schwarz, aber die anderen 17 Linien sehen gut aus und zeigen die gesamte Farbpalette der Konsole.
(38 und 39 sollten weggelassen werden, aber der Einfachheit halber laufe ich nur von 30 auf 47)
Akzeptiert A. erwähnt acht Farben und fehlende Standards.
Die sechs Farben 31-36 (rot bis cyan) sind gut definiert. Schwarz (30) und Weiß (37) auch, aber ihre kühnen Varianten weniger, insbesondere als Hintergrund (40 und 47).
Ich merke nur: In xterm ist der normale weiße Text auf grauem Hintergrund sichtbar, in der Linux-Konsole jedoch nicht. (letzte Zeile mit i = 47) (bis vor 30 Minuten stoppte das Skript bei 46, weil ich keine unlesbaren Varianten wollte)
An beiden Stellen passt es sich bei Auswahl der Maus geschickt an und bleibt beim Umkehren lesbar.
quelle