Raspberry Pi: SSH-Login-Nachricht anpassen (MOTD)

Loggt man sich per SSH auf einem Raspberry Pi ein, bekommt man immer dieselbe Nachricht angezeigt: Viel Text, wenig Information und auch nicht besonders schön. Es handelt sich dabei um die „Mitteilung des Tages“ (Message of the day = MOTD). Um diesen Text zu entfernen ist garnicht viel Aufwand nötig, denn er wird als reiner Text in der Datei /etc/motd gespeichert. Also brauchen wir ihn nur aus der entsprechenden Datei entfernen.

Raspberry Pi: Standard-Login-Nachricht

Raspberry Pi: Standard-Login-Nachricht

Inhalt

MOTD Teil 1

Dazu verbinden wir uns per SSH auf den Raspberry Pi und setzen folgenden Befehl ab:

$ sudo nano /etc/motd

Zusehen bekommen wir auch direkt die Login-Nachricht:

Raspberry Pi: Inhalt von /etc/motd

Raspberry Pi: Inhalt von /etc/motd

Die löschen wir einfach oder schreiben beliebigen Text hinein, speichern die Änderungen, trennen die Verbindung und loggen uns neu ein. Schon werden wir ganz ohne, oder mit unserer eigenen Nachricht begrüßt.

Raspberry Pi: Login ohne MOTD

Raspberry Pi: Login ohne MOTD

MOTD Teil 2

Was bleibt sind zwei Zeilen, die bei Bedarf ebenfalls noch ausgeschaltet werden können. Zeile 1 Linux raspberrypi 4.1.13+ #826 PREEMPT... wird in der Datei /etc/init.d/motd erzeugt. Um das zu verhindern, laden wir die Datei im Editor …

$ sudo nano /etc/init.d/motd

… und kommentieren Zeile 21 aus:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          motd
# Required-Start:    hostname $local_fs
# Required-Stop:
# Should-Start:
# Default-Start:     1 2 3 4 5
# Default-Stop:
# Short-Description: Create dynamic part of /etc/motd
# Description:       /etc/motd is user-editable and static.  This script
#                    creates the initial dynamic part, by default the
#                    output of uname, and stores it in /var/run/motd.dynamic.
#                    Both parts are output by pam_motd.
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/init/vars.sh

do_start () {
        # Update motd
        #uname -snrvm > /var/run/motd.dynamic
}

do_status () {
        if [ -f /var/run/motd.dynamic ] ; then
                return 0
        else
                return 4
        fi
}

case "$1" in
  start|"")
        do_start
        ;;
  restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
  stop)
        # No-op
        ;;
  status)
        do_status
        exit $?
        ;;
  *)
        echo "Usage: motd [start|stop|status]" >&2
        exit 3
        ;;
esac

:

SSH-Nachrichten

Die zweite Zeile der Login-Nachricht wird vom SSH-Daemon erzeugt und lässt sich in dessen Einstellungsdatei abschalten.

$ sudo nano /etc/ssh/sshd_config

Hier suchen wir den Eintrag PrintLastLog yes und ändern ihn zu PrintLastLog no.

...
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog no
CPKeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net
...

Während sich das Verändern von MOTD sofort auswirkt, werden die letzten beiden Änderungen erst nach einem Neustart aktiv. Mit diesen Einstellungen erhält man nach dem Login nur noch den Prompt, ohne jeglichen weiteren Text.

Grafische Gestaltung

Beispiel 1: Himbeere

Wenn es dann doch etwas mehr sein darf, dann geht auch noch etwas mehr, als statischer Text. An verschiedenen Stellen im Internet wird beschrieben, wie man sich seine eigene Mitteilung des Tages, nebst dynamischen Informationen zum Systemzustand, erstellen kann. Dabei ist vieles möglich: farbige Schrift, Datum/Uhrzeit, Uptime, CPU-Temperatur, IP-Adressen, … Daraus habe ich mir mal etwas zusammengebastelt, und für die bessere Darstellung mein Terminal auf schwarz umgestellt.

Raspberry Pi: farbige Login-Nachricht mit dem aktuellen Systemzustand

Raspberry Pi: farbige Login-Nachricht mit dem aktuellen Systemzustand

Auch das ist kein großes Ding: Quellcode des nachfolgenden Scripts hernehmen, beliebig anpassen, und irgendwo auf dem Raspberry Pi abspeichern. Bei mir liegt die Datei unter /home/pi/welcome.sh.

#!/bin/sh
# dynamische MOTD
# Aufruf in /etc/profile (letzte Zeile)

# Datum & Uhrzeit
DATUM=`date +"%A, %e %B %Y"`

# Hostname
HOSTNAME=`hostname -f`

