ls
en couleurravn@imada.ou.dk
) Pierre.Vassellerie@obspm.fr
)ls
livrée dans la distribution Slackware de Linux permet un affichage en couleur (Slackware 2.0.2 et noyau 1.1.54 de Linux. Ceci marche aussi bien avec agetty
, qu'avec mgetty_ps
).
Il se peut que les couleurs par défaut ne vous plaisent pas et que vous prenne
l'envie de les trifouiller.
Ce document a pour unique but de vous expliquer le principe de fonctionnement
et la configuration des couleurs utilisés par cette commande.
Il existe deux méthodes :
;-)
.
Les sélections sont réalisées par :
setterm -foreground black -background white -storeoù -store signifie que cette configuration est à enregistrer comme configuration par défaut pour la console courante. Il vous faudra recommencer cette opération pour chaque nouvelle console virtuelle, et il semble alors une excellente idée de placer cette ligne dans votre
.login (en csh ou tcsh)
ou votre .profile (en sh, ksh ou bash)
.
Vous en connaissez désormais autant que moi sur la commande setterm
:-)
.
ESC [ <parametres> moù
ESC
est le caractère ASCII 27 et paramètres est aucun
ou plusieurs nombres séparés par des points-virgules. Par exemple :
"\033[41;33;1m" qui donne un affichage jaune sur fond rouge "\033[30;47m" qui donne un affichage blanc sur fond noir "\033[m" qui retablit l'affichage par defaut
Ces exemples nécessitent un shell reconnaissant les constructions du type
\xxx
. Si ce n'est pas le cas, insérez directement un caractère
d'échappement directement dans la chaîne. Sous bash/vi
tapez
Ctrl-V ESC
, et sous tcsh/emacs
tapez Ctrl-Q ESC
.
Ceci est un script en C-shell faisant apparaître sur la console l'ensemble des combinaisons de couleurs :
#!/bin/csh # # Affiche les couleurs ANSI # set esc="\033[" foreach fore (30 31 32 33 34 35 36 37) set line1="$fore " line2=" " foreach back (40 41 42 43 44 45 46 47) set line1="${line1}${esc}${back};${fore}m Normal ${esc}0m" set line2="${line2}${esc}${back};${fore};1m ${back} Bold ${esc}0m" end echo "$line1\n$line2" end
Le numéro de la couleur d'avant-plan est croissant vers la gauche, et le
numéro de la couleur d'arrière-plan est donné dans le pavé.
Si vous désirez un affichage en gras, ajoutez un 01
comme premier
paramètre.
Mettez un point-virgule entre chaque paramètre, et mettez l'ensemble de la
séquence comme paramètres.
La commande ls
commence par regarder la définition des associations de
couleurs dans le fichier ~/.dir_colors
et s'il n'existe pas utilise le
fichier /etc/DIR_COLORS
.
Ces fichiers contiennent des entrées du style :
LINK 36;1 # lien symbolique FIFO 40;33 # tube SOCK 41;01;35 # socket BLK 41;33;01 # gestionnaire en mode bloc CHR 41;33;01 # gestionnaire en mode caractere EXEC 32;1 # fichier avec droit d'execution .tar 01;31 # archives et fichiers compressés .tgz 01;31 .zip 01;31 .z 01;31 .Z 01;31 .gz 01;31
les séquences ANSI données en paramètres sont ici données exactement avec la
même syntaxe que pour la commande setterm.
Modifiez ceci à votre guise, et voyez le résultat d'un ls sur
/sbin, /etc et /dev
.
Afin que le fichier /etc/DIR_COLORS
ou ~/.dir_colors
soit
pris en compte, il vous faut rajouter dans /etc/profile ou ~/.profile
(sh/bash) ou
/etc/csh.login ou ~/.login
(csh/tcsh) la ligne :
eval `/bin/dircolors`ATTENTION : cette ligne doit être placée avant une quelconque définition d'alias pour
ls
.
Cette commande lit le fichier /etc/DIR_COLORS
ou
~/.dir_colors
et fournit les variables d'environnement
LS_COLORS
et LS_OPTIONS
ainsi que les alias
ls, dir, vdir, d et v
.
Ceci est réalisé individuellement pour chaque console virtuelle à l'aide de la séquence ANSI :
Cette information a été trouvée en parcourant le source du noyau. Je ne peux donc dire s'il s'agit d'un standard.
ESC [ 8 ]qui spécifie les valeurs par défaut des couleurs d'avant et arrière-plan. La séquence ANSI de recomposition des attributs (
ESC [ m
) permet alors
de prendre en compte ces couleurs plutôt que du blanc sur fond noir.
La méthode décrite ici est supposée être pour des systèmes "isolés", dans le sens où les logins ne se font que sur la console. Ceci ne marche pas forcément pour des logins se faisant depuis des terminaux distants, des connexions par modem ou d'autres machines, qui dans ce cas ne comprendrait pas les séquences. L'interprétation des codes ANSI est une propriété des consoles Linux et n'existe que dans peu d'autres programmes de terminal.
Si vous êtes sur un système "isolé", un bon moyen de faire prendre en compte
les couleurs pour chaque console est de modifier le fichier /etc/issue
, et
d'en voir le résultat en se délogeant. Généralement (et en particulier dans les
distributions Slackware) ce fichier est lu et affiché à chaque reboot.
Ainsi si votre /etc/rc.d/rc.S
contient (aux environs de la ligne 75) :
# Initialise /etc/issue et /etc/motd pour qu'il donne la version du noyau utilise # ATTENTION : les fichiers /ETC/ISSUE AND /ETC/MOTD sont crees à chaque boot. # Mettez ceci en commentaire si vous desirez personnaliser une bonne fois pour # toute ces fichiers. echo ""> /etc/issue echo Bienvenue dans le monde merveilleux de Linux \ `/bin/uname -a | /bin/cut -d\ -f3`. >> /etc/issue echo >> /etc/issue
Mettez ces lignes en commentaire ou modifiez comme suit :
... # Mettez ceci en commentaire si vous desirez personnaliser une bonne fois pour # toute ces fichiers ESCAPE="<remplacez ici par un seul caractere d'echappement>" echo "${ESCAPE}[H${ESCAPE}[37;44m${ESCAPE}[8]${ESCAPE}[2J"> /etc/issue ...
Mon shell de démarrage ne comprend pas le \033
, je dois alors spécifier
le code ASCII 27 dans mon script comme indiqué dans le premier paragraphe.
La ligne ressemble alors à ESCAPE="^["
.
Ce code a pour effet de ramener le curseur en début de fenêtre, changer les couleurs, sauver la sélection et effacer l'écran. Cette modification n'aura un effet qu'au prochain reboot.
Si votre "boîte Linux" n'est pas "isolée", il se peut que certains problèmes apparaissent lors des connexions des utilisateurs distants. Ceci est dû au fait que leur terminal ne comprend pas les séquences d'échappement ANSI.
Vous devez alors ajouter au niveau de l'utilisateur :
.profile (sh/bash) : if [ "$TERM" = "console" ]; then echo "\033[37;44m\033[8]" fi ou .login (csh/tcsh) : if ( "$TERM" == "console" ) then echo "\033[37;44m\033[8]" endif
Si l'on désire que la modification se fasse pour tous les utilisateurs du système,
il suffit alors que root
modifie les fichiers /etc/profile
ou
/etc/csh.login
.
(Je rappelle une dernière fois que si le shell ne peut interpréter les \0xx
(en particulier l'échappement \033
), il suffit de remplacer ce dernier par
"ESC".
L'auteur original de ce document nous dit :
This is still a rough draft, and English isn't my primary language. Please feel free to correct me on the above text in order to make it as clear and correct as possible. This goes, of course, for the information provided as well. Comments and criticism goes to -- Thorbjo/rn Ravn Andersen "...and...Tubular Bells!" ravn@imada.ou.dk <http://www.imada.ou.dk/~ravn>
et je suis bien d'accord avec lui. Pour la version française, n'hésitez pas une seconde à m'envoyer vos remarques, corrections, ajouts, bouteilles de vin, etc...
Cette version est placé sous copyright (c)1995 de Pierre Vassellerie.
Comme tous les documents HOWTO, ce document peut être reproduit et distribué dans son intégralité ou partiellement, par quelque moyen physique que ce soit. Il reste malgré tout sujet aux conditions suivantes :
Des exceptions à ces règles peuvent être accordées dans des buts éducatifs, écrivez à l'auteur et demandez. Ces restrictions ont pour but unique de protéger les auteurs et leur travail. Toute aide éducative de ce document sera grandement appréciée.