Pour mettre en couleur le fond d’un terminal sous Linux, il n’y a guère de solutions … Jusqu’ici le plus simple était de jouer avec les profils de Gnome-Terminal (ou autre) et d’associer à tous les onglets la même couleur de fond. Par contre pour avoir une couleur différente sur chaque onglet, c’était jusqu’ici mission impossible, ce qui au demeurant est relativement étonnant, pour ma part j’aurais besoin de cette fonctionnalité :

  • au travail pour avoir une couleur de fond différente selon le type de machine sur laquelle je me connecte (rouge pour les machines en production, noir pour les serveurs de développement par ex.) ;
  • chez moi pour différencier la machine sur laquelle je suis connecté (serveur domotique, serveur dédié en ligne, etc.).

Je configure bien ces infos dans le prompt (via PS1, avec le login et le hostname), mais c’est très insuffisant (pas suffisament visuel).

Or une solution plutôt élégante existe désormais, mise en place par Ian Blanes : un petit programme en C, sans dépendances, qui s’appelle colorize. C’est ce programme qui lance la commande ssh, redirige les entrées / sorties entre le terminal et la connexion ssh, et dans l’intervalle, modifie les couleurs de fond et/ou de police de caractères.

Colorer différemment le background de vos sessions SSH /media/screenshots/screenshot-ssh-colorize-example.png

Testé sous evilvte et gnome-terminal, çà fonctionne parfaitement bien, à priori sans ralentissements visibles. Ian explique toutefois que les lignes ayant déjà nativement un fond de couleur se comporteront mal (ce n’est quasiment jamais le cas chez moi).

Sources : http://deic.uab.es/~iblanes/colorize-0.1-src.tar.gz [ [Colorizer (sources) v0.1mirror|/public/ressources/colorize-0.1-src.tar.gz|en|Ian Blanes] ] Homepage : http://deic.uab.es/~iblanes/

L’installation est très simple :

wget http://deic.uab.es/~iblanes/colorize-0.1-src.tar.gz
tar xzvf colorize-0.1-src.tar.gz 
make 

Copier ensuite le programme colorize dans un répertoire accessible via le path, par ex. /usr/bin/. Le lancement se fait ensuite via pour lancer un SSH avec un fond (-b) gris foncé (Ox333333) par ex. :

colorize -b 0x333333 -- ssh root@192.168.0.1 

Ensuite à l’utilisation, deux possibilités. Soit définir des alias de commande ssh pour chacune des machines sur laquelle se connecter.

alias ssh-production='colorize -b 0x333333 -- ssh root@192.168.0.1'
alias ssh-dedie='colorize -b 0xCC0000 -- ssh tensin' # réutilisation alias défini dans ~/.ssh/config 

Soit enrober l’appel de la commande ssh avec un fichier de paramétrie. Il suffit dans dans ce cas de créer un fichier ~/.ssh-colorize avec le contenu suivant (premier champ = le hostname, ou l’alias ssh ; deuxième champ, la couleur de background) :

192.168.0.2 0x440000 
192.168.0.3 0x440000 
solaris 0x000044 

Et dans son fichier .profile (ou équivalent si autre shell) mettre en place la fonction suivante :

function ssh {
  typeset DEST=$1
  if [[ -s ~/.ssh-colorize ]] ; then
    HOSTNAME=$(echo "$DEST" | sed 's/.*@//')
    egrep "^$HOSTNAME" .ssh-colorize 2>/dev/null | awk ' { print $2 } ' | read COLOR
  fi
  if [[ ! -z "${COLOR}" ]] ; then
    colorize -b "${COLOR}" -- /usr/bin/ssh "${DEST}"
  else
    /usr/bin/ssh "${DEST}"
  fi
}

De fait, tous les appels ssh passeront par cette fonction, qui ira relire dans ~/.ssh-colorize, si renseigné, le code couleur de background à utiliser ! Ca permet de centraliser toutes les définitions de couleur de background et de facilement en ajouter sans devoir créer des alias.