Come posso usare i colori nel MOTD?


17

Ho modificato il valore predefinito/etc/update-motd.d/00-header , aggiungendo un po 'di colore per facilitare la lettura:

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)"

Posso eseguire quella riga di codice bene in un terminale, ma quando modifico 00-headercon queste informazioni, ottengo i codici di escape stampati in chiaro:

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

Come posso aggiungere un tocco di colore al messaggio del giorno?


Come hai modificato il file, in particolare i caratteri non stampabili?
Volker Siegel,

In picoho sostituito la riga di codice esistente con la prima riga o codice che ho incluso nel mio esempio. Il problema è che il parser MOTD ha quindi trattato i \ecaratteri e quelli successivi come testo normale anziché caratteri speciali.
IQAndreas,

Vedo dall'intestazione del copyright del file collegato che sei effettivamente su Ubuntu, quindi aggiungo il rispettivo tag, poiché è rilevante per la risposta (per quanto riguarda la shell utilizzata, vedi la mia risposta).
Volker Siegel,

Risposte:


11

Supponendo di essere su Ubuntu, che utilizza dash per eseguire gli script di sistema:

Quel file, /etc/update-motd.d/00-headerviene eseguito da /bin/dash, (not /bin/bash,) che è piuttosto minimalista (e veloce) -
sembra non supportare la "\ e" in questo posto - usa "\ 033" .

È diverso quando espandere i codici di escape.


3

Su Debian / Ubuntu il motdè configurato in /etc/pam.d/sshd:

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

il che significa che in caso di accesso riuscito il sistema eseguirà qualcosa del tipo:

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

dove /etc/motd trova la parte statica (solo stampata, non di provenienza).

Debian 9 / Ubuntu 16.04 :

Per generare la parte dinamica run-partsviene utilizzata per la /etc/update-motd.ddirectory:

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

Per un codice leggermente più leggibile puoi usare tput setaf {color number}. Nota che per preservare i colori dobbiamo impostare la TERMvariabile.

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

salva il file come ad es /etc/update-motd.d/10-uname

e assicurati che sia eseguibile:

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

I colori di base sono numerati:

  • 1 - Rosso
  • 2 - Verde
  • 3 - Giallo
  • 4 - Blu
  • 5 - Magenta
  • 6 - Ciano
  • 7 - Bianco

Il codice sopra genera: motivo colorato bash

A seconda dei tuoi gusti puoi produrre output più colorati usando lolcato titoli da figlet. L'output generato utilizza la sintassi 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 parte dinamica viene aggiornata usando /etc/init.d/motd startquello che esegue:

uname -snrvm > /var/run/motd.dynamic
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.