▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
   ██                                                                       ██
  █▌                    -   CUSTOMIZE YOUR SHELL MOTD  -                     █▌
 █▌                                                                           █▌
 █                                                                            ▐▌
 █ When users login to their shell account on a Debian they will be first     ▐▌
 █ greeted with uname, followed by the MOTD (message of the day), and then    ▐▌
 █ mail if they have any and then the last login information.                 ▐▌
 █ This tutorial will show you how to remove or change those and add an       ▐▌
 █ informative system information and some fun stuff if you choice like       ▐▌
 █ weather and a a daily random quote or fortune.                             ▐▌
 █                                                                            ▐▌
 █ Debian's default MOTD:                                                     ▐▌
 █                                                                            ▐▌
 █ Linux yourserver.com 1.2.34-5-678 #1 Wed Nov 4 20:19:07 UTC 2009 i686      ▐▌
 █                                                                            ▐▌
 █ The programs included with the Debian GNU/Linux system are free software;  ▐▌
 █ the exact distribution terms for each program are described in the         ▐▌
 █ individual files in /usr/share/doc/*/copyright.                            ▐▌
 █                                                                            ▐▌
 █ Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent          ▐▌
 █ permitted by applicable law.                                               ▐▌
 █                                                                            ▐▌
 █ You have mail.                                                             ▐▌
 █ Last login: Sat Apr 24 07:30:23 2010 from 123.456.78.90                    ▐▌
 █                                                                            ▐▌
 █ mewbies@whatever:~$                                                        ▐▌
 █                                                                            ▐▌
 █ ┼▬───────────────────────────────── ∙∙ ──────────────────────────────────▬┼▐▌
 █                                                                            ▐▌
 █ This is now my MOTD:                                                       ▐▌
 █                                                                            ▐▌
 █ You have mail.                                                             ▐▌
 █                                         _     _                            ▐▌
 █                                        | |   (_)                           ▐▌
 █                 _ __ ___   _____      _| |__  _  ___  ___                  ▐▌
 █                | '_ ` _ \ / _ \ \ /\ / / '_ \| |/ _ \/ __|                 ▐▌
 █                | | | | | |  __/\ V  V /| |_) | |  __/\__ \                 ▐▌
 █                |_| |_| |_|\___| \_/\_/ |_.__/|_|\___||___/                 ▐▌
 █                                                                            ▐▌
 █ Last Login....: Mon Jun 14 02:59:55 from 123.456.78.90                     ▐▌
 █ Uptime........: 50days 15hours 51minutes 52seconds                         ▐▌
 █ Load..........: 0.02 (1minute) 0.01 (5minutes) 0.00 (15minutes)            ▐▌
 █ Memory MB.....: 488 Used: 457  Free: 30  Free Cached: 295  Swap In Use: 160▐▌
 █ Temperature...: Core0: +91.4°F  M/B: +98.6°F  CPU: +89.6°F  Disk: 98°F     ▐▌
 █ Disk Usage....: You're using 2MB in /home/mewbies                          ▐▌
 █ SSH Logins....: There are currently 3 users logged in.                     ▐▌
 █ Processes.....: You're running 4 which makes a total of 84 running         ▐▌
 █ Weather.......: 58°F, Cloudy                                               ▐▌
 █                                                                            ▐▌
 █ ::::::::::::::::::::::::::::::::-STATEMENT-::::::::::::::::::::::::::::::::▐▌
 █ This is a private system that you are not to give out access to anyone     ▐▌
 █                     without permission from an admin!                      ▐▌
 █  ________________________________________                                  ▐▌
 █ / You will be Told about it Tomorrow. Go \                                 ▐▌
 █ \ Home and Prepare Thyself.              /                                 ▐▌
 █  ----------------------------------------                                  ▐▌
 █        \   ,__,                                                            ▐▌
 █         \  (oo)____                                                        ▐▌
 █            (__)    )\                                                      ▐▌
 █               ||--|| *                                                     ▐▌
 █ mewbies@whatever:~$                                                        ▐▌
 █                                                                            ▐▌
 █ ┼▬───────────────────────────────── ∙∙ ──────────────────────────────────▬┼▐▌
 
   mewbies MOTD
   Click on the image for the actual size.
█ ▐▌ █ Tip: Create a new user, or use an existing one, that isn't in the *admin ▐▌ █ group, for testing purposes - this way you don't need to exit root, ▐▌ █ logout, login each time to view the changes as we go. ▐▌ █ *The reason to test using a user that isn't in the admin group is that ▐▌ █ when a user logins, the cmds that are on the MOTD script are actually being▐▌ █ issued by the user, so if you have a cmd that isn't allowed for a user to ▐▌ █ issue MOTD will show only errors. (All the statements above on my MOTD, at ▐▌ █ least for my setup, are available to all users.) ▐▌ █ ▐▌ █ REMOVE DEFAULT MOTD: ▐▌ █ ```````````````````` ▐▌ █ To remove the lines or change the MOTD section which is "The programs ▐▌ █ included ... by applicable law." you need to (commands are in bold): ▐▌ █ su ▐▌ █ pico /etc/motd ▐▌ █ ▐▌ █ Remove everything, as I have done (or alter it to your liking). ▐▌ █ ▐▌ █ Log back in to view the changes. ▐▌ █ ▐▌ █ This change though is only temporary - next time the box reboots the MOTD ▐▌ █ will be restored back to its previous state by the bootmisc.sh, which is ▐▌ █ here /etc/init.d/bootmisc.sh, as it re-writes back to /var/run/motd the ▐▌ █ contents of /etc/motd.tail - etc/motd is actually a symbolic link ▐▌ █ /var/run/motd. ▐▌ █ (bootmisc.sh contains: ▐▌ █ # Update motd ▐▌ █ uname -snrvm > /var/run/motd ▐▌ █ [ -f /etc/motd.tail ] && cat /etc/motd.tail >> /var/run/motd ) ▐▌ █ ▐▌ █ So to make this change permanent, you need to remove everything (or to ▐▌ █ your liking) also from: ▐▌ █ pico /etc/motd.tail ▐▌ █ ▐▌ █ REMOVE OR MODIFY UNAME: ▐▌ █ ``````````````````````` ▐▌ █ If you want to remove the 'uname' (print system information) - the first ▐▌ █ line printed out when you login, similar to: ▐▌ █ Linux yourserver.com 1.2.34-5-678 #1 Wed Nov 4 20:19:07 UTC 2009 i686 ▐▌ █ Do this: ▐▌ █ su ▐▌ █ pico /etc/init.d/bootmisc.sh ▐▌ █ ▐▌ █ Change this line, as I have done: ▐▌ █ uname -snrvm > /var/run/motd ▐▌ █ To: ▐▌ █ # uname -snrvm > /var/run/motd ▐▌ █ ▐▌ █ You will need to reboot for the uname changes to take place; this is the ▐▌ █ only modification we'll make that requires a reboot to view the changes: ▐▌ █ reboot ▐▌ █ ▐▌ █ Next time you login you will only see: ▐▌ █ You have new mail. ▐▌ █ Last login: Sat Apr 24 07:30:23 2010 from 12.34.56.78 ▐▌ █ ▐▌ █ Or JFYI (not needed for our MOTD) if you want the uname to contain ▐▌ █ different information, view options here: ▐▌ █ man uname ▐▌ █ q ▐▌ █ ▐▌ █ You can view the options by running the cmd, for example: ▐▌ █ uname -o ▐▌ █ ▐▌ █ Output would be similar to: ▐▌ █ GNU/Linux ▐▌ █ ▐▌ █ Then edit the options: ▐▌ █ su ▐▌ █ pico /etc/init.d/bootmisc.sh ▐▌ █ ▐▌ █ Change this line: ▐▌ █ uname -snrvm > /var/run/motd ▐▌ █ To, for example: ▐▌ █ uname -o > /var/run/motd ▐▌ █ ▐▌ █ LAST LOGIN: ▐▌ █ ``````````` ▐▌ █ I do not recommend removing the 'Last login' statement because if someone ▐▌ █ did gain access to your account you'll see an IP that isn't yours (if they ▐▌ █ didn't cover their tracks that is). So what I have done is removed it from ▐▌ █ the standard MOTD and added it to our MOTD script below so that visually ▐▌ █ it looks better with the style I have. If you do want to remove it: ▐▌ █ pico /etc/ssh/sshd_config ▐▌ █ Find this: PrintLastLog yes ▐▌ █ Change to: PrintLastLog no ▐▌ █ ▐▌ █ Restart your ssh server for the changes to take affect: ▐▌ █ /etc/init.d/ssh restart ▐▌ █ ▐▌ █ NOTES: ▐▌ █ `````` ▐▌ █ 1. You don't need to put everything I have above on my MOTD - I just added ▐▌ █ a variety of information to give some ideas. ▐▌ █ In our MOTD script if you want to remove something it will be in two ▐▌ █ places; the '# MOTD script' section (that issues the cmds) and the ▐▌ █ '# * Print Results' section that, well as it says prints the results of ▐▌ █ the cmds :). ▐▌ █ ▐▌ █ CUSTOMIZE YOUR MOTD: ▐▌ █ ```````````````````` ▐▌ █ PREREQUISITES: ▐▌ █ 1. TCLSH: View if you have tclsh installed: ▐▌ █ dpkg -l | grep tcl ▐▌ █ ▐▌ █ Reply if you do have it installed will be similar to: ▐▌ █ tcl8.5 8.5.3-2 Tcl (the Tool Command Language) v8.5 - run-t ▐▌ █ tcl8.5-dev 8.5.3-2 Tcl (the Tool Command Language) v8.5 - devel ▐▌ █ ▐▌ █ If not: ▐▌ █ su ▐▌ █ aptitude install tcl ▐▌ █ ▐▌ █ 2. HDDTEMP: If you want temperature readings for your hard drive, using ▐▌ █ 'hddtemp', your disk must have SMART technology (most do for the past few ▐▌ █ years I've read). ▐▌ █ (If you want to know more about hddtemp: man hddtemp) ▐▌ █ Do this: ▐▌ █ apt-get install hddtemp ▐▌ █ ▐▌ █ Select <Yes> to all the questions asked by using your arrow or tab key ▐▌ █ then hitting Enter. You can easily modify these settings later if needed. ▐▌ █ (You'll be asked 3 questions: to run as a daemon, to listen on local IP, ▐▌ █ and what port). After it is finished it will reply similar to: ▐▌ █ Starting disk temperature monitoring daemon: hddtemp: /dev/hda. ▐▌ █ ▐▌ █ It will run as a daemon (run levels 2-5). ▐▌ █ To modify any of these settings: ▐▌ █ dpkg-reconfigure hddtemp ▐▌ █ or ▐▌ █ pico /etc/default/hddtemp ▐▌ █ ▐▌ █ Now test hddtemp cmd: ▐▌ █ hddtemp -v ▐▌ █ If you receive 'hddtemp: command not found' run this: ▐▌ █ dpkg-reconfigure hddtemp ▐▌ █ answer Yes to all ▐▌ █ Then try it again: ▐▌ █ hddtemp -v ▐▌ █ ▐▌ █ Now you need to work out the correct cmd for your drive and the output ▐▌ █ that you would like. Once you have it make a note of the cmd for our MOTD ▐▌ █ script. I have the output to be only, for example, 35°C. ▐▌ █ hddtemp /dev/hda ▐▌ █ Or yours might be: hddtemp /dev/sda ▐▌ █ Output will be similar to: ▐▌ █ /dev/hda: WDC WD400BB-22JHC0: 35°C ▐▌ █ ▐▌ █ Replace the 'a' in hda or sda with the drive letter you want hddtemp to ▐▌ █ report on. ▐▌ █ Some examples of hard drive names: ▐▌ █ /dev/hda master device on primary IDE channel ▐▌ █ /dev/hdb slave device on primary IDE channel ▐▌ █ /dev/hdc master device on secondary IDE channel ▐▌ █ /dev/hdd slave device on secondary IDE channel ▐▌ █ /dev/sda first SCSI hard drive ▐▌ █ /dev/sdb second SCSI hard drive ▐▌ █ ▐▌ █ So to shorten the reply to be only '35°C' count the characters from the ▐▌ █ beginning of the reply until where you want it to reply. Using my example ▐▌ █ output: /dev/hda: WDC WD400BB-22JHC0: 35°C ▐▌ █ the cmd would be, to reply only the 31st - 35th characters: ▐▌ █ hddtemp /dev/hda | cut -c 31-35 ▐▌ █ Try the cmd yourself to understand what I mean, replacing disk name, hda, ▐▌ █ with yours. ▐▌ █ ▐▌ █ Or to display temperature in Fahrenheit: ▐▌ █ hddtemp /dev/hda -uf | cut -c 31-35 ▐▌ █ ▐▌ █ Or to shorten the reply to temperature only e.g. 35: ▐▌ █ hddtemp -n /dev/hda ▐▌ █ ▐▌ █ 3. LM-SENSORS: If you want temperature readings for your other ▐▌ █ devices, amongst other information, I used lm-sensors. ▐▌ █ (If you want to know more about lm-sensors: man lm-sensors press q to quit)▐▌ █ apt-get install lm-sensors ▐▌ █ After install is complete: ▐▌ █ sensors-detect ▐▌ █ Hit enter key when prompted YES/No questions to select the default answer ▐▌ █ for all. (You can easily modify these by running sensors-detect again if ▐▌ █ needed later.) ▐▌ █ ▐▌ █ If sensors-detect hangs on a sensor; make a note which one, then press ▐▌ █ Ctrl+C to quit sensors-detect. ▐▌ █ Then run sensors-detect again and answer No to the one that it hung on. ▐▌ █ ▐▌ █ At the end you'll have been prompted to add lines to your /etc/modules. ▐▌ █ ▐▌ █ This is the reply I received: ▐▌ █ To load everything that is needed, add this to /etc/modules: ▐▌ █ #----cut here---- ▐▌ █ # Chip drivers ▐▌ █ w83627hf ▐▌ █ k8temp ▐▌ █ #----cut here---- ▐▌ █ ▐▌ █ Now you need to add the output that it replied with, as shown above: ▐▌ █ pico /etc/modules ▐▌ █ Mine has this: ▐▌ █ loop ▐▌ █ ▐▌ █ Changed it to, using example above, (add your own output): ▐▌ █ loop ▐▌ █ # Chip drivers ▐▌ █ w83627hf ▐▌ █ k8temp ▐▌ █ ▐▌ █ Now start it: ▐▌ █ /etc/init.d/module-init-tools ▐▌ █ Output: Loading kernel modules...done. ▐▌ █ ▐▌ █ JFYI: ▐▌ █ /etc/init.d/module-init-tools start ▐▌ █ /etc/init.d/module-init-tools stop ▐▌ █ /etc/init.d/module-init-tools restart ▐▌ █ /etc/init.d/module-init-tools force-reload ▐▌ █ By the way it has a run level 'S' - it will run at start up on its own. ▐▌ █ ▐▌ █ Now to load the modules that you have added above to /etc/modules, ▐▌ █ changing the module name below to your own, for the example above, I ▐▌ █ would run: ▐▌ █ modprobe w83627hf ▐▌ █ modprobe k8temp ▐▌ █ And then to update the modules (previously known as update-modules): ▐▌ █ depmod -a ▐▌ █ ▐▌ █ After the update is finished, test lm-sensors by running: ▐▌ █ sensors ▐▌ █ ▐▌ █ The output should be similar to: ▐▌ █ k8temp-pci-00c3 ▐▌ █ Adapter: PCI adapter ▐▌ █ Core0 Temp: +29.0°C ▐▌ █ ▐▌ █ w83627thf-isa-0290 ▐▌ █ Adapter: ISA adapter ▐▌ █ VCore: +1.43 V (min = +0.70 V, max = +1.87 V) ▐▌ █ +12V: +11.98 V (min = +1.95 V, max = +6.02 V) ALARM ▐▌ █ +3.3V: +3.36 V (min = +0.00 V, max = +1.58 V) ALARM ▐▌ █ +5V: +4.99 V (min = +1.81 V, max = +3.84 V) ALARM ▐▌ █ -12V: -11.46 V (min = -14.91 V, max = -4.38 V) ▐▌ █ V5SB: +5.05 V (min = +2.85 V, max = +0.43 V) ALARM ▐▌ █ VBat: +3.49 V (min = +3.62 V, max = +0.02 V) ALARM ▐▌ █ fan1: 2721 RPM (min = 8035 RPM, div = 2) ALARM ▐▌ █ CPU Fan: 3054 RPM (min = -1 RPM, div = 2) ALARM ▐▌ █ fan3: 0 RPM (min = 168750 RPM, div = 2) ALARM ▐▌ █ M/B Temp: +36.0°C (high = +5.0°C, hyst = +0.0°C) ALARM sensor = ▐▌ █ CPU Temp: +30.5°C (high = +60.0°C, hyst = +55.0°C) sensor = ▐▌ █ temp3: +65.5°C (high = +60.0°C, hyst = +55.0°C) ALARM sensor = ▐▌ █ cpu0_vid: +0.000 V ▐▌ █ beep_enable:enabled ▐▌ █ ▐▌ █ The cmd I use on our MOTD script to report only the temperature for the ▐▌ █ Core0, M/B (mother board) and the CPU is: ▐▌ █ sensors -f | grep Temp ▐▌ █ To alter that output so that it is like my MOTD above, I've done that in ▐▌ █ the MOTD script itself as you'll see soon. ▐▌ █ If you want the output to be in Celsius: ▐▌ █ sensors| grep Temp ▐▌ █ ▐▌ █ 4. WEATHER: ▐▌ █ If you would like the Weather report on your MOTD like I have above, ▐▌ █ you'll need to install curl. To view if you have it installed already: ▐▌ █ dpkg -l | grep curl ▐▌ █ If you do output will be similar to: ▐▌ █ curl 7.18.2-8lenny4 Get a file from an HTTP, HTTPS or FTP server ▐▌ █ libcurl3 7.18.2-8lenny4 Multi-protocol file transfer library (OpenSS ▐▌ █ ▐▌ █ If you don't have either: ▐▌ █ aptitude install curl libcurl3 ▐▌ █ ▐▌ █ Next you need to find the correct 'location code' for the area you want ▐▌ █ the weather to report on. Go HERE, accuweather.com, enter the area you ▐▌ █ want, click SET, then make a note of the code at the end of the URL. For ▐▌ █ example enter: Nizhny Novgorod, Russia . The URL they will provide you ▐▌ █ with is: http://rss.accuweather.com/rss/liveweather_rss.asp?metric=0&locCode=ASI|RU|RS055|NIZHNY NOVGOROD █ The location code/locCode is: ASI|RU|RS055|NIZHNY NOVGOROD ▐▌ █ Note that there is a space in the code - replace any spaces in the code ▐▌ █ with: %20. So for my example it would be: ASI|RU|RS055|NIZHNY%20NOVGOROD ▐▌ █ ▐▌ █ Now to create a script to gather the weather data in a format that you ▐▌ █ want, with thanks to the codes HERE by fflarex & fukawi2, do this: ▐▌ █ Find the location of your sh: ▐▌ █ which sh ▐▌ █ Output will be the location of your sh, for example my output is: ▐▌ █ /bin/sh ▐▌ █ Or your output might be: ▐▌ █ /usr/bin/sh ▐▌ █ ▐▌ █ Then paste in the script below changing three things: ▐▌ █ 1. '/bin/sh' change this to the location of your sh if it's not /bin/sh ▐▌ █ 2. Output in Celsius change 0 to 1 here: METRIC=0 # 0 for F, 1 for C ▐▌ █ 3. Fill in your location code here: LOCCOD="" ▐▌ █ For example: LOCCOD="ASI|RU|RS055|NIZHNY%20NOVGOROD" ▐▌ █ ▐▌ █ pico /usr/share/weather.sh ▐▌ #!/bin/sh METRIC=0 # 0 for F, 1 for C # Find your own code at the end of the url here http://www.accuweather.com/rss-center.asp # If code has a space; replace with %20 LOCCOD="" #Example: ASI|RU|RS055|NIZHNY%20NOVGOROD if [ -z $1 ] && [ -x $LOCCOD ] ; then echo echo "USAGE: $0 [locationcode]" echo exit 0; elif [ ! -z $1 ] ; then LOCCOD=$1 fi curl -s http://rss.accuweather.com/rss/liveweather_rss.asp\?metric\=${METRIC}\&locCode\=$LOCCOD \ | sed -n '/Currently:/ s/.*: \(.*\): \([0-9]*\)\([CF]\).*/\2°\3, \1/p' █ Set perms on your weather.sh: ▐▌ █ chmod 744 weather.sh ▐▌ █ Then test it: ▐▌ █ /usr/share/./weather.sh ▐▌ █ Output: ▐▌ █ 56°F, Thunderstorm ▐▌ █ ▐▌ █ 5. EASY FAST ASCII DESIGN: ▐▌ █ To make an ASCII design like I have done above for 'mewbies' visit ▐▌ █ ruletheweb.co.uk HERE, type in what you want, copy, paste, add a margin on ▐▌ █ the left. I used the font doom. Looks better if you don't surpass 80 ▐▌ █ characters per line. ▐▌ █ ▐▌ █ EXPLAIN A BIT ABOUT THE MOTD SCRIPT CODE: ▐▌ █ If you know the how to use the code in the script below, skip this. For ▐▌ █ those that it is foreign I'll explain a bit to help you adjust it. ▐▌ █ For example the output of the lm-sensors cmd 'sensors -f | grep Temp' we ▐▌ █ did earlier needs to be modified to suit what we actually want on our ▐▌ █ MOTD. Below in the script, it has the output to MOTD based on the results ▐▌ █ of my output from the cmd. You might need to change this depending on what ▐▌ █ your own output from that cmd is. ▐▌ █ My output is: ▐▌ █ Core0 Temp: +89.6°F ▐▌ █ M/B Temp: +100.4°F (high = +41.0F, hyst = +32.0F) ALARM sensor = thermistor▐▌ █ CPU Temp: +90.5°F (high = +140.0F, hyst = +131.0F) sensor = thermistor ▐▌ █ ▐▌ █ I only want it to output: +89.6°F & +100.4°F & +90.5°F ▐▌ █ This is done by using 'lindex' and counting the place of a complete word ▐▌ █ that you want on the output, not including white spaces, starting with 0 ▐▌ █ (zero). So for example +89.6°F is the 3rd word, since we start counting at ▐▌ █ 0, it would be in place 2, then +100.4°F would be in place 5, and so on. ▐▌ █ The code in the script below to output only the 2, 3, & 18 place word is: ▐▌ █ set temperature [exec -- sensors -f | grep Temp] ▐▌ █ set tem(0) [lindex $temperature 2] ▐▌ █ set tem(m) [lindex $temperature 5] ▐▌ █ set tem(c) [lindex $temperature 18] ▐▌ █ ▐▌ █ 'tem(0)' can be any name() you like as long as you use the same name() in ▐▌ █ the output section. ▐▌ █ [lindex $temperature 2] is the code that will output the place 2 word (3rd ▐▌ █ word in the output). ▐▌ █ Then in our output section will use tem(0), tem(m) etc with descriptions ▐▌ █ for the output. ▐▌ █ ▐▌ █ If that seems more confusing, don't worry about it, just use the script ▐▌ █ then I you'll have a better understanding. ▐▌ █ ▐▌ █ 6. CREATE THE MOTD SCRIPT: ▐▌ █ Paste in the script below changing the code to suit your cmds- the notes ▐▌ █ you made earlier, such as: ▐▌ █ 1. Your correct disk name for hddtemp along with the count of the ▐▌ █ characters to output out on this line: ▐▌ █ set hddtemp [lindex [exec -- /usr/bin/hddtemp /dev/hda -uf | cut -c "31-35"] 0] █ ▐▌ █ 2. The location of 'env': ▐▌ █ which env ▐▌ █ My output is: /usr/bin/env ▐▌ █ If yours is different change in the first line of the script to your path ▐▌ █ ▐▌ █ OK so lets do this- 1. Create a new file 'motd.tcl': ▐▌ █ su ▐▌ █ pico /etc/motd.tcl ▐▌ █ ▐▌ █ Copy/paste in: ▐▌ #!/usr/bin/env tclsh # MOTD script original? / mod mewbies.com # * Variables set var(user) $env(USER) set var(path) $env(PWD) set var(home) $env(HOME) # * Check if we're somewhere in /home #if {![string match -nocase "/home*" $var(path)]} { if {![string match -nocase "/home*" $var(path)] && ![string match -nocase "/usr/home*" $var(path)] } { return 0 } # * Calculate last login set lastlog [exec -- lastlog -u $var(user)] set ll(1) [lindex $lastlog 7] set ll(2) [lindex $lastlog 8] set ll(3) [lindex $lastlog 9] set ll(4) [lindex $lastlog 10] set ll(5) [lindex $lastlog 6] # * Calculate current system uptime set uptime [exec -- /usr/bin/cut -d. -f1 /proc/uptime] set up(days) [expr {$uptime/60/60/24}] set up(hours) [expr {$uptime/60/60%24}] set up(mins) [expr {$uptime/60%60}] set up(secs) [expr {$uptime%60}] # * Calculate usage of home directory set usage [lindex [exec -- /usr/bin/du -ms $var(home)] 0] # * Calculate SSH logins: set logins [exec -- w -s] set log(c) [lindex $logins 5] # * Calculate processes set psu [lindex [exec -- ps U $var(user) h | wc -l] 0] set psa [lindex [exec -- ps -A h | wc -l] 0] # * Calculate current system load set loadavg [exec -- /bin/cat /proc/loadavg] set sysload(1) [lindex $loadavg 0] set sysload(5) [lindex $loadavg 1] set sysload(15) [lindex $loadavg 2] # * Calculate Memory set memory [exec -- free -m] set mem(t) [lindex $memory 7] set mem(u) [lindex $memory 8] set mem(f) [lindex $memory 9] set mem(c) [lindex $memory 16] set mem(s) [lindex $memory 19] # * Calculate disk temperature from hddtemp set hddtemp [lindex [exec -- /usr/bin/hddtemp /dev/hda -uf | cut -c "31-35"] 0] # * Calculate temperature from lm-sensors set temperature [exec -- sensors -f | grep Temp] set tem(0) [lindex $temperature 2] set tem(m) [lindex $temperature 5] set tem(c) [lindex $temperature 18] # * Display weather set weather [exec -- /usr/share/./weather.sh] set wthr(t) [lindex $weather 0] set wthr(d) [lindex $weather 1] set wthr(e) [lindex $weather 2] # * ascii head set head { _ _ | | (_) _ __ ___ _____ _| |__ _ ___ ___ | '_ ` _ \ / _ \ \ /\ / / '_ \| |/ _ \/ __| | | | | | | __/\ V V /| |_) | | __/\__ \ |_| |_| |_|\___| \_/\_/ |_.__/|_|\___||___/ } # * Print Results puts "\033\[01;32m$head\033\[0m" puts " Last Login....: $ll(1) $ll(2) $ll(3) $ll(4) from $ll(5)" puts " Uptime........: $up(days)days $up(hours)hours $up(mins)minutes $up(secs)seconds" puts " Load..........: $sysload(1) (1minute) $sysload(5) (5minutes) $sysload(15) (15minutes)" puts " Memory MB.....: $mem(t) Used: $mem(u) Free: $mem(f) Free Cached: $mem(c) Swap In Use: $mem(s)" puts " Temperature...: Core0: $tem(0) M/B: $tem(m) CPU: $tem(c) Disk: ${hddtemp}" puts " Disk Usage....: You're using ${usage}MB in $var(home)" puts " SSH Logins....: There are currently $log(c) users logged in." puts " Processes.....: You're running ${psu} which makes a total of ${psa} running" puts " Weather.......: $wthr(t) $wthr(d) $wthr(e)\n" puts "\033\[01;32m ::::::::::::::::::::::::::::::::-STATEMENT-::::::::::::::::::::::::::::::::" puts " This is a private system that you are not to give out access to anyone" puts " without permission from an admin!\033\[0m\n" if {[file exists /etc/changelog]&&[file readable /etc/changelog]} { puts " . .. More or less important system informations:\n" set fp [open /etc/changelog] while {-1!=[gets $fp line]} { puts " ..) $line" } close $fp puts "" } █ ▐▌ █ 2. Set permissions on the file: ▐▌ █ chmod 755 /etc/motd.tcl ▐▌ █ ▐▌ █ 3. Then add your new motd.tcl to the user's profile: ▐▌ █ pico /etc/profile ▐▌ █ ▐▌ █ Add this line at the end of profile: ▐▌ █ /etc/motd.tcl ▐▌ █ ▐▌ █ 4. Logout and back in to view the changes, or exit root then: ▐▌ █ /etc/./motd.tcl ▐▌ █ ▐▌ █ TEXT FORMAT/COLOR NOTES: ▐▌ █ The mewbies ASCII and the 'Statement' is in light green as stated with ▐▌ █ this line for the ASCII: ▐▌ █ puts "\033\[01;32m$head\033\[0m" ▐▌ █ \033\[ starts code, 01 is light, 32 is green, m is format, ($head is the ▐▌ █ mewbie's ASCII) \033\[0m turns off the text formatting. ▐▌ █ ▐▌ █ COLOR TEXT BACKGROUND COLOR TEXT BACKGROUND FORMAT ▐▌ █ Black 30 40 Dark Gray 1;30 1;7;40 color lightner 1 ▐▌ █ Red 31 41 Light Red 1;31 read below underlined 4 ▐▌ █ Green 32 42 Light Green 1;32 blink 5 ▐▌ █ Yellow 33 43 Light Yellow 1;33 inverse 7 ▐▌ █ Blue 34 44 Light Blue 1;34 conceal 8 ▐▌ █ Magenta 35 45 Light Magenta 1;35 ▐▌ █ Cyan 36 46 Light Cyan 1;36 ▐▌ █ Light Gray 37 47 White 1;37 ▐▌ █ ▐▌ █ For a visual understanding enter this in your shell: ▐▌ █ echo -e "\033[08mI'm concealed\033[0m" ▐▌ █ echo -e "\033[32mI'm green\033[0m" ▐▌ █ echo -e "\033[01mI'm brighter-bold\033[0m" ▐▌ █ echo -e "\033[01;32mI'm light green\033[0m" ▐▌ █ echo -e "\033[01;32;45mI'm light green on a magenta background\033[0m" ▐▌ █ echo -e "\033[01;04;32;45mI'm light underlined green on a magenta background\033[0m"echo -e "\033[01;04;32;45;5mI'm light underlined green on a magenta background, blinking\033[0m"echo -e "\033[07;05;04;01;32;45mI'm inversed; underlined blinking magenta on a light green background\033[0m" █ At this point you might want to enter: ▐▌ █ clear ▐▌ █ Since the attribute 1 is used on the text to lighten (bolder) color you ▐▌ █ need to use the inverse with it if you want to use it on the background ▐▌ █ color. Some examples of using 1 - lightner with 7 - inverse: ▐▌ █ echo -e "\033[30;47mI'm black on a light gray background\033[0m" ▐▌ █ But I want to be black on dark gray background. ▐▌ █ So we need to use 1 and 7 so that the background becomes dark gray by ▐▌ █ by stating the opposite - text black 30 and background black 40: ▐▌ █ echo -e "\033[1;7;30;40mI'm black on a dark gray background\033[0m" ▐▌ █ Where as to be black on white background we state text light gray (1 will ▐▌ █ change that to white and 7 will inverse it to be the background not the ▐▌ █ text) on a black background: ▐▌ █ echo -e "\033[1;7;37;40mI'm black on a white background\033[0m" ▐▌ █ Once you get your head around that, try this: ▐▌ █ echo -e "\033[1;7;30;37mI'm black on a white background too\033[0m" ▐▌ █ Change the order of the 30 & 37: ▐▌ █ echo -e "\033[1;7;37;30mI'm black on a dark gray background\\033[0m" ▐▌ █ ▐▌ █ If the formatted text isn't showing properly it is most likely because the ▐▌ █ SSH client you are using doesn't have colors enabled. To enable them for ▐▌ █ example in - ▐▌ █ SecureCRT: Options/Session/Terminal/Emulation/ check the box 'ANSI Color'. ▐▌ █ Terminal has VT100 by default which will work fine. ▐▌ █ PuTTy: Will have colors on by default (Window/Colours) but not blinking ▐▌ █ text. To turn it on Terminal/check the box 'Enable blinking text'. ▐▌ █ ▐▌ █ MOTD COLOR HELPER TOOLS: ▐▌ █ If you are also a Windows user I've found a great freeware, tiny, portable ▐▌ █ program 'MOTD Maker' HERE to colorize and format text easily. ▐▌ █ ▐▌ █ I found a shell script HERE, scroll down to 'More about colors', that you ▐▌ █ can run to show you the output of the codes. ▐▌ █ To use this: ▐▌ █ pico colors.sh ▐▌ █ Copy, paste in the code, save the file. ▐▌ █ chmod 755 colors.sh ▐▌ █ ./colors.sh ▐▌ █ ▐▌ █ DEGREE SYMBOL ° PROBLEM: ▐▌ █ ```````````````````````` ▐▌ █ If your degree symbol ° doesn't show correctly, such as '°' read HERE how ▐▌ █ to fix this. ▐▌ █ ▐▌ █ RANDOM FORTUNE OR A QUOTE ON EACH LOGIN: ▐▌ █ ```````````````````````````````````````` ▐▌ █ You could have a random fortune or a quote printed out to users each time ▐▌ █ a user logs in. Here is one from fortune: ▐▌ █ Good day for overcoming obstacles Try a steeplechase. ▐▌ █ ▐▌ █ su ▐▌ █ apt-get install fortune ▐▌ █ ▐▌ █ Then to add fortune's path to the bottom of profile: ▐▌ █ pico /etc/profile ▐▌ █ ▐▌ █ Add this line: ▐▌ █ /usr/games/fortune ▐▌ █ ▐▌ █ exit ▐▌ █ ▐▌ █ Now each time a user logs in it will execute fortune, giving them a random ▐▌ █ quote. ▐▌ █ To view fortune's options: ▐▌ █ man fortune ▐▌ █ ▐▌ █ To leave the man window: ▐▌ █ q ▐▌ █ ▐▌ █ COWSAY THE FORTUNE: ▐▌ █ ``````````````````` ▐▌ █ You could be sillier and have one of cowsay's creatures state the quote ▐▌ █ for them: ▐▌ █ su ▐▌ █ apt-get install cowsay ▐▌ █ ▐▌ █ Instead of adding this line to the bottom of the profile file: ▐▌ █ /usr/games/fortune ▐▌ █ Add this line for example: ▐▌ █ /usr/games/fortune | cowsay -f small ▐▌ █ ▐▌ █ The output of that would be: ▐▌ █ ________________________________________ ▐▌ █ / Good day for overcoming obstacles. Try \ ▐▌ █ \ a steeplechase. / ▐▌ █ ---------------------------------------- ▐▌ █ \ ,__, ▐▌ █ \ (oo)____ ▐▌ █ (__) )\ ▐▌ █ ||--|| * ▐▌ █ ▐▌ █ To find out more including variables for cow's tongue, eyes, position, ▐▌ █ etc.: ▐▌ █ man cowsay ▐▌ █ For a quick list of creatures view my 'EASTER EGGS' link HERE. ▐▌ █ ▐▌ █ You can view the output before adding the line by running it: ▐▌ █ fortune | cowthink -f www ▐▌ █ fortune | cowsay -f bud-frogs ▐▌ █ fortune | cowsay -f skeleton ▐▌ █ etc... ▐▌ █ ▐▌ █ OTHER MOTD IDEAS: ▐▌ █ ````````````````` ▐▌ █ 1. Just add these lines to your motd.tcl if you for example you're the ▐▌ █ only one logging in- as these cmds aren't available to regular users- MOTD ▐▌ █ will only produce errors if a regular user logins with these on the ▐▌ █ motd.tcl. ▐▌ █ ▐▌ █ To have on your MOTD report your week's total times you have logged in: ▐▌ █ # * Calculate SSH logins: ▐▌ █ set userwktotal [lindex [exec -- grep opened /var/log/auth.log | awk /$var(user)/ | wc -l] 0] █ puts " SSH Logins....: There are currently $log(c) users. You have logged in a total of ${userwktotal} times this week" █ ▐▌ █ To report the week's total SSH login failed attempts: ▐▌ █ set failures [lindex [exec -- grep sshd /var/log/auth.log | awk /failure/ | wc -l] 0] █ puts " SSH Failed....: There have been ${failures} failed attempts this week to possibly break-in"▐▌ █ ▐▌ █ Depending on how often your logs are rotated will be if the report is ▐▌ █ weekly or other. To view when your logs are rotated: ▐▌ █ cat /etc/logrotate.conf ▐▌ █ Mine has: ▐▌ █ # rotate log files weekly ▐▌ █ weekly ▐▌ █ ▐▌ █ One way around these type of admin only cmds for all users to have on ▐▌ █ their MOTD is to create a bash file with those cmds with the output placed ▐▌ █ in a text file, with the correct permissions set, in a users shared ▐▌ █ directory, then cron the bash fail to run every x minutes and then add to ▐▌ █ the motd.tcl code to cat the text file -not execute the actual cmd. ▐▌ █ For example: ▐▌ █ grep sshd /var/log/auth.log | awk /failure/ | wc -l > failure_count.txt ▐▌ █ cat failure_count.txt ▐▌ █ the '>' will over write the file each time ▐▌ █ if it was '>>' it would append the output to the file. ▐▌ █ ▐▌ █ I don't really fancy this method as it just means another process running ▐▌ █ every x minutes and that it's not really up to the minute information if ▐▌ █ set for longer periods. ▐▌ █ ▐▌ █ 2. Just like we added the fortune and cowsay to /etc/profile you could add ▐▌ █ for example your weather script to /etc/profile like this: ▐▌ █ /usr/share/./weather.sh ▐▌ █ ▐▌ █ 3. If you wanted each user to have their own weather (their own location ▐▌ █ code) reported on their MOTD and not the location code you have on the ▐▌ █ main one you could do it like this: ▐▌ █ In each users home directory there must be a weather.sh with their own ▐▌ █ desired location code, chmod 744. Then on the motd.tcl, this line: ▐▌ █ set weather [exec -- /usr/share/./weather.sh] ▐▌ █ Change to: ▐▌ █ set weather [exec -- /home/$var(user)/./weather.sh] ▐▌ █ ▐▌ █ If you know of any other fun or useful variables to add to MOTD please ▐▌ █ post then at mewbies forum :) ▐▌ █ ▐▌ █ //---------------------------------------------------------------------- ▐▌ █ ▐▌ █ If you find mistakes, have suggestions, and or questions please post at ▐▌ █ mewbies forum HERE - thank you. ▐▌ █ ▐▌ █ Last update on 28 Aug '10 ▐▌ █ ▐▌ █▌ █▌ █▌ - mewbies.com - █▌ █▌ █▌ ██▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄██