Wie verwende ich Farben im MOTD?

17

Ich habe die Standardeinstellung/etc/update-motd.d/00-header bearbeitet und einige Farben hinzugefügt, um die Lesbarkeit zu verbessern:

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

Ich kann diese Codezeile problemlos in einem Terminal ausführen, aber wenn ich 00-headerdiese Informationen bearbeite , werden die Escape-Codes im Klartext ausgegeben:

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

Wie kann ich der Nachricht des Tages einen Farbtupfer hinzufügen?

IQAndreas
quelle
Wie haben Sie die Datei bearbeitet, insbesondere die nicht druckbaren Zeichen?
Volker Siegel
In habe picoich die vorhandene Codezeile durch die erste Codezeile ersetzt, die ich in meinem Beispiel angegeben habe. Das Problem ist, dass der MOTD-Parser dann die \eund die nachfolgenden Zeichen als Klartext statt als Sonderzeichen behandelt.
IQAndreas
Ich sehe aus dem Copyright-Vermerk der verlinkten Datei, dass Sie auf Ubuntu sind, also füge ich das entsprechende Tag hinzu, da es für die Beantwortung relevant ist (in Bezug auf die verwendete Shell, siehe meine Antwort).
Volker Siegel

Antworten:

11

Angenommen, Sie arbeiten mit Ubuntu - das Dash zum Ausführen von Systemskripten verwendet:

Diese Datei /etc/update-motd.d/00-headerwird von ausgeführt /bin/dash(nicht /bin/bash), was ziemlich minimalistisch (und schnell) ist -
es scheint, dass das "\ e" an dieser Stelle nicht unterstützt wird - verwenden Sie stattdessen "\ 033" .

Es ist unterschiedlich, wann Escape-Codes erweitert werden.

Volker Siegel
quelle
3

Unter Debian / Ubuntu motdist das konfiguriert in /etc/pam.d/sshd:

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

was bedeutet, dass das System nach erfolgreicher Anmeldung ungefähr so ​​läuft:

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

Wo /etc/motdist der statische Teil (nur gedruckt, nicht bezogen).

Debian 9 / Ubuntu 16.04 :

Zur Generierung des dynamischen Teils run-partswird für das /etc/update-motd.dVerzeichnis verwendet:

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

Für etwas besser lesbaren Code können Sie verwenden tput setaf {color number}. Beachten Sie, dass wir zur Erhaltung der Farben eine TERMVariable setzen müssen.

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

Speichern Sie die Datei als zB /etc/update-motd.d/10-uname

und stellen Sie sicher, dass es ausführbar ist:

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

Grundfarben sind nummeriert:

  • 1 - Rot
  • 2 - Grün
  • 3 - Gelb
  • 4 - Blau
  • 5 - Magenta
  • 6 - Cyan
  • 7 - Weiß

Der obige Code generiert: bash farbiges motd

Je nach Geschmack können Sie mit lolcatoder Überschriften von mehr Farben erzeugen figlet. Die generierte Ausgabe verwendet die Standard-Bash-Syntax:

^[(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

Der dynamische Teil wird aktualisiert, indem /etc/init.d/motd startFolgendes ausgeführt wird:

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