Vous pouvez ajouter de la couleur à votre terminal Linux à l'aide de paramètres d'encodage ANSI spéciaux, soit dynamiquement dans une commande de terminal, soit dans des fichiers de configuration, ou vous pouvez utiliser des thèmes prêts à l'emploi dans votre émulateur de terminal. Dans tous les cas, le texte nostalgique vert ou ambre sur un écran noir est totalement facultatif. Cet article montre comment rendre Linux aussi coloré (ou aussi monochrome) que vous le souhaitez.
Capacités des terminaux
Les systèmes modernes utilisent généralement par défaut au moins xterm-256color, mais si vous essayez d'ajouter de la couleur à votre terminal sans succès, vous devriez vérifier votre paramètre TERM.
Historiquement, les terminaux Unix étaient littéralement cela :des points physiques au point final littéral (terminaison) d'un système informatique partagé où les utilisateurs pouvaient taper des commandes. Ils étaient uniques par rapport aux téléscripteurs (c'est pourquoi nous avons encore des périphériques /dev/tty sous Linux aujourd'hui) qui étaient souvent utilisés pour émettre des commandes à distance. Les terminaux avaient des moniteurs CRT intégrés, de sorte que les utilisateurs pouvaient s'asseoir devant un terminal dans leur bureau pour interagir directement avec l'ordinateur central. Les moniteurs CRT étaient coûteux - à la fois à fabriquer et à contrôler; il était plus facile de laisser un ordinateur cracher du texte ASCII brut que de se soucier de l'anticrénelage et d'autres subtilités que les informaticiens modernes tiennent pour acquis. Cependant, les développements technologiques se sont produits rapidement à l'époque, et il est rapidement devenu évident que lorsque de nouveaux terminaux d'affichage vidéo étaient conçus, ils avaient besoin de nouvelles fonctionnalités pour être disponibles en option.
Par exemple, le nouveau VT100 sophistiqué sorti en 1978 prenait en charge la couleur ANSI, donc si un utilisateur identifiait le type de terminal comme vt100, alors un ordinateur pourrait fournir une sortie couleur, alors qu'un périphérique série de base pourrait ne pas avoir une telle option. Le même principe s'applique aujourd'hui, et il est défini par la variable d'environnement TERM. Vous pouvez vérifier votre définition TERM avec echo :
$ echo $TERM
xterm-256color
Plus de ressources Linux
- Aide-mémoire des commandes Linux
- Aide-mémoire des commandes Linux avancées
- Cours en ligne gratuit :Présentation technique de RHEL
- Aide-mémoire sur le réseau Linux
- Aide-mémoire SELinux
- Aide-mémoire sur les commandes courantes de Linux
- Que sont les conteneurs Linux ?
- Nos derniers articles Linux
Le fichier /etc/termcap obsolète (mais toujours maintenu sur certains systèmes dans l'intérêt de la rétrocompatibilité) définissait les capacités des terminaux et des imprimantes. La version moderne de celui-ci est terminfo, située dans /etc ou /usr/share, selon votre distribution. Ces fichiers répertorient les fonctionnalités disponibles dans différents types de terminaux, dont beaucoup sont définis par du matériel historique :il existe des définitions pour vt100 à vt220, ainsi que pour les émulateurs logiciels modernes comme xterm et Xfce. La plupart des logiciels ne se soucient pas du type de terminal que vous utilisez; dans de rares cas, vous pouvez recevoir un avertissement ou une erreur concernant un type de terminal incorrect lors de la connexion à un serveur qui vérifie les fonctionnalités compatibles. Si votre terminal est défini sur un profil avec très peu de fonctionnalités, mais que vous savez que l'émulateur que vous utilisez est capable de plus, vous pouvez modifier votre paramètre en définissant la variable d'environnement TERM. Vous pouvez le faire en exportant la variable TERM dans votre fichier de configuration ~/.bashrc :
export TERM=xterm-256color
Enregistrez le fichier et rechargez vos paramètres :
$ source ~/.bashrc
Codes de couleur ANSI
Les terminaux modernes ont hérité des séquences d'échappement ANSI pour les fonctionnalités "méta". Ce sont des séquences spéciales de caractères qu'un terminal interprète comme des actions au lieu de caractères. Par exemple, cette séquence efface l'écran jusqu'à l'invite suivante :
$ printf `\033[2J`
Cela n'efface pas votre historique; il efface simplement l'écran de votre émulateur de terminal, il s'agit donc d'une séquence d'échappement ANSI sûre et démonstrative.
ANSI a également des séquences pour définir la couleur de votre terminal. Par exemple, taper ce code change le texte suivant en vert :
$ printf '\033[32m'
Tant que vous voyez les couleurs de la même manière que votre ordinateur, vous pouvez utiliser la couleur pour vous aider à vous souvenir du système auquel vous êtes connecté. Par exemple, si vous vous connectez régulièrement en SSH à votre serveur, vous pouvez définir l'invite de votre serveur sur vert pour vous aider à la différencier en un coup d'œil de votre invite locale. Pour une invite verte, utilisez le code ANSI pour le vert avant votre caractère d'invite et terminez-le par le code représentant votre couleur par défaut normale :
export PS1=`printf "\033[32m$ \033[39m"`
Premier plan et arrière-plan
Vous n'êtes pas limité à la définition de la couleur de votre texte. Avec les codes ANSI, vous pouvez contrôler la couleur d'arrière-plan de votre texte et effectuer un style rudimentaire.
Par exemple, avec \033[4m , vous pouvez faire en sorte que le texte soit souligné, ou avec \033[5m vous pouvez le régler pour qu'il clignote. Cela peut sembler idiot au premier abord, car vous n'allez probablement pas configurer votre terminal pour souligner tout le texte et clignoter toute la journée, mais cela peut être utile pour certaines fonctions. Par exemple, vous pouvez faire clignoter une erreur urgente produite par un script shell (en guise d'alerte pour votre utilisateur), ou vous pouvez souligner une URL.
Pour votre référence, voici les codes de couleur de premier plan et d'arrière-plan. Les couleurs de premier plan sont dans la plage 30, tandis que les couleurs d'arrière-plan sont dans la plage 40 :
Couleur | Premier plan | Contexte |
---|---|---|
Noir | \033[30m | \033[40m |
Rouge | \033[31m | \033[41m |
Vert | \033[32m | \033[42m |
Orange | \033[33m | \033[43m |
Bleu | \033[34m | \033[44m |
Magenta | \033[35m | \033[45m |
Cyan | \033[36m | \033[46m |
Gris clair | \033[37m | \033[47m |
Retour à la distribution par défaut | \033[39m | \033[49m |
Certaines couleurs supplémentaires sont disponibles pour l'arrière-plan :
Couleur | Contexte |
---|---|
Gris foncé | \033[100m |
Rouge clair | \033[101m |
Vert clair | \033[102m |
Jaune | \033[103m |
Bleu clair | \033[104m |
Violet clair | \033[105m |
Sarcelle | \033[106m |
Blanc | \033[107m |
Permanence
La définition des couleurs dans votre session de terminal n'est que temporaire et relativement inconditionnelle. Parfois l'effet dure quelques lignes; c'est parce que cette méthode de définition des couleurs repose sur une instruction printf pour définir un mode qui ne dure que jusqu'à ce que quelque chose d'autre le remplace.
La façon dont un émulateur de terminal obtient généralement des instructions sur les couleurs à utiliser provient des paramètres de la variable d'environnement LS_COLORS, qui est à son tour remplie par les paramètres de dircolors. Vous pouvez afficher vos paramètres actuels avec une instruction echo :
$ echo $LS_COLORS
rs=0:di=38;5;33:ln=38;5;51:mh=00:pi=40;
38;5;11:so=38;5;13:do=38;5;5:bd=48;5;
232;38;5;11:cd=48;5;232;38;5;3:or=48;
5;232;38;5;9:mi=01;05;37;41:su=48;5;
196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;
196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;
[...]
Ou vous pouvez utiliser directement dircolors :
$ dircolors --print-database
[...]
# image formats
.jpg 01;35
.jpeg 01;35
.mjpg 01;35
.mjpeg 01;35
.gif 01;35
.bmp 01;35
.pbm 01;35
.tif 01;35
.tiff 01;35
[...]
Si cela semble énigmatique, c'est parce que ça l'est. Le premier chiffre après un type de fichier est le code d'attribut, et il a six options :
- 00 aucun
- 01 gras
- 04 trait de soulignement
- 05 clignotement
- 07 inversé
- 08 masqué
Le chiffre suivant est le code couleur sous une forme simplifiée. Vous pouvez obtenir le code couleur en prenant le dernier chiffre du code ANSII (32 pour le premier plan vert, 42 pour l'arrière-plan vert ; 31 ou 41 pour le rouge, etc.
Votre distribution définit probablement LS_COLORS globalement, de sorte que tous les utilisateurs de votre système héritent des mêmes couleurs. Si vous voulez un jeu de couleurs personnalisé, vous pouvez utiliser dircolors pour cela. Tout d'abord, générez une copie locale de vos paramètres de couleur :
$ dircolors --print-database > ~/.dircolors
Modifiez votre liste locale comme vous le souhaitez. Lorsque vous êtes satisfait de vos choix, enregistrez le fichier. Vos paramètres de couleur ne sont qu'une base de données et ne peuvent pas être utilisés directement par ls, mais vous pouvez utiliser dircolors pour obtenir le shellcode que vous pouvez utiliser pour définir LS_COLORS :
$ dircolors --bourne-shell ~/.dircolors
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:
pi=40;33:so=01;35:do=01;35:bd=40;33;01:
cd=40;33;01:or=40;31;01:mi=00:su=37;41:
sg=30;43:ca=30;41:tw=30;42:ow=34;
[...]
export LS_COLORS
Copiez et collez cette sortie dans votre fichier ~/.bashrc et rechargez. Alternativement, vous pouvez vider cette sortie directement dans votre fichier .bashrc et recharger.
$ dircolors --bourne-shell ~/.dircolors >> ~/.bashrc
$ source ~/.bashrc
Vous pouvez également faire en sorte que Bash résolve les .dircolors au lancement au lieu de faire la conversion manuellement. De manière réaliste, vous n'allez probablement pas changer de couleur souvent, donc cela peut être trop agressif, mais c'est une option si vous prévoyez de changer beaucoup votre palette de couleurs. Dans votre fichier .bashrc, ajoutez cette règle :
[[ -e $HOME/.dircolors ]] && eval "`dircolors --sh $HOME/.dircolors`"
Si vous avez un fichier .dircolors dans votre répertoire personnel, Bash l'évalue au lancement et définit LS_COLORS en conséquence.
Couleur
Les couleurs de votre terminal sont un moyen facile de vous donner une référence visuelle rapide pour des informations spécifiques. Cependant, vous ne voudrez peut-être pas trop vous appuyer dessus. Après tout, les couleurs ne sont pas universelles, donc si quelqu'un d'autre utilise votre système, il se peut qu'il ne voie pas les couleurs de la même manière que vous. De plus, si vous utilisez une variété d'outils pour interagir avec les ordinateurs, vous pouvez également constater que certains terminaux ou connexions à distance ne fournissent pas les couleurs que vous attendez (ou pas du tout).
Ces avertissements mis à part, les couleurs peuvent être utiles et amusantes dans certains flux de travail, alors créez une base de données .dircolor et personnalisez-la à votre guise.