Changer la couleur du texte et l'arrière-plan du terminal?

74

Je peux modifier la couleur par préférence, mais comment puis-je modifier la couleur d'arrière-plan et la couleur du texte du terminal via la ligne de commande?

TechJhola
la source
en permanence ou accessoirement?
Jacob Vlijm
Vous pouvez également utiliser dconf. J'ai déjà écrit une réponse à une question similaire auparavant: askubuntu.com/a/628129/295286
Sergiy Kolodyazhnyy
\033[00;34mFOO\033[00m
Rafael Barros

Réponses:

50

Sur certains terminaux compatibles XTerm / ANSI (tels que xtermet gnome-terminal), vous pouvez définir des couleurs à l'aide d'une palette plus grande que la palette 8/16 couleurs par défaut (par exemple, une palette de 88 couleurs, 256 couleurs ou 16777216 couleurs). ; xtermet gnome-terminalsupporte à la fois la palette 256 couleurs et la palette 16777216-couleurs (RGB)); gardez à l’esprit que le shell pourrait remplacer cela (c’est le cas par exemple pour zsh).

Voici un script pour répertorier les couleurs de la palette à 256 couleurs ainsi que leur code de couleur ANSI dans des terminaux compatibles XTerm / ANSI et prenant en charge une palette de 256 couleurs:

#!/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

capture d'écran1

capture d'écran

Selon que vous souhaitez appliquer la couleur au premier plan ou à l'arrière-plan, utilisez une <fg_bg>valeur égale à 38ou 48(respectivement) dans la commande suivante:

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

Par exemple, pour définir la couleur d’avant-plan ( <fg_bg>= 38) sur rouge ( <ANSI_color_code>= 196) et la couleur d’arrière-plan ( <fg_bg>= 48) sur noire ( <ANSI_color_code>= 0):

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

capture d'écran3

Il est nécessaire de redessiner l'invite en utilisant printf '\e[K'pour que la couleur d'arrière-plan s'applique à toute la ligne et pour que la couleur de premier plan s'applique au curseur:

capture d'écran4

La même chose peut être accomplie en utilisant des valeurs RVB au lieu des codes de couleur ANSI dans un terminal compatible; Selon que vous souhaitez appliquer la couleur au premier plan ou à l'arrière-plan, utilisez une <fg_bg>valeur égale à 38ou 48(respectivement) dans la commande suivante:

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

Par exemple, pour définir la couleur de premier plan ( <fg_bg>= 38) sur rouge ( <R>= 255, <G>= 0, <B>= 0) et la couleur d'arrière-plan ( <fg_bg>= 48) sur noir ( <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'

capture d'écran5

De nouveau, il est nécessaire de redessiner l’invite en utilisant printf '\e[K'pour que la couleur d’arrière-plan s’applique à l’ensemble de la ligne et pour que la couleur d’avant-plan s’applique au curseur:

capture d'écran6

En utilisant l’une ou l’autre des méthodes, vous pouvez utiliser printf '\e[0m'pour réinitialiser tous les attributs:

capture d'écran7

kos
la source
1
Les deux xtermet gnome-terminalreconnaissent les \ e [38/48; 2; R; G; Bm séquences d'échappement de couleur vraie; cependant, xtermarrondit la couleur réelle au plus proche dans sa palette de 256 couleurs. gnome-terminalaffiche la couleur exacte exacte donnée dans la séquence d'échappement.
egmont
2
\ e [K est dangereux; dans certains émulateurs (par exemple xterm), si le curseur se trouve tout à fait à droite (affiché visuellement dans la colonne la plus à droite, mais logiquement déjà au-delà, puisqu'un caractère a déjà été imprimé dans la colonne la plus à droite), cette dernière lettre est effacée. Voir par exemple bugzilla.gnome.org/show_bug.cgi?id=740789 ou savannah.gnu.org/bugs/?36831 .
egmont
Je me corrige: si vous émettez \ e [K au début de la ligne (au début de l’invite, plutôt qu’à la fin de celle-ci), il est évident que c’est sûr. (Ne fonctionnera pas avec l'invite ou la commande multiligne si.)
egmont
@egmont Merci pour les informations utiles, je vois que sur GNOME Bugzilla est marqué comme étant corrigé, est-ce le cas? Je ne peux pas tester cela en ce moment, donc je le ferai plus tard pour vérifier si c'est toujours le cas (à moins que vous ne répondiez en premier) et inclure cette information dans la réponse.
kos
Les dernières versions de gnome-terminal ne suppriment pas ce personnage. Que ce soit le bon comportement est discutable. Après tout, les émulateurs de terminaux graphiques émulent certains appareils anciens. Devons-nous imiter leurs mauvaises décisions de conception (comme xterm ici), ou devrions-nous remplacer (comme nous le faisons dans gnome-terminal)? C'est une question difficile sans une seule bonne réponse.
egmont
34

Informations figurant sur cette page , à l'exclusion de la colonne de prévisualisation:

Les séquences sont composées du caractère d'échappement (souvent représenté par ” ^[” ou ” <Esc>”) suivi de quelques autres caractères: ” ^[FCm” (où FCest l'un des numéros de la liste à puces ci-dessous).

Dans bash, le Esccode peut être l'un des suivants:

  1. \e
  2. \033 (octal)
  3. \x1B (hexadécimal)

Remarque 1: La \e[0mséquence " " supprime tous les attributs (mise en forme et couleurs). Il peut être judicieux de l’ajouter à la fin de chaque texte coloré.

Remarque 2: les couleurs de premier plan et d'arrière-plan peuvent varier en fonction de la configuration du terminal. Toutes les couleurs ne sont pas prises en charge .

Définir / Réinitialiser

  • 0: Réinitialiser / supprimer tous les attributs modificateur, avant-plan et arrière-plan: echo -e "\e[0mNormal Text"
  • 1: Audacieux / brillant: echo -e "Normal \e[1mBold"
  • 2: Dim: echo -e "Normal \e[2mDim"
  • 4: Souligné: echo -e "Normal \e[4mUnderlined"
  • 5: Clignote (ne fonctionne pas dans la plupart des terminaux sauf XTerm): echo -e "Normal \e[5mBlink"
  • 7: Inverser / Inverser: echo -e "Normal \e[7minverted"
  • 8: Caché (utile pour les informations sensibles): echo -e "Normal \e[8mHidden Input"
  • 21: Réinitialiser / Supprimer gras / clair: echo -e "Normal \e[1mBold \e[21mNormal"
  • 22: Reset / Remove dim: echo -e "Normal \e[2mDim \e[22mNormal"
  • 24: Réinitialiser / Supprimer le soulignement: echo -e "Normal \e[4mUnderlined \e[24mNormal"
  • 25: Réinitialiser / Supprimer clignotement: echo -e "Normal \e[5mBlink \e[25mNormal"
  • 27: Réinitialiser / Supprimer inverser / inverser: echo -e "Normal \e[7minverted \e[27mNormal"
  • 28: Réinitialiser / Supprimer masqué: echo -e "Normal \e[8mHidden \e[28mNormal"

Premier plan

  • 39: Par défaut (généralement vert, blanc ou gris clair): echo -e "Default \e[39mDefault"
  • 30: Noir: echo -e "Default \e[30mBlack"(meilleur combiné avec une couleur de fond: echo -e "Default \e[30;107mBlack on white")
  • 31: Rouge (ne pas utiliser avec un fond vert)
  • 32: Vert
  • 33: Jaune
  • 34: Bleu
  • 35: Magenta / Violet
  • 36: Cyan
  • 37: Gris clair
  • 90: Gris foncé
  • 91: Rouge clair
  • 92: Vert clair
  • 93: Jaune clair
  • 94: Bleu clair
  • 95: Magenta clair / rose
  • 96: Cyan clair
  • 97: Blanc

Contexte

  • 49: Couleur de fond par défaut (généralement noir ou bleu)
  • 40: Noir
  • 41: Rouge
  • 42: Vert
  • 43: Jaune
  • 44: Bleu
  • 45: Magenta / Violet
  • 46: Cyan
  • 47: Gris clair (ne pas utiliser avec le premier plan blanc)
  • 100: Gris foncé (ne pas utiliser avec le premier plan noir)
  • 101: Rouge clair
  • 102: Vert clair (ne pas utiliser avec le premier plan blanc)
  • 103: Jaune clair (ne pas utiliser avec le premier plan blanc)
  • 104: Bleu clair (ne pas utiliser avec un avant-plan jaune clair)
  • 105: Magenta clair / Rose (ne pas utiliser avec un avant-plan clair)
  • 106: Cyan clair (ne pas utiliser avec un avant-plan blanc)
  • 107: Blanc (ne pas utiliser avec le premier plan clair)

Pour définir les couleurs de premier plan et d’arrière-plan en même temps, utilisez la forme correspondante echo -e "\e[S;FG;BGm". Par exemple: echo -e "\e[1;97;41m"(avant-plan blanc gras sur fond rouge)

Pour les options de 256 couleurs, voir la page source.

Agi Hammerthief
la source
30

Changer les couleurs sur une base accidentelle

S'il est censé changer de couleur occasionnellement :

Vous pouvez utiliser la commande setterm :

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

parmi les couleurs, vous pouvez choisir (avant et arrière plan):

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

pour plus d'options:

setterm -help

Modifier vos paramètres de profil (couleur)

En 14.04, je ne trouvais pas d’option à utiliser dconfpour définir les couleurs ou le terminal. Vous pouvez cependant utilisergconftool

  • Vous devez d'abord obtenir votre nom de profil:

    gconftool-2 --get /apps/gnome-terminal/global/profile_list
    
  • Ensuite, pour définir les couleurs du texte de votre profil:

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

    par exemple pour définir la couleur du texte en blanc

    La même chose avec la couleur de fond:

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

    par exemple pour définir la couleur d'arrière-plan sur noir

Alternativement, pour définir le nom de la ou des couleurs, vous pouvez simplement utiliser whiteou green, à partir de la même palette que la commande setterm, par exemple:

gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string black
Jacob Vlijm
la source
1
Ceux-ci devraient être des doubles tirets dans la commande initiale de setterm.
user1770201
Travaillé le 14.04, mais pas le 16.04 (version bêta; je ne sais pas si c'est la raison) ... Pourtant, a dconf write /org/gnome/terminal/legacy/profiles:/:<profile_id>/background-color "'rgb(0,0,0)'"fait le tour.
Janaka Bandara
Ne fonctionne pas sur Ubuntu 1704, ça à l'air mauvais
Wax Cage
1
gconftool-2(pour Ubuntu 14.04 et peut - être quelques versions suivantes) ou dconfou gsettingssur les versions plus récentes des paramètres de changement Ubuntu gnome-terminaux, et prennent effet immédiat sur tous les onglets et fenêtres du même profil. Je ne pense pas que OP recherchait ce comportement.
egmont
5

Les divers codes de couleur utilisés pour obtenir une sortie en couleur peuvent également être utilisés pour obtenir des arrière - plans en couleur :

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

Par conséquent, la commande suivante transforme mon arrière-plan en rouge:

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

Selon le shell, l'émulateur de terminal, etc., vous n'aurez peut-être pas besoin de -e.

muru
la source
3

Voir la réponse de kos pour changer le premier plan ou l'arrière-plan en une couleur particulière de la palette, ou même une couleur RVB directe dans certains terminaux. L'effet d'une telle séquence dure jusqu'à ce qu'une couleur différente soit sélectionnée (ou redevienne la valeur par défaut).

Une autre approche, prise en charge par certains émulateurs de terminal, consiste à redéfinir les valeurs RVB exactes des couleurs de fond et d'arrière-plan par défaut du terminal à l' aide des séquences d'échappement OSC 10/11:

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

Cela risque de durer beaucoup plus longtemps (jusqu'à ce qu'il soit remplacé par un autre OSC 10/11 ou réinitialisé via l'OSC 110/111), mais contrairement à l'approche dconf, cela n'affecte que le terminal actuel.

Egmont
la source