¿Cómo uso los colores en MOTD?

17

Edité el predeterminado/etc/update-motd.d/00-header , agregando un poco de color para que sea más fácil de leer:

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

Puedo ejecutar esa línea de código muy bien en una terminal, pero cuando edito 00-headercon esta información, obtengo los códigos de escape impresos en texto sin formato:

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

¿Cómo puedo agregar un toque de color al mensaje del día?

IQAndreas
fuente
¿Cómo editó el archivo, especialmente los caracteres no imprimibles?
Volker Siegel
En picoReemplacé la línea de código existente con la primera línea o código que incluí en mi ejemplo. El problema es que el analizador MOTD trató los \ecaracteres y los siguientes como texto sin formato en lugar de como caracteres especiales.
IQAndreas
Veo desde el encabezado de derechos de autor del archivo vinculado que está en Ubuntu, por lo que agrego la etiqueta respectiva, ya que es relevante para responder (con respecto al shell utilizado, vea mi respuesta).
Volker Siegel

Respuestas:

11

Suponiendo que está en Ubuntu, que utiliza un guión para ejecutar scripts del sistema:

Ese archivo, /etc/update-motd.d/00-headeres ejecutado por /bin/dash, (no /bin/bash), que es bastante minimalista (y rápido);
parece que no admite la "\ e" en este lugar; use "\ 033" en su lugar.

Es diferente cuándo expandir los códigos de escape.

Volker Siegel
fuente
3

En Debian / Ubuntu, el motdestá configurado en /etc/pam.d/sshd:

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

lo que significa que al iniciar sesión correctamente, el sistema ejecutará algo como:

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

donde /etc/motdestá la parte estática (solo impresa, sin fuente).

Debian 9 / Ubuntu 16.04 :

Para generar la parte dinámica run-partsse utiliza para el /etc/update-motd.ddirectorio:

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

Para un código un poco más legible puede usar tput setaf {color number}. Tenga en cuenta que para preservar los colores tenemos que establecer TERMvariables.

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

guardar el archivo como p. ej. /etc/update-motd.d/10-uname

y asegúrese de que sea ejecutable:

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

Los colores básicos están numerados:

  • 1 - rojo
  • 2 - verde
  • 3 - amarillo
  • 4 - azul
  • 5 - magenta
  • 6 - Cian
  • 7 - blanco

El código anterior genera: motd color bash

Dependiendo de su gusto, puede producir resultados más coloridos utilizando lolcato encabezados de figlet. La salida generada utiliza la sintaxis bash estándar:

^[(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 dinámica se actualiza utilizando lo /etc/init.d/motd startsiguiente:

uname -snrvm > /var/run/motd.dynamic
Tombart
fuente