#!/usr/bin/perl $reset = "\e[0m"; $green = "\e[32m"; $red = "\e[31m"; $yello = "\e[33m"; my $acpitool = `which acpitool`; my $grok = `$acpitool`; print "+-----------------------+\n"; print "| SYS INFO |\n"; print "| version 1.1 |\n"; print "+-----------------------+\n"; print "| Battery |\n"; print "| AC Adapter:"; if ($grok =~ /on-line/) { print $green." Online $reset\t|\n"; $xpos = 3; } elsif ($grok =~ /off-line/) { print $red." Offline $reset\t|\n"; $xpos = 4; } else { print $yello." Unknown $reset\t|\n"; } print "| Battery #1: "; if ($grok =~ /Battery \#1/) { print $green.substr((split(/\s/, (split(/\n/, $grok))[0]))[10], 0, -1)."\t$reset|\n"; } print "| Battery #2: "; if ($grok =~ /Battery \#2/) { print $green.substr((split(/\s/, (split(/\n/, $grok))[1]))[10], 0, -1)."\t$reset|\n"; } print "+-----------------------+\n"; print "| Temperature |\n"; if ($grok =~ /Thermal zone 1/) { print "| Zone 1: "; $thr = substr((split(/\s/, (split(/\n/, $grok))[$xpos]))[7], 0); print $green.$thr." C \t$reset|\n" if ($thr < 65); print $yello.$thr." C \t$reset|\n" if ($thr > 65 && $thr < 85); print $red.$thr." C \t$reset|\n" if ($thr > 85 && $thr < 95); print $yello."??? C \t$reset|\n" if (!defined($thr)); } if ($grok =~ /Thermal zone 2/) { print "| Zone 2: "; $thr = substr((split(/\s/, (split(/\n/, $grok))[3]))[7], 0); print $green.$thr." C \t$reset|\n" if ($thr < 65); print $yello.$thr." C \t$reset|\n" if ($thr > 65 && $thr < 85); print $red.$thr." C \t$reset|\n" if ($thr > 85 && $thr < 95); print $yello."??? C \t$reset|\n" if (!defined($thr)); } if ($grok =~ /Thermal zone 3/) { print "| Zone 3: "; $thr = substr((split(/\s/, (split(/\n/, $grok))[3]))[7], 0); print $green.$thr." C \t$reset|\n" if ($thr < 65); print $yello.$thr." C \t$reset|\n" if ($thr > 65 && $thr < 85); print $red.$thr." C \t$reset|\n" if ($thr > 85 && $thr < 95); print $yello."??? C \t$reset|\n" if (!defined($thr)); } print "+-----------------------+\n"; print "| Disk Drives |\n"; my $grok = `df -h`; my @a = split(/\n/, $grok); for ($x=0;$x<$#a+1;$x++) { @j = split(/\s/, $a[$x]); $dev = $j[0]; next if ($dev eq "none"); next if ($dev eq "Filesystem"); $size = $j[14]; $used = $j[17]; print "| $dev -> $used/$size\t$reset|\n" } print "+-----------------------+\n"; print "| Uptime |\n"; $uptime=`uptime`; chop($uptime); $uptime=~ /.+ up (.+),.+[0-9]+ user/; $uptime=$1; print "| $uptime \t|\n"; print "+-----------------------+\n"; print "| CPU Info |\n"; $cpu_load=`export TERM=dumb; top -b -d .1 -n2 | grep "Cpu(s)" | awk '{print \$2}' | tail -n1 | sed 's/%//'`; chop($cpu_load); $cpu_load=sprintf("%.0f",($cpu_load)); $cpu_load="$cpu_load"; $col = $green if $cpu_load < 21; $col = $yello if $cpu_load < 51 && $cpu_load > 20; $col = $red if $cpu_load > 51; print "| load - $col$cpu_load% \t$reset|\n"; $cpu=`cat /proc/cpuinfo`; if($cpu=~/sparc/){ $cpu=~ /(.*sparc.*)/; @cpumodel=split/:/,$1; $cpumodel=$cpumodel[1]; $cpumodel=~ s/ //; $cpu=~ /(.*bogomips.*)/; @cpumhz=split/:/,$1; $cpumhz=sprintf ("%.f",$cpumhz[1]); $cpuinf="$cpumodel @ ${cpumhz}MHz"; }elsif($cpu=~/ 486/){ $cpu=~ /(.*model name.*)/; @cpumodel=split/:/,$1; $cpumodel=$cpumodel[1]; $cpumodel=~ s/ //; $cpu=~ /(.*bogomips.*)/; @cpumhz=split/:/,$1; $cpumhz=sprintf ("%.f",$cpumhz[1]); $cpuinf="$cpumodel @ ${cpumhz}MHz"; }else{ $cpu=~ /(.*model name.*)/; @cpumodel=split/:/,$1; $cpumodel=$cpumodel[1]; $cpumodel=~ s/ //; $cpu=~ /(.*cpu MHz.*)/; @cpumhz=split/:/,$1; $cpumhz=sprintf ("%.f",$cpumhz[1]); $cpuinf="$cpumodel @ ${cpumhz}MHz"; } $cpu_cnt=`cat /proc/cpuinfo | grep 'processor' | wc -l | sed 's/ *//'`; chop($cpu_cnt); $cache=`cat /proc/cpuinfo | grep 'cache size' | head -n 1 | sed -e 's/^.*: //'`; chop($cache); $bogomips=`cat /proc/cpuinfo | grep 'bogomips' | head -n 1 | sed -e 's/^.*: //'`; chop($bogomips); print "| speed - ${cpumhz}MHz\t|\n"; print "| cache - $cache\t|\n"; print "+-----------------------+\n"; print "| Memory |\n"; # Memory $mem_total=`free | grep Mem | awk '{printf (\"%dMm\", \$2/1024 )}'`; chop($mem_total); $mem_free=`free | grep Mem | awk '{printf (\"%.0fMm\", ( \$3 -(\$6 + \$7) )/1024)}'`; chop($mem_free); $mem_per=`free -m | grep Mem | awk '{printf (\"%.0f\", (\$2 - \$3 + \$6 + \$7) * (100/ \$2))}'`; $buffered_mem=`free | grep Mem | awk '{printf (\"%.0fM\", (\$6)/1024)}'`; $cached_mem=`free | grep Mem | awk '{printf (\"%.0fM\", (\$7)/1024)}'`; # Swap (try to handle this smoothly) $any_swap=`free -m | grep Swap | awk '{print \$2}'`; if($any_swap != 0){ $swap_total=`free | grep Swap | awk '{printf (\"%dMm\", \$2/1024 )}'`; chop($swap_total); $swap_free=`free | grep Swap | awk '{printf (\"%.0fMm\", ( \$3 -(\$6 + \$7) )/1024)}'`; chop($swap_free); $swap_per=`free -m | grep Swap | awk '{printf (\"%.0f\", (\$2 - \$3 + \$6 + \$7) * (100/ \$2))}'`; } chop($mem_free); chop($mem_total); $color = $red if ($mem_total-$mem_free < $mem_total/5); $color = $yello if ($mem_total-$mem_free > $mem_total/3.5); $color = $green if ($mem_total-$mem_free > $mem_total/1.5); print "| sys - $color${mem_free}MB/${mem_total}MB\t$reset|\n"; chop($swap_free); chop($swap_total); $color = $red if ($swap_total-$swap_free < $swap_total/5); $color = $yello if ($swap_total-$swap_free > $swap_total/3.5); $color = $green if ($swap_total-$swap_free > $swap_total/1.5); print "| swap - $color${swap_free}MB/${swap_total}MB\t$reset|\n"; print "+-----------------------+\n"; print "| Video |\n"; $xchk=`ps aux | grep "[x]init" | wc -l`; $gdmchk=`ps aux | grep "[g]dm-binary" | wc -l`; $gdmchk2=`ps aux | grep "[g]dm" | wc -l`; if($xchk > 0){ $idchk=`ps aux | grep "[x]init " | awk '{print \$1}'`; $me=`whoami`; if($idchk eq $me){ $do_display="1"; }else{ $do_display="1"; } }elsif($gdmchk > 0 && $xchk == "0"){ $do_display="1"; }elsif($gdmchk2 > 0 && $xchk == "0" && $gdmchk =="0"){ $do_display="1"; }else{ $do_display="0"; $con_display="1"; } if($do_display == "1"){ if(-x "/usr/X11R6/bin/xdpyinfo"){ $xdpy="/usr/X11R6/bin/xdpyinfo"; } if(-x "/usr/local/X11R6/bin/xdpyinfo"){ $xdpy="/usr/X11R6/bin/xdpyinfo"; } if(-x "/usr/bin/xdpyinfo"){ $xdpy="/usr/bin/xdpyinfo"; } if(-x "/usr/X11R6/bin/xrandr"){ $xrandr="/usr/X11R6/bin/xrandr"; } if(-x "/usr/local/X11R6/bin/xrandr"){ $xrandr="/usr/local/X11R6/bin/xrandr"; } if(-x "/usr/bin/xrandr"){ $xrandr="/usr/bin/xrandr"; } $xrandr = "DISPLAY=:0 ".$xrandr; $xdpy = "DISPLAY=:0 ".$xdpy; if($xrandr){ $refrsh_rate = `$xrandr | grep "*" | awk '{print \$10}' | sed 's/*//'`; chop($refrsh_rate); if($refrsh_rate){ $refrsh_rate="/${refrsh_rate}Hz"; } } if(-x "/usr/X11R6/bin/glxinfo"){ $glx="/usr/X11R6/bin/glxinfo"; } if(-x "/usr/local/X11R6/bin/glxinfo"){ $glx="/usr/local/X11R6/bin/glxinfo"; } if(-x "/usr/bin/glxinfo"){ $glx="/usr/bin/glxinfo"; } # $glx = "DISPLAY=:0 $glx"; if($glx){ $dri=`$glx | grep "direct rendering: Yes" | wc -l`; if($dri > 0){ $dri="${green}enabled"; }else{ $dri="${red}disabled"; } }else{ $dri="/No DRI"; } $vid_card=`lspci | grep VGA | sed -e 's/.*: //' | sed 's/ (.*//' | sed 's/ATI Technologies Inc //' | tail -n1`; chop($vid_card); if($xdpy){ $screen_res=`$xdpy | grep dimensions | awk '{print \$2}'`; chop($screen_res); if(!$screen_res){ $screen_res="Unknown Res"; } $screen_depth=`$xdpy | grep "depth of root window" | awk '{print \$5}'`; chop($screen_depth); if(!$screen_depth){ $screen_depth="Unknown"; } } # Get Xorg/Xfree version if(!$x){ $x=`$xdpy | grep XFree86"."version | awk '{print \$3}'`; if($x ne ""){ $x="XFree86 $x"; }} chomp($x); if(!$x){ $x=`$xdpy | grep X.Org"."version | awk '{print \$3}'`; if($x ne ""){ $x="X.Org $x"; }} chomp($x); if(!$x){ $x="Unknown X-Server"; } # Get Desktop Enviroment/Window Manager (All rewrote as of v2.8) $fluxchk=`ps ax | grep [f]luxbox | wc -l`; if($fluxchk > 0){ $de=`fluxbox -version | grep Fluxbox | sed 's/-.*//' | sed 's/ :.*//'`; } $bbchk=`ps ax | grep [b]lackbox | wc -l`; if($bbchk > 0){ $de=`blackbox --version | grep Blackbox | sed 's/ :.*//'`; } $obchk=`ps ax | grep [o]penbox | wc -l`; if($obchk > 0){ $de=`openbox --version | grep Openbox`; } $wmchk=`ps ax | grep [w]maker | wc -l`; if($wmchk > 0){ $de=`wmaker --version | grep "Window Maker"`; } $kdechk=`ps ax | grep [s]tartkde | wc -l`; if($kdechk > 0){ $de=`kde-config --version | grep "KDE:" | sed 's/://'`; } $echk=`ps ax | grep [e]nlightenment | wc -l`; if($echk > 0){ $de=`enlightenment --version | grep Version | awk '{print \$1, \$3}'`; } $gchk=`ps ax | grep [g]nome-session | wc -l`; if($gchk > 0){ $de=`gnome-panel --version | sed 's/.*gnome-panel //'`; $de="Gnome $de"; } $xfchk=`ps ax | grep [x]fwm4 | wc -l`; if($xfchk > 0){ $de=`xfwm4 --version | grep version | awk '{print \$5}'`; { $de="Xfce $de"; }} if(!$de){ $de="Unknown GUI"; } # $de=`sed 's/)//' \$de`; chop($de); }else{ $vid_card=` lspci| grep VGA | sed -e 's/.*: //' | sed 's/ (.*//' | sed 's/ATI Technologies Inc //' | tail -n1`; chop($vid_card); } print "| res - $screen_res\t|\n"; print "| dpi - ${screen_depth}bpp \t|\n"; print "| dri - $dri \t$reset|\n"; print "| wm - $de \t|\n"; print "+-----------------------+\n"; print "| Misc info |\n"; $pc=`ps ax | wc -l | awk '{print \$1 - 4}'`; chop($pc); print "| proc - $pc running\t|\n"; print "| kernel - ".substr(`uname -r`, 0, -1)."\t|\n"; print "+-----------------------+\n"; __END__;