# letzter Login
LAST1=`last -2 -a | awk 'NR==2{print $3}'`	# Wochentag
LAST2=`last -2 -a | awk 'NR==2{print $5}'`	# Tag
LAST3=`last -2 -a | awk 'NR==2{print $4}'`	# Monat
LAST4=`last -2 -a | awk 'NR==2{print $6}'`	# Uhrzeit
LAST5=`last -2 -a | awk 'NR==2{print $10}'`	# Remote-Computer

# Uptime
UP0=`cut -d. -f1 /proc/uptime`
UP1=$(($UP0/86400))		# Tage
UP2=$(($UP0/3600%24))		# Stunden
UP3=$(($UP0/60%60))		# Minuten
UP4=$(($UP0%60))		# Sekunden

# Durchschnittliche Auslasung
LOAD1=`cat /proc/loadavg | awk '{print $1}'`	# Letzte Minute
LOAD2=`cat /proc/loadavg | awk '{print $2}'`	# Letzte 5 Minuten
LOAD3=`cat /proc/loadavg | awk '{print $3}'`	# Letzte 15 Minuten

# Temperatur
TEMP=`vcgencmd measure_temp | cut -c "6-9"`

# Speicherbelegung
DISK1=`df -h | grep 'dev/root' | awk '{print $2}'`	# Gesamtspeicher
DISK2=`df -h | grep 'dev/root' | awk '{print $3}'`	# Belegt
DISK3=`df -h | grep 'dev/root' | awk '{print $4}'`	# Frei

# Arbeitsspeicher
RAM1=`free -h -o | grep 'Mem' | awk '{print $2}'`	# Total
RAM2=`free -h -o | grep 'Mem' | awk '{print $3}'`	# Used
RAM3=`free -h -o | grep 'Mem' | awk '{print $4}'`	# Free
RAM4=`free -h -o | grep 'Swap' | awk '{print $3}'`	# Swap used

# IP-Adressen ermitteln
if ( ifconfig | grep -q "eth0" ) ; then IP_LAN=`ifconfig eth0 | grep "inet Adresse" | cut -d ":" -f 2 | cut -d " " -f 1` ; else IP_LAN="---" ; fi ;
if ( ifconfig | grep -q "wlan0" ) ; then IP_WLAN=`ifconfig wlan0 | grep "inet Adresse" | cut -d ":" -f 2 | cut -d " " -f 1` ; else IP_WLAN="---" ; fi ;

