====Message of the Day for the Raspberry Pi==== Written in pure Bash. No need to install any package. Tested with the Arch Linux ARM and Raspbian distributions. Download and save the motd.sh bash script in the Raspberry Pi. Remember to add execution permissions and change the owner: $ sudo chown root:root motd.sh $ sudo chmod +x motd.sh The following steps may vary depending on the OS. Arch Linux ARM is assumed. Autoexecute the script when the user logs in. There are multiple locations from where you can start the motd.sh script, for example using the /etc/profile. Save the motd.sh script in the directory /etc/profile.d and it will be executed after the login. Remove the default MOTD. It is located in /etc/motd. $ sudo rm /etc/motd Remove the "last login" information. Disable the PrintLastLog option from the sshd service. Edit the /etc/ssh/sshd_config file and uncomment the line #PrintLastLog yes: $ sudo nano /etc/ssh/sshd_config Before: #PrintLastLog yes After: PrintLastLog no Note: If you don't see the degree Celsius character correctly (º) make sure you have enabled a UTF8 locale (Arch Linux locales). Script: #!/bin/bash clear function color (){ echo "\e[$1m$2\e[0m" } function extend (){ local str="$1" let spaces=60-${#1} while [ $spaces -gt 0 ]; do str="$str " let spaces=spaces-1 done echo "$str" } function center (){ local str="$1" let spacesLeft=(78-${#1})/2 let spacesRight=78-spacesLeft-${#1} while [ $spacesLeft -gt 0 ]; do str=" $str" let spacesLeft=spacesLeft-1 done while [ $spacesRight -gt 0 ]; do str="$str " let spacesRight=spacesRight-1 done echo "$str" } function sec2time (){ local input=$1 if [ $input -lt 60 ]; then echo "$input seconds" else ((days=input/86400)) ((input=input%86400)) ((hours=input/3600)) ((input=input%3600)) ((mins=input/60)) local daysPlural="s" local hoursPlural="s" local minsPlural="s" if [ $days -eq 1 ]; then daysPlural="" fi if [ $hours -eq 1 ]; then hoursPlural="" fi if [ $mins -eq 1 ]; then minsPlural="" fi echo "$days day$daysPlural, $hours hour$hoursPlural, $mins minute$minsPlural" fi } borderColor=35 headerLeafColor=32 headerRaspberryColor=31 greetingsColor=36 statsLabelColor=33 borderLine="━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" borderTopLine=$(color $borderColor "┏$borderLine┓") borderBottomLine=$(color $borderColor "┗$borderLine┛") borderBar=$(color $borderColor "┃") borderEmptyLine="$borderBar $borderBar" # Header header="$borderTopLine\n$borderEmptyLine\n" header="$header$borderBar$(color $headerLeafColor " .~~. .~~. ")$borderBar\n" header="$header$borderBar$(color $headerLeafColor " '. \ ' ' / .' ")$borderBar\n" header="$header$borderBar$(color $headerRaspberryColor " .~ .~~~..~. _ _ ")$borderBar\n" header="$header$borderBar$(color $headerRaspberryColor " : .~.'~'.~. : ___ ___ ___ ___| |_ ___ ___ ___ _ _ ___|_| ")$borderBar\n" header="$header$borderBar$(color $headerRaspberryColor " ~ ( ) ( ) ~ | _| .'|_ -| . | . | -_| _| _| | | | . | | ")$borderBar\n" header="$header$borderBar$(color $headerRaspberryColor " ( : '~'.~.'~' : ) |_| |__,|___| _|___|___|_| |_| |_ | | _|_| ")$borderBar\n" header="$header$borderBar$(color $headerRaspberryColor " ~ .~ ( ) ~. ~ |_| |___| |_| ")$borderBar\n" header="$header$borderBar$(color $headerRaspberryColor " ( : '~' : ) ")$borderBar\n" header="$header$borderBar$(color $headerRaspberryColor " '~ .~~~. ~' ")$borderBar\n" header="$header$borderBar$(color $headerRaspberryColor " '~' ")$borderBar" me=$(whoami) # Greetings greetings="$borderBar$(color $greetingsColor "$(center "Welcome back, $me!")")$borderBar\n" greetings="$greetings$borderBar$(color $greetingsColor "$(center "$(date +"%A, %d %B %Y, %T")")")$borderBar" # System information read loginFrom loginIP loginDate <<< $(last $me --time-format iso -2 | awk 'NR==2 { print $2,$3,$4 }') # TTY login if [[ $loginDate == - ]]; then loginDate=$loginIP loginIP=$loginFrom fi if [[ $loginDate == *T* ]]; then login="$(date -d $loginDate +"%A, %d %B %Y, %T") ($loginIP)" else # Not enough logins login="None" fi label1="$(extend "$login")" label1="$borderBar $(color $statsLabelColor "Last Login....:") $label1$borderBar" uptime="$(sec2time $(cut -d "." -f 1 /proc/uptime))" uptime="$uptime ($(date -d "@"$(grep btime /proc/stat | cut -d " " -f 2) +"%d-%m-%Y %H:%M:%S"))" label2="$(extend "$uptime")" label2="$borderBar $(color $statsLabelColor "Uptime........:") $label2$borderBar" label3="$(extend "$(free -m | awk 'NR==2 { printf "Total: %sMB, Used: %sMB, Free: %sMB",$2,$3,$4; }')")" label3="$borderBar $(color $statsLabelColor "Memory........:") $label3$borderBar" label4="$(extend "$(df -h ~ | awk 'NR==2 { printf "Total: %sB, Used: %sB, Free: %sB",$2,$3,$4; }')")" label4="$borderBar $(color $statsLabelColor "Home space....:") $label4$borderBar" label5="$(extend "$(/opt/vc/bin/vcgencmd measure_temp | cut -c "6-9")ºC")" label5="$borderBar $(color $statsLabelColor "Temperature...:") $label5$borderBar" stats="$label1\n$label2\n$label3\n$label4\n$label5" # Print motd echo -e "$header\n$borderEmptyLine\n$greetings\n$borderEmptyLine\n$stats\n$borderEmptyLine\n$borderBottomLine"