Ändern der Farbe von Text und Hintergrund des Terminals?

73

Ich kann die Farbe nach Belieben ändern, aber wie kann ich die Hintergrundfarbe und die Textfarbe des Terminals über die Befehlszeile ändern?

TechJhola
quelle
permanent oder nebenbei?
Jacob Vlijm
Sie können auch verwenden dconf. Ich habe bereits eine Antwort auf eine ähnliche Frage geschrieben: askubuntu.com/a/628129/295286
Sergiy Kolodyazhnyy
\033[00;34mFOO\033[00m
Rafael Barros

Antworten:

50

Bei bestimmten XTerm / ANSI-kompatiblen Terminals (z. B. xtermund gnome-terminal) können Sie Farben mit einer Palette festlegen, die größer ist als die Standardpalette mit 8/16 Farben (z. B. 88 Farben, 256 Farben oder 16777216 Farben (RGB)) beide xtermund gnome-terminalunterstützen sowohl die 256-Farben- als auch die 16777216-Farben-Palette (RGB); Beachten Sie, dass die Shell dies möglicherweise außer Kraft setzt (dies ist z zsh. B. der Fall für ).

Hier ist ein Skript zum Auflisten der Farben in der 256-Farben-Palette zusammen mit ihrem ANSI-Farbcode in XTerm / ANSI-kompatiblen Terminals mit Unterstützung für 256-Farben-Paletten:

#!/bin/bash
for((i=16; i<256; i++)); do
    printf "\e[48;5;${i}m%03d" $i;
    printf '\e[0m';
    [ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done

screenshot1

Bildschirmfoto

Verwenden Sie je nachdem, ob Sie die Farbe auf den Vordergrund oder auf den Hintergrund anwenden möchten, den <fg_bg>Wert 38oder 48(bzw.) im folgenden Befehl:

printf '\e[<fg_bg>;5;<ANSI_color_code>m'

So setzen Sie beispielsweise die Vordergrundfarbe ( <fg_bg>= 38) auf Rot ( <ANSI_color_code>= 196) und die Hintergrundfarbe ( <fg_bg>= 48) auf Schwarz ( <ANSI_color_code>= 0):

printf '\e[38;5;196m Foreground color: red\n'
printf '\e[48;5;0m Background color: black\n'

screenshot3

Es ist notwendig, die Eingabeaufforderung mit neu zu zeichnen printf '\e[K', damit die Hintergrundfarbe auf die gesamte Zeile angewendet wird und damit die Vordergrundfarbe auf den Cursor angewendet wird:

screenshot4

Dasselbe kann mit RGB-Werten anstelle von ANSI-Farbcodes in einem kompatiblen Terminal erreicht werden. Verwenden Sie je nachdem, ob Sie die Farbe auf den Vordergrund oder auf den Hintergrund anwenden möchten, den <fg_bg>Wert 38oder 48(bzw.) im folgenden Befehl:

printf '\e[<fg_bg>;2;<R>;<G>;<B>m'

So setzen Sie beispielsweise die Vordergrundfarbe ( <fg_bg>= 38) auf Rot ( <R>= 255, <G>= 0, <B>= 0) und die Hintergrundfarbe ( <fg_bg>= 48) auf Schwarz ( <R>= 0, <G>= 0, <B>= 0):

printf '\e[38;2;255;0;0m Foreground color: red\n'
printf '\e[48;2;0;0;0m Background color: black\n'

screenshot5

Auch hier ist es notwendig, die Eingabeaufforderung mit neu zu zeichnen printf '\e[K', damit die Hintergrundfarbe auf die gesamte Linie angewendet wird und damit die Vordergrundfarbe auf den Cursor angewendet wird:

screenshot6

Mit beiden Methoden können Sie printf '\e[0m'alle Attribute zurücksetzen:

screenshot7

kos
quelle
1
Beide xtermund gnome-terminalerkennen die True-Color-Escape-Sequenzen \ e [38/48; 2; R; G; Bm; jedoch xtermrundet die tatsächliche Farbe zum nächsten in seiner 256-Farbpalette. gnome-terminalzeigt die genaue wahre Farbe an, die in der Escape-Sequenz angegeben ist.
Egmont
2
\ e [K ist gefährlich; In einigen Emulatoren (z. B. xterm) wird der letzte Buchstabe entfernt, wenn sich der Cursor am rechten Rand befindet (visuell in der äußersten rechten Spalte angezeigt, aber logischerweise bereits darüber hinaus, da ein Zeichen bereits in der äußersten rechten Spalte gedruckt wurde). Siehe zB bugzilla.gnome.org/show_bug.cgi?id=740789 oder savannah.gnu.org/bugs/?36831 .
Egmont
Ich korrigiere mich selbst: Wenn Sie \ e [K am Anfang der Zeile (am Anfang der Eingabeaufforderung und nicht am Ende der Zeile) ausgeben, ist dies natürlich sicher. (Funktioniert jedoch nicht mit mehrzeiligen Eingabeaufforderungen oder Befehlen.)
egmont
@egmont Vielen Dank für die nützlichen Informationen, ich sehe, dass auf GNOME Bugzilla, das als behoben markiert ist, dies der Fall ist? Ich kann dies in diesem Moment nicht testen, daher werde ich das später tun, um zu überprüfen, ob dies immer noch der Fall ist (es sei denn, Sie antworten zuerst) und diese Informationen in die Antwort aufzunehmen.
Kos
Die neuesten Versionen von gnome-terminal entfernen dieses Zeichen nicht. Ob dies das richtige Verhalten ist, ist fraglich. Schließlich emulieren grafische Terminalemulatoren einige alte Geräte. Sollten wir ihre schlechten Entwurfsentscheidungen nachahmen (wie dies xterm hier tut), oder sollten wir sie außer Kraft setzen (wie wir es im Gnome-Terminal tun)? Es ist eine schwierige Frage ohne eine einzige richtige Antwort.
Egmont
33

Informationen wie auf dieser Seite zu finden , ohne Vorschauspalte:

Sequenzen bestehen aus dem Escape-Zeichen (oft durch " ^[" oder " <Esc>" dargestellt), gefolgt von einigen anderen Zeichen: " ^[FCm" (wobei FCeine der Zahlen in der Aufzählungsliste unten steht).

In bashkann der EscCode einen der folgenden Werte haben:

  1. \e
  2. \033 (oktal)
  3. \x1B (hexadezimal)

Hinweis 1: Die \e[0mSequenz " " entfernt alle Attribute (Formatierungen und Farben). Es kann eine gute Idee sein, es am Ende jedes farbigen Textes einzufügen.

Hinweis 2: Vorder- und Hintergrundfarben können je nach Konfiguration des Terminals variieren und nicht alle Farben werden unterstützt .

Set / Reset

  • 0: Alle Modifikator-, Vordergrund- und Hintergrundattribute zurücksetzen / entfernen: echo -e "\e[0mNormal Text"
  • 1: Fett / Hell: echo -e "Normal \e[1mBold"
  • 2: Dim: echo -e "Normal \e[2mDim"
  • 4: Unterstrichen: echo -e "Normal \e[4mUnderlined"
  • 5: Blinken (funktioniert in den meisten Terminals außer XTerm nicht): echo -e "Normal \e[5mBlink"
  • 7: Umkehren / Umkehren: echo -e "Normal \e[7minverted"
  • 8: Versteckt (nützlich für vertrauliche Informationen): echo -e "Normal \e[8mHidden Input"
  • 21: Zurücksetzen / Entfernen fett / hell: echo -e "Normal \e[1mBold \e[21mNormal"
  • 22: Dimm zurücksetzen / entfernen: echo -e "Normal \e[2mDim \e[22mNormal"
  • 24: Unterstreichung zurücksetzen / entfernen: echo -e "Normal \e[4mUnderlined \e[24mNormal"
  • 25: Blinken zurücksetzen / entfernen: echo -e "Normal \e[5mBlink \e[25mNormal"
  • 27: Zurücksetzen / Entfernen umkehren / invertieren: echo -e "Normal \e[7minverted \e[27mNormal"
  • 28: Ausgeblendete zurücksetzen / entfernen: echo -e "Normal \e[8mHidden \e[28mNormal"

Vordergrund

  • 39: Standard (normalerweise grün, weiß oder hellgrau): echo -e "Default \e[39mDefault"
  • 30: Schwarz: echo -e "Default \e[30mBlack"(am besten mit einer Hintergrundfarbe kombiniert: echo -e "Default \e[30;107mBlack on white")
  • 31: Rot (nicht mit grünem Hintergrund verwenden)
  • 32: Grün
  • 33: Gelb
  • 34: Blau
  • 35: Magenta / Lila
  • 36: Cyan
  • 37: Hellgrau
  • 90: Dunkelgrau
  • 91: Hellrot
  • 92: Hellgrün
  • 93: Hellgelb
  • 94: Hellblau
  • 95: Helles Magenta / Pink
  • 96: Helles Cyan
  • 97: Weiß

Hintergrund

  • 49: Standardhintergrundfarbe (normalerweise schwarz oder blau)
  • 40: Schwarz
  • 41: Rot
  • 42: Grün
  • 43: Gelb
  • 44: Blau
  • 45: Magenta / Lila
  • 46: Cyan
  • 47: Hellgrau (nicht mit weißem Vordergrund verwenden)
  • 100: Dunkelgrau (nicht mit schwarzem Vordergrund verwenden)
  • 101: Hellrot
  • 102: Hellgrün (nicht mit weißem Vordergrund verwenden)
  • 103: Hellgelb (nicht mit weißem Vordergrund verwenden)
  • 104: Hellblau (nicht mit hellgelbem Vordergrund verwenden)
  • 105: Light Magenta / Pink (nicht mit hellem Vordergrund verwenden)
  • 106: Helles Cyan (nicht mit weißem Vordergrund verwenden)
  • 107: Weiß (nicht mit hellem Vordergrund verwenden)

Verwenden Sie das Formular, um sowohl die Vordergrund- als auch die Hintergrundfarbe gleichzeitig festzulegen echo -e "\e[S;FG;BGm". Zum Beispiel: echo -e "\e[1;97;41m"(fetter weißer Vordergrund auf rotem Hintergrund)

Informationen zu 256 Farboptionen finden Sie auf der Quellseite.

Agi Hammerthief
quelle
30

Ändern Sie die Farben gelegentlich

Wenn es beabsichtigt ist, die Farben gelegentlich zu ändern :

Sie können den Befehl setterm verwenden :

setterm -term linux -back <background_colour> -fore <text_color> -clear

Aus den Farben können Sie wählen (sowohl Vorder- als auch Hintergrund):

black|blue|green|cyan|red|magenta|yellow|white|default

Für weitere Optionen:

setterm -help

Ändern Sie die Einstellungen Ihres Profils (Farbe)

In 14.04 habe ich keine Option dconfzum Einstellen der Farben oder des Terminals gefunden. Sie können jedoch verwendengconftool

  • Sie müssen zuerst Ihren Profilnamen erhalten:

    gconftool-2 --get /apps/gnome-terminal/global/profile_list
    
  • So legen Sie die Textfarben Ihres Profils fest:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/foreground_color" --type string "#FFFFFF"
    

    Zum Beispiel, um die Textfarbe auf Weiß zu setzen

    Das selbe mit Hintergrundfarbe:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string "#000000"
    

    Zum Beispiel, um die Hintergrundfarbe auf Schwarz zu setzen

ALternativ können Sie zum Festlegen des Namens der Farbe (n) einfach whiteoder greenaus derselben Palette wie der Befehl setterm verwenden, z.

gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string black
Jacob Vlijm
quelle
1
Dies sollten doppelte Bindestriche im anfänglichen setterm-Befehl sein.
user1770201
Arbeitete am 14.04, aber nicht am 16.04 (Beta; nicht sicher, ob das der Grund ist) dconf write /org/gnome/terminal/legacy/profiles:/:<profile_id>/background-color "'rgb(0,0,0)'".
Janaka Bandara
Ich arbeite nicht an Ubuntu 1704, es sieht schlecht aus
Wax Cage
1
gconftool-2(für Ubuntu 14.04 und vielleicht ein paar folgenden Versionen) oder dconfoder gsettingsauf neuere Versionen von Ubuntu ändern gnome-terminal Einstellungen und nimmt ab sofort auf alle die Tabs und Fenstern des gleichen Profils. Ich glaube nicht, dass OP nach diesem Verhalten gesucht hat.
Montag,
5

Mit den verschiedenen Farbcodes, die für die Farbausgabe verwendet werden, können auch farbige Hintergründe erstellt werden :

40  black
41  red
42  green
43  yellow
44  blue
45  magenta
46  cyan
47  white

Der folgende Befehl färbt meinen Hintergrund daher rot:

$ echo -e '\e[0;41m'

Abhängig von der Shell, dem Terminalemulator usw. benötigen Sie möglicherweise nicht die -e.

muru
quelle
3

Siehe die Antwort von kos zum Umschalten des Vordergrunds oder Hintergrunds auf eine bestimmte Farbe der Palette oder sogar eine direkte RGB-Farbe in einigen Terminals. Der Effekt einer solchen Sequenz bleibt so lange bestehen, bis eine andere Farbe ausgewählt wird (oder die Standardfarbe wiederhergestellt wird).

Ein weiterer Ansatz, die von einigen Terminal - Emulatoren unterstützt wird , ist zu neu definiert die genauen RGB - Werte der Terminals Standard Vorder- und Hintergrundfarben unter Verwendung der 10 OSC / 11 Escape - Sequenzen:

echo -ne '\e]10;#123456\e\\'  # set default foreground to #123456
echo -ne '\e]11;#abcdef\e\\'  # set default background to #abcdef

Dies wird wahrscheinlich viel länger dauern (bis es von einem anderen OSC 10/11 überschrieben oder über OSC 110/11 zurückgesetzt wird), aber im Gegensatz zum dconf-Ansatz wirkt sich dies immer noch nur auf das aktuelle Terminal aus.

egmont
quelle