#!/usr/bin/perl -w # SYSTEMINFO script for xchat, by scoobs # place this file into ~/.xchat/ dir so it can be automaticly loaded # This program is free software, you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation. # there is a bug with kernel 2.4.20 and greater with the disk size, if someone # could fix this i would be very happy. # # # #Commands /about /gfx /sound /mb /ker /cpu /ram /disk /net /temp /sys # # # # # # # # # IRC::register("SystemInfo", "1.3", "", ""); IRC::print "SYSTEMINFO loaded.... Commands /about /gfx /sound /mb /ker /cpu /ram /disk /net /temp /sys"; IRC::add_command_handler("about", "about"); IRC::add_command_handler("gfx", "gfx"); IRC::add_command_handler("sound", "sound"); IRC::add_command_handler("mb", "mb"); IRC::add_command_handler("ker", "ker"); IRC::add_command_handler("cpu", "cpu"); IRC::add_command_handler("ram", "ram"); IRC::add_command_handler("disk", "disk"); IRC::add_command_handler("net", "net"); IRC::add_command_handler("temp", "temp"); IRC::add_command_handler("sys", "sys"); $dev = eth0; #<-- Change that :) sub about { IRC::command("SYSTEMINFO - designed for XChat - by scoobs - version 1.3"); return 1; } sub gfx { $depths = `xdpyinfo | grep depths | awk '{print \$3 \$4 \$5 \$6 \$7 \$8 \$9}'`; chop ($bits); $xfree86 = `xdpyinfo | grep XFree86"."version | awk '{print \$3}'`; chop ($xfree86); $res = `xdpyinfo | grep dimensions | awk '{print \$2}'`; chop ($res); @vid = `cat /proc/pci`; foreach (@vid) { if (/VGA compatible controller: (.+).$/i) {$vidcard = $1;last;} @bits = `xwininfo -root`; foreach (@bits) { if (/^ +?Depth: (.+)/i) {$bits = $1;} } } IRC::command("(Graphics):[$vidcard] (XFree86):[$xfree86] (Res):[$res] (Bits):[$bits]"); return 1; } sub ker { $ker =`uname -srm`; chop ($ker); IRC::command("(Kernel):[$ker]"); return 1; } sub cpu { $model = `cat /proc/cpuinfo | grep 'model name' | head -1 | sed -e 's/^.*: //'`; chop ($model); $freq = `cat /proc/cpuinfo | grep 'cpu MHz' | head -1 | sed -e 's/^.*: //'`; chop ($freq); $cache = `cat /proc/cpuinfo | grep 'cache size' | head -1 | sed -e 's/^.*: //'`; chop ($cache); $bogomips = `cat /proc/cpuinfo | grep 'bogomips' | head -1 | sed -e 's/^.*: //'`; chop ($bogomips); IRC::command("(CPU): $model: (Frequency): $freq"."MHz: (Cache): $cache: (Bogomips): $bogomips"); return 1; } sub sound { @snd = `cat /proc/pci`; foreach (@snd) { if (/Multimedia audio controller: (.+).$/i) {$sndcard = $1;first;} if (/Input device controller: (.+).$/i) {$inpdev = $1;last;} } IRC::command("(SoundCard):[$sndcard] (Input Device Controller):[$inpdev]"); return 1; } sub mb { @mb = `cat /proc/pci`; foreach (@mb) { if (/ISA bridge: (.+).$/i) {$isabrg = $1;last;} } IRC::command("$isabrg"); return 1; } sub disk { @ide = `cat /proc/pci`; foreach (@ide) { if (/IDE interface: (.+).$/i) {$ideinf = $1;last;} } IRC::command("(IDE Interfaces):[$ideinf]"); return 1; } sub net { if($dev =~ /^ppp/i) { $devtype=`cat /proc/pci | grep 'Communication controller:' | cut -d" " -f7-`; } else { $devtype=`cat /proc/pci | grep "IRQ \`/sbin/ifconfig $dev | grep Interrupt | cut -d":" -f2 | cut -d" " -f1\`" -B1 | grep Ethernet | cut -d":" -f2- | cut -d" " -f2-`; }; chop($devtype); if ($devtype =~ /^$/) { $devtype="Unknown"; }; $packin = `cat /proc/net/dev | grep $dev | awk -F: '/:/ {print \$2}' | awk '{printf \$1}'`; if($packin < 1024**3) { $packin = sprintf("%.02f",$packin / 1024**2)."M"; } else { $packin = sprintf("%.02f", $packin / 1024**3)."G"; } $packout = `cat /proc/net/dev | grep $dev | awk -F: '/:/ {print \$2}' | awk '{print \$9}'`; if($packout < 1024**3) { $packout = sprintf("%.02f",$packout / 1024**2)."M"; } else { $packout = sprintf("%.02f", $packout / 1024**3)."G"; } IRC::command("(Network):[Device:$devtype In:$packin Out:$packout]"); return 1; } sub temp { $sens1 = `sensors -f | grep SYS | awk '{print \$1, \$2, \$3}'`; chop ($sens1); $sens2 = `sensors -f | grep CPU Temp | awk '{print \$1, \$2, \$3}'`; chop ($sens2); IRC::command("(Temperature):[System $sens1 CPU $sens2]"); return 1; } sub sys { $ker = `uname -srm`; chop ($ker); $vendor = `cat /proc/cpuinfo | grep 'vendor_id' | head -1 | sed -e 's/^.*: //'`; chop ($vendor); $model = `cat /proc/cpuinfo | grep 'model name' | head -1 | sed -e 's/^.*: //'`; chop ($model); $freq = `cat /proc/cpuinfo | grep 'cpu MHz' | head -1 | sed -e 's/^.*: //'`; chop ($freq); $cache = `cat /proc/cpuinfo | grep 'cache size' | head -1 | sed -e 's/^.*: //'`; chop ($cache); $bogomips = `cat /proc/cpuinfo | grep 'bogomips' | head -1 | sed -e 's/^.*: //'`; chop ($bogomips); $count = `cat /proc/cpuinfo | grep 'model name' | wc -l | sed 's/ *//'`; chop ($count); $f00f = `cat /proc/cpuinfo | grep 'f00f_bug' | head -1 | sed -e 's/^.*: //'`; chop ($f00f); $fdiv = `cat /proc/cpuinfo | grep 'fdiv_bug' | head -1 | sed -e 's/^.*: //'`; chop ($fdiv); $hlt = `cat /proc/cpuinfo | grep 'hlt_bug' | head -1 | sed -e 's/^.*: //'`; chop ($hlt); $coma = `cat /proc/cpuinfo | grep 'coma_bug' | head -1 | sed -e 's/^.*: //'`; chop ($coma); $flags = `cat /proc/cpuinfo | grep 'flags' | head -1 | sed -e 's/^.*: //'`; chop ($flags); $procs = `ps ax | wc -l | awk '{print \$1 - 5}'`; chop ($procs); $mem = `free -m`; foreach ($mem) { /mem.+?[ ]+([\d\.]+)[ ]+([\d\.]+)/i; $memtotal = $1; $memused = $2; $MEMTOTAL = `free | grep Mem | awk '{printf (\"%dMb\", \$2/1000 )}'`; chop ($MEMTOTAL); $MEMPERCENT = `free | grep Mem | awk '{print (( \$3 -(\$6 + \$7) )/\$2)*100}'`; chop ($MEMPERCENT); $MEMFREE = `free | grep Mem | awk '{printf (\"%.0fg\", ( \$3 -(\$6 + \$7) )/1000)}'`; chop ($MEMFREE); $FREEBAR = int($MEMPERCENT/10); $MEMBAR = "%C14[%C4"; for ( $x = 0; $x < 10; $x++ ) { if ( $x eq $FREEBAR ) { $MEMBAR = "$MEMBAR%C3"; } $MEMBAR = "$MEMBAR\|"; } $MEMBAR = "$MEMBAR%C14]%C"; } $up = `uptime`; foreach ($up) { /.*?up *(.*),.*?users?.*?load average: ([\d\.]+).*/i; $up = $1; $load = $2; } IRC::command("(Kernel):[$ker] (Uptime):[$up] (Load):[$load] (CPUCount):[$count] (Model):[$model] (Clock):[$freq"."MHz] (Cache):[$cache] (Bogomips):[$bogomips] (Mem):[$MEMFREE/$MEMTOTAL $MEMBAR] (Total Space):[$disksize"."] (Processes):[$procs]"); return 1; } sub ram { $MEMTOTAL = `free | grep Mem | awk '{printf (\"Mb\", \$2/1000 )}'`; chop ($MEMTOTAL); $MEMPERCENT = `free | grep Mem | awk '{print (( \$3 -(\$6 + \$7) )/\$2)*100}'`; chop ($MEMPERCENT); $MEMFREE = `free | grep Mem | awk '{printf (\"%.0fg\", ( \$3 -(\$6 + \$7) )/1000)}'`; chop ($MEMFREE); $FREEBAR = int($MEMPERCENT/10); $MEMBAR = "["; for ( $x = 0; $x < 10; $x++ ) { if ( $x eq $FREEBAR ) { $MEMBAR = "$MEMBAR%C3"; } $MEMBAR = "$MEMBAR\|"; } $MEMBAR = "$MEMBAR%C14]%C"; IRC::command("(Mem):[$MEMFREE/$MEMTOTAL $MEMBAR]"); return 1; } sub byte_converter { $line = shift(@_); $totalmegsize2 = $line; if ($totalmegsize2 > 1000000000000000000000) { $totalmegsize2 = $totalmegsize2 / 1000000000000000000000; $totalmegsize2 =~ /(.*)\.(.*)/; $begin = $1; $end = (substr ($2, 0, 1)); $totalmegsize2 = "$begin.$end"." Yottabytes"; } elsif ($totalmegsize2 > 1000000000000000000000) { $totalmegsize2 = $totalmegsize2 / 1000000000000000000000; $totalmegsize2 =~ /(.*)\.(.*)/; $begin = $1; $end = (substr ($2, 0, 1)); $totalmegsize2 = "$begin.$end"." Zettabytes"; } elsif ($totalmegsize2 > 1000000000000000000) { $totalmegsize2 = $totalmegsize2 / 1000000000000000000; $totalmegsize2 =~ /(.*)\.(.*)/; $begin = $1; $end = (substr ($2, 0, 1)); $totalmegsize2 = "$begin.$end"." Exabytes"; } elsif ($totalmegsize2 > 1000000000000000) { $totalmegsize2 = $totalmegsize2 / 1000000000000000; $totalmegsize2 =~ /(.*)\.(.*)/; $begin = $1; $end = (substr ($2, 0, 1)); $totalmegsize2 = "$begin.$end"." Petabytes"; } elsif ($totalmegsize2 > 1000000000000) { $totalmegsize2 = $totalmegsize2 / 1000000000000; $totalmegsize2 =~ /(.*)\.(.*)/; $begin = $1; $end = (substr ($2, 0, 1)); $totalmegsize2 = "$begin.$end"."Terabytes"; } elsif ($totalmegsize2 > 1000000000) { $totalmegsize2 = $totalmegsize2 / 1000000000; $totalmegsize2 =~ /(.*)\.(.*)/; $begin = $1; $end = (substr ($2, 0, 1)); $totalmegsize2 = "$begin.$end"."G"; } elsif ($totalmegsize2 > 1000000) { $totalmegsize2 = $totalmegsize2 / 1000000; $totalmegsize2 =~ /(.*)\.(.*)/; $begin = $1; $end = (substr ($2, 0, 1)); $totalmegsize2 = "$begin.$end"."M"; } elsif ($totalmegsize2 > 1000) { $totalmegsize2 = $totalmegsize2 / 1000; $totalmegsize2 =~ /(.*)\.(.*)/; $begin = $1; $end = (substr ($2, 0, 1)); $totalmegsize2 = "$begin.$end"."k"; } else { $totalmegsize2 = $totalmegsize2."b"; } return $totalmegsize2; } @disks = `cat /proc/partitions`; $disksize = 0; foreach (@disks) { if (/^\D+\d+\D+0\D+(\d+)/i) {$disksize = $disksize + $1;} } $disksize = $disksize * 1000; $disksize = byte_converter($disksize); @disks = `cat /proc/ide/ide*/hd*/m*`; $i = 0; $diskfound = ""; foreach $er (@disks) { chomp $er; if ($i == 1) {$diskfound = "$diskfound:$er "}; if ($i == 0) {$diskfound = "$diskfound$er"}; $i++;if ($i > 1) {$i = 0;} } chop $diskfound;