echo "\033[1;32m   .~~.   .~~.    \033[1;36m$DATUM
\033[1;32m  '. \ ' ' / .'   
\033[1;31m   .~ .~~~..~.    \033[0;37mHostname......: \033[1;33m$HOSTNAME
\033[1;31m  : .~.'~'.~. :   \033[0;37mLetzter Login.: $LAST1, $LAST2 $LAST3 $LAST4 von $LAST5
\033[1;31m ~ (   ) (   ) ~  \033[0;37mUptime........: $UP1 Tage, $UP2:$UP3 Stunden
\033[1;31m( : '~'.~.'~' : ) \033[0;37mØ Auslastung..: $LOAD1 (1 Min.) | $LOAD2 (5 Min.) | $LOAD3 (15 Min.)
\033[1;31m ~ .~ (   ) ~. ~  \033[0;37mTemperatur....: $TEMP °C
\033[1;31m  (  : '~' :  )   \033[0;37mSpeicher......: Gesamt: $DISK1 | Belegt: $DISK2 | Frei: $DISK3
\033[1;31m   '~ .~~~. ~'    \033[0;37mRAM (MB)......: Gesamt: $RAM1 | Belegt: $RAM2 | Frei: $RAM3 | Swap: $RAM4
\033[1;31m       '~'        \033[0;37mIP-Adressen...: LAN: \033[1;35m$IP_LAN\033[0;37m | WiFi: \033[1;35m$IP_WLAN
\033[m"

Anschließend muss das Script nur noch ausführbar gemacht und automatisch bei jedem Login ausgeführt werden. Dazu setzen wir folgenden Befehl ab…

$ sudo chmod 777 /home/pi/welcome.sh

…bearbeiten die Datei /etc/profile und fügen am Ende den Script-Aufruf an:

$ sudo nano /etc/profile

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/us$
fi
export PATH

if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
/home/pi/welcome.sh

Bei jedem Login wird nun das Script ausgeführt und dessen Ausgabe direkt vorm Prompt angezeigt.

Beispiel 2: Lautsprecher

Weiteres Beispiel gefällig? Das verwende ich bei meinen WLAN-Lautsprechern.

Raspberry Pi: farbige Login-Nachricht mit dem aktuellen Systemzustand

Raspberry Pi: farbige Login-Nachricht mit dem aktuellen Systemzustand

#!/bin/sh
# dynamische MOTD
# Aufruf in /etc/profile (letzte Zeile)

# Datum & Uhrzeit
DATUM=`date +"%A, %e %B %Y"`

# Hostname
HOSTNAME=`hostname -f`

# letzter Login
LAST1=`last -2 -a | awk 'NR==2{print $3}'`	# Wochentag
LAST2=`last -2 -a | awk 'NR==2{print $5}'`	# Tag
LAST3=`last -2 -a | awk 'NR==2{print $4}'`	# Monat
LAST4=`last -2 -a | awk 'NR==2{print $6}'`	# Uhrzeit
LAST5=`last -2 -a | awk 'NR==2{print $10}'`	# Remote-Computer

# Uptime
UP0=`cut -d. -f1 /proc/uptime`
UP1=$(($UP0/86400))		# Tage
UP2=$(($UP0/3600%24))		# Stunden
UP3=$(($UP0/60%60))		# Minuten
UP4=$(($UP0%60))		# Sekunden

# Durchschnittliche Auslasung
LOAD1=`cat /proc/loadavg | awk '{print $1}'`	# Letzte Minute
LOAD2=`cat /proc/loadavg | awk '{print $2}'`	# Letzte 5 Minuten
LOAD3=`cat /proc/loadavg | awk '{print $3}'`	# Letzte 15 Minuten

# Temperatur
TEMP=`vcgencmd measure_temp | cut -c "6-9"`

# Speicherbelegung
DISK1=`df -h | grep 'dev/root' | awk '{print $2}'`	# Gesamtspeicher
DISK2=`df -h | grep 'dev/root' | awk '{print $3}'`	# Belegt
DISK3=`df -h | grep 'dev/root' | awk '{print $4}'`	# Frei

# Arbeitsspeicher
RAM1=`free -h -o | grep 'Mem' | awk '{print $2}'`	# Total
RAM2=`free -h -o | grep 'Mem' | awk '{print $3}'`	# Used
RAM3=`free -h -o | grep 'Mem' | awk '{print $4}'`	# Free
RAM4=`free -h -o | grep 'Swap' | awk '{print $3}'`	# Swap used

# IP-Adressen ermitteln
if ( ifconfig | grep -q "eth0" ) ; then IP_LAN=`ifconfig eth0 | grep "inet Adresse" | cut -d ":" -f 2 | cut -d " " -f 1` ; else IP_LAN="---" ; fi ;
if ( ifconfig | grep -q "wlan0" ) ; then IP_WLAN=`ifconfig wlan0 | grep "inet Adresse" | cut -d ":" -f 2 | cut -d " " -f 1` ; else IP_WLAN="---" ; fi ;

echo "\033[38;5;166m                     @@@.
\033[38;5;166m                     '@@@@.     \033[1;36m$DATUM\033[m
\033[38;5;166m           .@@         @@@@.
\033[38;5;166m         .@@@@   @@@.   @@@@.   \033[0;37mHostname.: \033[1;33m$HOSTNAME\033[m
\033[38;5;166m      .@@@@@@@   @@@@.   @@@@.  \033[0;37mL. Login.: $LAST1, $LAST2 $LAST3 $LAST4 von $LAST5
\033[38;5;166m@@@@@@@@@@@@@@    @@@@   '@@@@  \033[0;37mUptime...: $UP1 Tage, $UP2:$UP3 Stunden
\033[38;5;166m@@@@@@@@@@@@@@     @@@:   @@@@.
\033[38;5;166m@@@@@@@@@@@@@@     @@@@   @@@@: \033[0;37mØ-Ausl...: $LOAD1 (1m) | $LOAD2 (5m) | $LOAD3 (15m)
\033[38;5;166m@@@@@@@@@@@@@@     @@@:   @@@@' \033[0;37mTemp.....: $TEMP °C
\033[38;5;166m@@@@@@@@@@@@@@    @@@@   .@@@@  \033[0;37mSpeicher.: Gesamt: $DISK1 | Belegt: $DISK2 | Frei: $DISK3
\033[38;5;166m      '@@@@@@@   @@@@'   @@@@'  \033[0;37mRAM (MB).: Gesamt: $RAM1 | Belegt: $RAM2 | Frei: $RAM3
\033[38;5;166m         '@@@@   @@@'   @@@@'
\033[38;5;166m           '@@         @@@@'    \033[0;37mIP-Adr...: LAN:  \033[1;35m$IP_LAN\033[m
\033[38;5;166m                     ,@@@@'     \033[0;37m           WiFi: \033[1;35m$IP_WLAN\033[m
\033[38;5;166m                     @@@'
\033[m"

Beispiel 3: FHEM

Und noch ein Beispiel:

Raspberry Pi: farbige Login-Nachricht mit dem aktuellen Systemzustand

Raspberry Pi: farbige Login-Nachricht mit dem aktuellen Systemzustand

#!/bin/sh
# dynamische MOTD
# Aufruf in /etc/profile (letzte Zeile)

# Datum & Uhrzeit
DATUM=`date +"%A, %e %B %Y"`

# Hostname
HOSTNAME=`hostname -f`

# letzter Login
LAST1=`last -2 -a | awk 'NR==2{print $3}'`	# Wochentag
LAST2=`last -2 -a | awk 'NR==2{print $5}'`	# Tag
LAST3=`last -2 -a | awk 'NR==2{print $4}'`	# Monat
LAST4=`last -2 -a | awk 'NR==2{print $6}'`	# Uhrzeit
LAST5=`last -2 -a | awk 'NR==2{print $10}'`	# Remote-Computer

# Uptime
UP0=`cut -d. -f1 /proc/uptime`
UP1=$(($UP0/86400))		# Tage
UP2=$(($UP0/3600%24))		# Stunden
UP3=$(($UP0/60%60))		# Minuten
UP4=$(($UP0%60))		# Sekunden

# Durchschnittliche Auslasung
LOAD1=`cat /proc/loadavg | awk '{print $1}'`	# Letzte Minute
LOAD2=`cat /proc/loadavg | awk '{print $2}'`	# Letzte 5 Minuten
LOAD3=`cat /proc/loadavg | awk '{print $3}'`	# Letzte 15 Minuten

# Temperatur
TEMP=`vcgencmd measure_temp | cut -c "6-9"`

# Speicherbelegung
DISK1=`df -h | grep 'dev/root' | awk '{print $2}'`	# Gesamtspeicher
DISK2=`df -h | grep 'dev/root' | awk '{print $3}'`	# Belegt
DISK3=`df -h | grep 'dev/root' | awk '{print $4}'`	# Frei

# Arbeitsspeicher
RAM1=`free -h -o | grep 'Mem' | awk '{print $2}'`	# Total
RAM2=`free -h -o | grep 'Mem' | awk '{print $3}'`	# Used
RAM3=`free -h -o | grep 'Mem' | awk '{print $4}'`	# Free
RAM4=`free -h -o | grep 'Swap' | awk '{print $3}'`	# Swap used

# IP-Adressen ermitteln
if ( ifconfig | grep -q "eth0" ) ; then IP_LAN=`ifconfig eth0 | grep "inet Adresse" | cut -d ":" -f 2 | cut -d " " -f 1` ; else IP_LAN="---" ; fi ;
if ( ifconfig | grep -q "wlan0" ) ; then IP_WLAN=`ifconfig wlan0 | grep "inet Adresse" | cut -d ":" -f 2 | cut -d " " -f 1` ; else IP_WLAN="---" ; fi ;

echo "
\033[0;33m            .@.             \033[1;36m$DATUM\033[m
\033[0;33m         .:@\033[0;32m@@@\033[0;33m@:.
\033[0;33m      .:@\033[0;32m@'     '@\033[0;33m@:.       \033[0;37mHostname.: \033[1;33m$HOSTNAME\033[m
\033[0;33m  .::@\033[0;32m@'           '@\033[0;33m@::.   \033[0;37mL. Login.: $LAST1, $LAST2 $LAST3 $LAST4 von $LAST5
\033[0;33m.:@\033[0;32m@'                 '@\033[0;33m@:. \033[0;37mUptime...: $UP1 Tage, $UP2:$UP3 Stunden
\033[0;33m  @\033[0;32m@    .:@:' ':@:.    @\033[0;33m@
\033[0;33m  @\033[0;32m@                   @\033[0;33m@   \033[0;37mØ-Ausl...: $LOAD1 (1m) | $LOAD2 (5m) | $LOAD3 (15m)
\033[0;33m  @\033[0;32m@   .           .   @\033[0;33m@   \033[0;37mTemp.....: $TEMP °C
\033[0;33m  @\033[0;32m@   '@         @'   @\033[0;33m@   \033[0;37mSpeicher.: Gesamt: $DISK1 | Belegt: $DISK2 | Frei: $DISK3
\033[0;33m  @\033[0;32m@    '@@:,,,:@@'    @\033[0;33m@   \033[0;37mRAM (MB).: Gesamt: $RAM1 | Belegt: $RAM2 | Frei: $RAM3
\033[0;33m  @\033[0;32m@                   @\033[0;33m@
\033[0;33m  @\033[0;32m@@@@@@@@@@@@@@@@@@@@@\033[0;33m@   \033[0;37mIP-Adr...: LAN:  \033[1;35m$IP_LAN\033[m
\033[0;33m  '''''''''''''''''''''''
\033[m"

Synology

Im Synology-Forum gibt es mittlerweile einen Thread mit Anpassungen für die Synology DiskStation.

Nützliche Links

Eine Webseite, die die Formatierungsmöglichkeiten von bash ziemlich gut beschreibt:

Diskussionen und nette Beispiele sind hier zu finden:

An manchen Stellen wird beschrieben, wie der Text mittels Cron in die Datei /etc/motd geschrieben werden kann. Was jedoch meist unerwähnt bleibt ist, dass es sich dabei um eine reine Text-Datei handelt, die die Sonderzeichen zur Formatierung und farbigen Hervorhebung dann eben auch als Text ausgibt, was meiner Meinung nach etwas unschön aussieht.

ASCII-Art-Webseiten

ASCII-Converter

Sebastian

26 Comments

  1. Antworten Knut

    Hallo Sebastina,

    nettes HOWTO! Finde ich echt gut! Danke dafür!

    Ich habe leider ein kleines Problem.
    Er mir nicht die IP und die Temperatur an. Dazu gibt er mir noch das aus:
    /home/Knut/Skripts/welcome.sh: 36: /home/Knut/Skripts/welcome.sh: ifconfig: not found
    Ich fahre ein abgespeckte Raspbian (Minibian) auf meinem PI.
    Ich habe die welcome.sh erstellt. Sie hat die Rechte 731 und gehört root.
    Hast du vielleicht eine Idee?

    Beste Grüße
    Knut

    • Antworten Sebastian

      Hallo Knut,

      meines Wissens nach ist ifconfig kein Bestandteil von Minibian. Du könntest das mit dem Befehl ip addr show lösen, der hier im Prinzip das gleiche macht. Eventuell musst du dann die cut-Befehle etwas anpassen.
      Oder Du installierst die Wireless Tools: $ sudo apt-get install wireless-tools. Dann sollte der Befehl zur Verfügung stehen.

      Gruß,
      Sebastian

  2. Antworten Knut

    Hallo Sebastian,

    danke für deine Antwort. Ich habe gerade mal das Skript von Hand ausgeführt, nach dem der PI komplett hochgefahren ist. Nun wird alles richtig angezeigt und nichts fehlt. Hängt es vielleicht damit zusammen wann das Skript ausgeführt wird?

    Beste Grüße
    Knut

    • Antworten Sebastian

      Das Script wird in dem Moment ausgeführt, in dem Du Dich anmeldest. Es kann also theoretisch nicht daran liegen, dass irgendwelche Bibliotheken noch nicht geladen sind.
      Ich würde mal die Rechte prüfen, denn Du meldest Dich ja nicht als root an. Meine welcome.sh gehört pi und besitzt die Rechte 755.

  3. Antworten Knut

    Die Rechte waren schon auf 755, mein Fehler.
    Wie kann das Skript dann aber ifconfig ausführen ohne root rechte?
    Wenn ich das Skript wieder dem Benutzer „Knut“ zuschreibe, brauche ich sudo, sonst zeigt er mir keine IP an.

    • Antworten Sebastian

      ifconfig benötigt normalerweise keine erweiterten Rechte. Schau doch mal, ob Du $ /sbin/ifconfig ausführen kannst. Vielleicht fehlt /sbin nur in Deiner Pfadvariable. Wenn dem so ist, hast Du zwei Möglichkeiten: /sbin zur Pfadvariablen hinzufügen oder das Script um die Pfadangabe erweitern.
      Sollte ifconfig bei Dir nicht im Verzeichnis /sbinzu finden sein, kannst Du mit $ whereis ifconfig herausfinden, wo es sich befindet.

  4. Antworten Knut

    Danke Sebastian, genau das war`s! 🙂
    Ich habe im Skript den vollen Pfad /sbin/ifconig angeben und schon funktioniert`s.

    Mein zweites Problem, dass nicht die Temp. angezeigt wurd, habe ich jetzt auch gelöst.
    Dazu waren anfangs auch nur root Rechte nötig. Jetzt geht es auch ohne.
    Ich musste die Rechte von /dev/vchiq per chmod von 660 auf 666 setzen.

    Zu dem habe ich dein Skript noch um eine Zeile erweitert; mit der Uhrzeitangabe.
    ZEIT=`date +%H:%M:%S`
    Und die Zeitvariable $ZEIThabe ich unten vor das Datum gesetzt.

    Beste Grüße & Danke, für deine Hilfe!

  5. Antworten Manfred

    Falls vorsorglich ein anderer Benutzer als pi verwendet wird (z.B. USERXY in der Gruppe sudo !!), treten ggf. folgende Probleme auch bei Euch auf:
    1.) welcome.sh Script funktioniert nicht „Keine Berechtigung“
    ABHILFE das Script ausführbar machen mit:
    sudo +x /home/USERXY/welcome.sh
    2.) statt einer Zahl bei der Temperatur in Grad Celsius steht init
    ABHILFE:
    sudo usermod -aG video USERXY
    sudo reboot

    vgl.: https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=34076
    ACHTUNG: bei -aG ist das a sehr wichtig sonst ist der USERXY nicht mehr in der sudo Gruppe und das System gegebenenfalls Adminlos….
    3.) ASCII Bilder gleich mit ausgeben lassen
    nicht vergessen auf das Maskieren „Escapen“ bestimmter Zeichen z.B. `

    Nützlich bzgl. Farben: http://misc.flogisoft.com/bash/tip_colors_and_formatting

    System: Raspberry Pi 3 mit Aktualisierungen bis 2016-10-30

    @Sebastian: Tolle Seite!!! – Danke

    • Antworten hannes

      Hello,

      danke für das Tut.

      Habe aktuell dieses Problem:

      login as: pi
      pi@**password:
      Last login: Wed Jul 12 10:33:18 2017 from *.*.com
      -bash: /home/pi/welcome.sh: Permission denied

      Wie bekomm ich die MOTD nun korrekt angezeigt?

      Danke und Grüße

  6. Antworten cellemochum

    Toller Artikel! Leider funktioniert nicht alles wie beschrieben. Zum Beispiel existiert /etc/init.d/motd nicht. Die Parameter bei der grafischen Himbeere sind leider ebenso fehlerhaft (letzte beiden Zeilen). Im Einsatz: Raspbian Lite 4.14

    • Antworten Peter

      Meinst du die Ermittlung der IP-Adresse(n)?

      Habe dies so gelöst (Zeilen 44-46) unter Linux raspi 4.14.62-v7+

      # IP-Adressen ermitteln
      IP_LAN=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) ;
      IP_WLAN=$(/sbin/ip -o -4 addr list wlan0 | awk '{print $4}' | cut -d/ -f1) ;
      
    • Antworten Peter

      Meinst du das Ermitteln der IP-Adresse(n)?

      Ich habe die so gelöst unter Linux raspi 4.14.62-v7+

      # IP-Adressen ermitteln
      IP_LAN=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) ;
      IP_WLAN=$(/sbin/ip -o -4 addr list wlan0 | awk '{print $4}' | cut -d/ -f1) ;
      
  7. Antworten Bernd

    Die grafische Ausgabe, sprich die Umsetzung der Farbcodes, funktioniert bei mir nicht.
    Ich habe das Script unverändert ausgeführt:

    root@PiHole:~# bash test_motd.sh
    \033[1;32m   .~~.   .~~.    \033[1;36mSonntag, 19 August 2018
    \033[1;32m  '. \ ' ' / .'
    \033[1;31m   .~ .~~~..~.    \033[0;37mHostname......: \033[1;33mPiHole
    \033[1;31m  : .~.'~'.~. :   \033[0;37mLetzter Login.: Sun, 19 Aug 11:52 von 044__pc3
    \033[1;31m ~ (   ) (   ) ~  \033[0;37mUptime........: 7 Tage, 0:20 Stunden
    \033[1;31m( : '~'.~.'~' : ) \033[0;37mØ Auslastung..: 0.03 (1 Min.) | 0.03 (5 Min.) | 0.00 (15 Min.)
    \033[1;31m ~ .~ (   ) ~. ~  \033[0;37mTemperatur....: 41.9 °C
    \033[1;31m  (  : '~' :  )   \033[0;37mSpeicher......: Gesamt: 15G | Belegt: 2,7G | Frei: 12G
    \033[1;31m   '~ .~~~. ~'    \033[0;37mRAM (MB)......: Gesamt: 923M | Belegt: 823M | Frei: 99M | Swap: 0B
    \033[1;31m       '~'        \033[0;37mIP-Adressen...: LAN: \033[1;35m192.168.0.4\033[0;37m | WiFi: \033[1;35m
    \033[m
    root@PiHole:~#
    
      • Antworten Tobi

        Hallo. Erstmal tolle Anleitung von dir. Habe nur folgendes Problem:Wenn ich die Schritte genau so mache wie hier beschrieben bekomme ich beim ssh Aufruf folgende Meldung :/home/pi/welcome.sh: 12: /home/pi/welcome.sh: -2: not found
        awk: cannot open -2 (No such file or directory)
        /home/pi/welcome.sh: 4: /home/pi/welcome.sh: Syntax error: end of file unexpected (expecting „fi“)

        Kannst du mir hier helfen?

  8. Antworten varo.biker

    Hi Sebastian,

    deine Anleitung hat mir echt geholfen. So als Newbi hat man seine Probleme. Auch ich hatte die Probleme mit der IP-Adresse wie Peter und seine Problemlösung war auch meine.

    Ich habe aber noch ein anderes Problem gehabt., Und zwar bekam ich immer Fehlermeldungen bei der Auswertung des Arbeitsspeichers. Nachdem ich die Codezeile so:

    # Arbeitsspeicher
    RAM1=`free -h –giga | grep ‚Mem‘ | awk ‚{print $2}’` # Total
    RAM2=`free -h –giga | grep ‚Mem‘ | awk ‚{print $3}’` # Used
    RAM3=`free -h –giga | grep ‚Mem‘ | awk ‚{print $4}’` # Free
    RAM4=`free -h –giga | grep ‚Swap’| awk ‚{print $3}’` # Swap used

    angepasst hatte, waren die Fehlermeldungen verschwunden.

    Was ich nicht weg bekomme ist das :

    Linux raspberrypi 4.1.13+ #826 PREEMPT…

    Bei mir gibt es nur eine kmotd und der Code sieht ganz anders aus. Vielleicht hast du da noch einen Tipp für mich.

    Beste Grüße

  9. Antworten nbsneakers

    Hallo, bei mir hat die Anzeige der Ip Adressen nicht funktioniert und der Ram Speicher wurde nicht ausgegeben. ich habe es daher ein klein wenig für meine Bedürfnisse angepasst. Vielen Dank für das Grundgerüst.

    #!/bin/sh
    # dynamische MOTD
    # Aufruf in /etc/profile (letzte Zeile)

    # Datum & Uhrzeit
    DATUM=`date +"%A, %e %B %Y"`

    # Hostname
    HOSTNAME=`hostname -f`

    # letzter Login
    LAST1=`last -2 -a | awk 'NR==2{print $3}'` # Wochentag
    LAST2=`last -2 -a | awk 'NR==2{print $5}'` # Tag
    LAST3=`last -2 -a | awk 'NR==2{print $4}'` # Monat
    LAST4=`last -2 -a | awk 'NR==2{print $6}'` # Uhrzeit
    LAST5=`last -2 -a | awk 'NR==2{print $10}'` # Remote-Computer

    # Uptime
    UP0=`cut -d. -f1 /proc/uptime`
    UP1=$(($UP0/86400)) # Tage
    UP2=$(($UP0/3600%24)) # Stunden
    UP3=$(($UP0/60%60)) # Minuten
    UP4=$(($UP0%60)) # Sekunden

    # Durchschnittliche Auslasung
    LOAD1=`cat /proc/loadavg | awk '{print $1}'` # Letzte Minute
    LOAD2=`cat /proc/loadavg | awk '{print $2}'` # Letzte 5 Minuten
    LOAD3=`cat /proc/loadavg | awk '{print $3}'` # Letzte 15 Minuten

    # Temperatur
    TEMP=`vcgencmd measure_temp | cut -c "6-9"`

    # Speicherbelegung
    DISK1=`df -h | grep 'dev/root' | awk '{print $2}'` # Gesamtspeicher
    DISK2=`df -h | grep 'dev/root' | awk '{print $3}'` # Belegt
    DISK3=`df -h | grep 'dev/root' | awk '{print $4}'` # Frei

    # Arbeitsspeicher
    RAM1=`free --mega | grep 'Mem' | awk '{print $2}'` # Total
    RAM2=`free --mega | grep 'Mem' | awk '{print $3}'` # Used
    RAM3=`free --mega | grep 'Mem' | awk '{print $4}'` # Free
    RAM4=`free --mega | grep 'Swap' | awk '{print $3}'` # Swap used
    RAM5=`free --mega | grep 'Swap' | awk '{print $2}'` # Swap total
    RAM6=`free --mega | grep 'Swap' | awk '{print $3}'` # Swap used
    RAM7=`free --mega | grep 'Swap' | awk '{print $4}'` # Swap free
    RAMARM=`vcgencmd get_mem arm` # ARM MEM
    RAMGPU=`vcgencmd get_mem gpu` # GPU MEM

    # IP-Adressen ermitteln
    if ( ifconfig | grep -q "eth0" ) ; then IP_LAN=`ip addr show eth0 | grep -vw "inet6" | grep "global" | grep -w "inet" | cut -d/ -f1 | awk '{ print $2 }'` ; else IP_LAN="---" ; fi ;
    if ( ifconfig | grep -q "wlan0" ) ; then IP_WLAN=`ip addr show wlan0 | grep -vw "inet6" | grep "global" | grep -w "inet" | cut -d/ -f1 | awk '{ print $2 }'` ; else IP_WLAN="---" ; fi ;

    echo "
    \033[1;32m .~~. .~~. \033[1;36m$DATUM
    \033[1;32m '. \ ' ' / .'
    \033[1;31m .~ .~~~..~. \033[0;37mHostname......: \033[1;33m$HOSTNAME
    \033[1;31m : .~.'~'.~. : \033[0;37mLetzter Login.: $LAST1, $LAST2 $LAST3 $LAST4 von $LAST5
    \033[1;31m ~ ( ) ( ) ~ \033[0;37mUptime........: $UP1 Tage, $UP2:$UP3 Stunden
    \033[1;31m( : '~'.~.'~' : ) \033[0;37mØ Auslastung..: $LOAD1 (1 Min.) | $LOAD2 (5 Min.) | $LOAD3 (15 Min.)
    \033[1;31m ~ .~ ( ) ~. ~ \033[0;37mTemperatur....: $TEMP °C
    \033[1;31m ( : '~' : ) \033[0;37mSpeicher......: Gesamt: $DISK1 | Belegt: $DISK2 | Frei: $DISK3
    \033[1;31m '~ .~~~. ~' \033[0;37mRAM (MB)......: Gesamt: $RAM1 | Belegt: $RAM2 | Frei: $RAM3
    \033[1;31m '~' \033[0;37mexterner Swap.: Gesamt: $RAM5 | Belegt: $RAM6 | Frei: $RAM7
    \033[1;31m \033[0;37mRAM ARM.......: konfiguriert: $RAMARM
    \033[1;31m \033[0;37mRAM GPU.......: konfiguriert: $RAMGPU
    \033[1;31m \033[0;37mIP-Adressen...: LAN: \033[1;35m$IP_LAN\033[0;37m | WiFi: \033[1;35m$IP_WLAN
    \033[m"

  10. Antworten Skipper

    Hallo..

    Vielen Dank an nbsneakers, Du hast auch mein IP-Adressen Problem gelöst 😉 Allerdings zeigt er bei meinem WLAN adapter nichts an (WLAN ist offline, sollte zumindest die „—“ drin stehen haben, aber da ist wirklich NIX)

    Des Weiteren würde mich interessieren, wie ich die Temperatur farbig & dynamisch darstellen kann..
    z.B. unter 30°C grün, 3040°C rot… (Werte sind fiktiv soll nur dem Verständnis dienen)

    Vielen Dank..
    LG Skipper

    • Antworten Skipper

      Verflixt… Die Spitzen klammer sind als Code interpretiert worden…
      Also nochmal in Worten:
      unter 30°C grün
      zwischen 30 & 40°C orange
      ab 40°C rot..

      LG Skipper

  11. Antworten Holger

    Hallo Sebastian,
    es ist zwar schon eine lange Zeit kein Eintrag zu deiner tollen Arbeit geschrieben worden, aber ich habe dieses Script „SSH-Login-Nachricht anpassen“ auch umgesetzt. Leider habe ich folgende Probleme bei bei Linux raspberrypi 5.15.32-v7+

    1.) die Motd-Datei unter /etc/init.d/motd existiert nicht und somit kann ich die Zeile 1 nicht löschen!
    2.) der RAM-Speicher wird nicht angezeigt

    Vielen Dank für deine Mühe

    Holger

    • Antworten Peter

      @Holger
      zu 2.
      Poste mal das Ergebnis von „free“.
      Dann noch was du unter „# Arbeitsspeicher“ in deinem Script stehen hast.

      • Antworten Holger

        Hallo Peter,
        Danke für deine Hilfe!

        Das Ergebnis von free:
        pi@raspberrypi:~ $ free
        gesamt benutzt frei gemns. Puffer/Cache verf�gbar
        Speicher: 945292 175288 321952 11092 448052 705236
        Swap: 102396 0 102396

        Script:
        # Arbeitsspeicher
        RAM1=`free -m | grep ‚Mem‘ | awk ‚{print $2}’` # Total
        RAM2=`free -m | grep ‚Mem‘ | awk ‚{print $3}’` # Used
        RAM3=`free -m | grep ‚Mem‘ | awk ‚{print $4}’` # Free
        RAM4=`free -m | grep ‚Swap‘ | awk ‚{print $3}’` # Swap used

        Gruß
        Holger

        • Antworten Holger

          Zu dem Script und den Zeilen für die Auslastung des Arbeitsspeicher

          Neben ‚free-m‘ habe ich auch ‚free –mega‘ oder ‚free -h –giga‘ probiert!
          Die Auslastung wurde nie angezeigt.

          • Marius

            grep nicht auf „Mem“, sondern ‚Speicher‘ bei DE locale

            # Arbeitsspeicher
            RAM1=`free -h –mega | grep ‚Speicher‘ | awk ‚{print $2}’` # Total
            RAM2=`free -h –mega | grep ‚Speicher‘ | awk ‚{print $3}’` # Used
            RAM3=`free -h –mega | grep ‚Speicher‘ | awk ‚{print $4}’` # Free
            RAM4=`free -h –mega | grep ‚Swap‘ | awk ‚{print $3}’` # Swap used

  12. Antworten Peter Robmos

    Das ist das schönste an Linux wenn Beispielcode nicht funktioniert und auch die Hinweise der anderen Kommentare nicht zum Ziel führen und RAM nicht angezeigt wird und auch die IP Adresse leer bleibt.

    Rasb Pi OS

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht.

WordPress Cookie Hinweis von Real Cookie Banner