Comment utiliser les couleurs dans le MOTD?

17

J'ai modifié la valeur par défaut/etc/update-motd.d/00-header , en ajoutant de la couleur pour en faciliter la lecture:

printf "Welcome to \e[1;34m%s\e[0m \e[2m(%s %s %s)\e[0m\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"

Je peux très bien exécuter cette ligne de code dans un terminal, mais lorsque je modifie 00-headeravec ces informations, je reçois les codes d'échappement imprimés en clair:

Welcome to \e[1;36mUbuntu 13.10\e[0m \e[2m(GNU/Linux 3.11.0-23-generic i686)\e[0m

Comment puis-je ajouter une touche de couleur au message du jour?

IQAndreas
la source
Comment avez-vous modifié le fichier, en particulier les caractères non imprimables?
Volker Siegel
Dans, picoj'ai remplacé la ligne de code existante par la première ligne de code que j'ai incluse dans mon exemple. Le problème est que l'analyseur MOTD a ensuite traité les caractères \eet suivants comme du texte brut plutôt que comme des caractères spéciaux.
IQAndreas
Je vois dans l'en-tête du droit d'auteur du fichier lié que vous êtes sur Ubuntu, alors j'ajoute la balise respective, car elle est pertinente pour répondre (en ce qui concerne le shell utilisé, voir ma réponse).
Volker Siegel

Réponses:

11

En supposant que vous êtes sur Ubuntu - qui utilise dash pour exécuter des scripts système:

Ce fichier /etc/update-motd.d/00-header,, est exécuté par /bin/dash, (non /bin/bash,) qui est assez minimaliste (et rapide) -
il semble ne pas supporter le "\ e" à cet endroit - utilisez plutôt "\ 033" .

Il est différent de développer des codes d'échappement.

Volker Siegel
la source
3

Sur Debian / Ubuntu, le motdest configuré dans /etc/pam.d/sshd:

session    optional     pam_motd.so  motd=/run/motd.dynamic
session    optional     pam_motd.so noupdate

ce qui signifie qu'en cas de connexion réussie, le système exécutera quelque chose comme:

cat /run/motd.dynamic
if [[ -f /etc/motd ]]; then cat /etc/motd; fi

/etc/motdest la partie statique (uniquement imprimée, non source).

Debian 9 / Ubuntu 16.04 :

Pour générer la partie dynamique run-partsest utilisée pour le /etc/update-motd.drépertoire:

/usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d

Pour un code légèrement plus lisible, vous pouvez utiliser tput setaf {color number}. Notez que pour conserver les couleurs, nous devons définir une TERMvariable.

#!/bin/sh
export TERM=xterm-256color

read one five fifteen rest < /proc/loadavg
echo "$(tput setaf 2)
Kernel: `uname -v | awk -v OFS=' ' '{print $4, $5}'`
$(tput setaf 4)Load Averages......: ${one}, ${five}, ${fifteen} (1, 5, 15 min)
$(tput setaf 5)
 ______________
< Hello World! >
 --------------
        \\   ^__^
         \\  (oo)\\_______
            (__)\\       )\\\/\\
                ||----w |
                ||     ||

$(tput sgr0)"

enregistrer le fichier comme par exemple /etc/update-motd.d/10-uname

et assurez-vous qu'il est exécutable:

chmod +x /etc/update-motd.d/10-uname

Les couleurs de base sont numérotées:

  • 1 - Rouge
  • 2 - Vert
  • 3 - Jaune
  • 4 - Bleu
  • 5 - Magenta
  • 6 - Cyan
  • 7 - Blanc

Le code ci-dessus génère: basd couleur motd

Selon vos goûts, vous pouvez produire une sortie plus colorée à l'aide de lolcatou de rubriques figlet. La sortie générée utilise la syntaxe bash standard:

^[(B^[[m
^[[32m
Kernel: 4.9.65-3+deb9u2 (2018-01-04)
^[[34mLoad Averages......: 0.04, 0.05, 0.05 (1, 5, 15 min)
^[[35m
 ______________
< Hello World! >
 --------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

^[(B^[[m

Debian 8 / Ubuntu 14.04

La partie dynamique est mise à jour à l'aide de ce /etc/init.d/motd startqui s'exécute comme suit:

uname -snrvm > /var/run/motd.dynamic
Tombart
la source