Mar 27
1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5 out of 5)
Loading ... Loading ...

OK, this is a bit of a cheeky post, since I’m merely extending a previous post “Conky on Ubuntu 64 Bit - .conkyrc” - or elaborating on it - to clarify setting up .conkyrc for Dual Core Processors - specifically for my AMD Turion 64 X2. I’ve had a few requests specifically about this, so here goes…

Now, the part of my .conkyrc file that deals with my Dual Core looks like this:

${color #42AE4A}Usage (Avg):${color #42AE4A} ${freq_dyn_g}Ghz ${color lightgrey}${cpu cpu0}% ${alignr}${color #42AE4A}${cpubar cpu0 5,80}
${color #42AE4A}Usage (Core 1):${color #42AE4A} ${freq_dyn_g cpu1}Ghz ${color lightgrey}${cpu cpu1}% ${alignr}${color #42AE4A}${cpubar cpu1 5,80}
${color #42AE4A}Usage (Core 2):${color #42AE4A} ${freq_dyn_g cpu2}Ghz ${color lightgrey}${cpu cpu2}% ${alignr}${color #42AE4A}${cpubar cpu2 5,80}
${color #42AE4A}Average
${cpugraph cpu0 42AE4A eeeeee}
${color #42AE4A}Core 1 $alignr Core 2
${color #42AE4A}${cpugraph cpu1 25,120 42AE4A eeeeee} ${color #42AE4A} $alignr${color #42AE4A}${cpugraph cpu2 25,120 42AE4A eeeeee}
${color #42AE4A}Processes:${color lightgrey} $processes ${color #42AE4A}Run:${color lightgrey} $running_processes ${color #42AE4A}CPU Temp:${color lightgrey} ${execi 1100 cat /proc/acpi/thermal_zone/THRM/temperature | grep -o “[0-9]* C”}
${color #42AE4A}Core 1 Temp: ${color lightgrey}${execi 8 sensors | grep -A 1 ‘Core0′ | cut -c13-16 | sed ‘/^$/d’} C ${color #42AE4A}Core 2 Temp: ${color lightgrey}${execi 8 sensors | grep -A 1 ‘Core1′ | cut -c13-16 | sed ‘/^$/d’} C

This outputs the following to Conky:

Conky Dual Core CPU Output

Stripping out all the formatting, and colouring gives this:

Usage (Avg): ${freq_dyn_g}Ghz ${cpu cpu0}% ${alignr}${cpubar cpu0 5,80}
Usage (Core 1): ${freq_dyn_g cpu1}Ghz ${cpu cpu1}% ${alignr}${cpubar cpu1 5,80}
Usage (Core 2): ${freq_dyn_g cpu2}Ghz ${cpu cpu2}% ${alignr}${cpubar cpu2 5,80}
Average
${cpugraph cpu0 42AE4A eeeeee}
Core 1 $alignr Core 2
${cpugraph cpu1 25,120 42AE4A eeeeee} $alignr${cpugraph cpu2 25,120 42AE4A eeeeee}
Processes: $processes Run: $running_processes CPU Temp: ${execi 1100 cat /proc/acpi/thermal_zone/THRM/temperature | grep -o “[0-9]* C”}
Core 1 Temp: ${execi 8 sensors | grep -A 1 ‘Core0′ | cut -c13-16 | sed ‘/^$/d’} C Core 2 Temp: ${execi 8 sensors | grep -A 1 ‘Core1′ | cut -c13-16 | sed ‘/^$/d’} C

Now the walk through. The first line, Usage (Avg): ${freq_dyn_g}Ghz ${cpu cpu0}% ${alignr}${cpubar cpu0 5,80} gives the Average clock speed usage for both cores - ${freq_dyn_g} with no parameters, will output the current clock speed usage for the CPU as a whole. Passing cpu0 as a parameter to ${cpu} will output the overall CPU % used, and similarly, passing cpu0 to ${cpubar} will draw the overall % used graph (the parameters 5,80 are just for the height and width.

Now, by passing cpu1 or cpu2 to ${freq_dny_g}, ${cpu} and ${cpubar} Conky will output the same data but for each individual core. This can be extended by passing cpuN where N is the core number, for quad core etc. this could be cpu3 cpu4. So, the first three lines:

Usage (Avg): ${freq_dyn_g}Ghz ${cpu cpu0}% ${alignr}${cpubar cpu0 5,80}
Usage (Core 1): ${freq_dyn_g cpu1}Ghz ${cpu cpu1}% ${alignr}${cpubar cpu1 5,80}
Usage (Core 2): ${freq_dyn_g cpu2}Ghz ${cpu cpu2}% ${alignr}${cpubar cpu2 5,80}

Outputs:

Conky Dual Core CPU Usage

The next lines of the file deal with throughput/usage graphs, ${cpugraph cpu0 42AE4A eeeeee} being the average for the CPU as a whole, since cpu0 is passed as a parameter. 42AE4A and eeeeee are just colour parameters to create a gradient overlay on the graph. As before, passing cpu1 and cpu2 will draw the graphs for the individual cores. The additional parameters, 25,120 are again just height and width parameters.

So, the lines

Average
${cpugraph cpu0 42AE4A eeeeee}
Core 1 $alignr Core 2
${cpugraph cpu1 25,120 42AE4A eeeeee} $alignr${cpugraph cpu2 25,120 42AE4A eeeeee}

Will output:

Conky Dual Core CPU Throughput Graphs

Finally, I have a bunch of other data output, such as total processes, processes running, and CPU temperature. The first line outputs general information about the CPU as a whole:

Processes: $processes Run: $running_processes CPU Temp: ${execi 1100 cat /proc/acpi/thermal_zone/THRM/temperature | grep -o "[0-9]* C”}

$processes outputs the total number of processes, while $running_processes outputs the number of currently running processes on the CPU. To output the overall temperature, I had to call the execi function, and do some tweaking of the output to get the number, so ${execi 1100 cat /proc/acpi/thermal_zone/THRM/temperature | grep -o “[0-9]* C”} basically outputs /proc/acpi/thermal_zone/THRM/temperature, pipes the output through grep which searches for the regular expression ‘[0-9]* C’ (which matches a string of numbers followed by a space followed by an upper-case C), and thus outputs just the temperature value - e.g. “45 C”.

To output the temperature of each Core, I once again run the execi function on a couple of piped shell commands, and pipe the output through other shell commands to get the number I want:

Core 1 Temp: ${execi 8 sensors | grep -A 1 'Core0' | cut -c13-16 | sed '/^$/d'} C Core 2 Temp: ${execi 8 sensors | grep -A 1 'Core1' | cut -c13-16 | sed '/^$/d'} C

Basically what is happening here is I’m running the shell command sensors, piping to grep to search for the string “Core0“, piing this output to cut to trim it, and finally editing out some of the crap I don’t want by piping to sed. This is just repeated for Core1. You may need to customise the output from sensors, by greping, cutting and seding different stuff - experiment by opening a terminal, and running sensors, then just pipe it through the grep, cut, and sed commands until you get the data you want.

So, the final lines together:

Processes: $processes Run: $running_processes CPU Temp: ${execi 1100 cat /proc/acpi/thermal_zone/THRM/temperature | grep -o "[0-9]* C”}
Core 1 Temp: ${execi 8 sensors | grep -A 1 ‘Core0′ | cut -c13-16 | sed ‘/^$/d’} C Core 2 Temp: ${execi 8 sensors | grep -A 1 ‘Core1′ | cut -c13-16 | sed ‘/^$/d’} C

Output:

Conky Dual Core CPU Misc Info

Of course, this should work on any Linux distro with Conky installed.

Hope that helps someone.

written by Hodge \\ tags: , , , , ,

Mar 11
1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 4.67 out of 5)
Loading ... Loading ...

BOINC Statistics output to ConkySince my previous article about Conky, Conky on Ubunty 64 Bit - .conkyrc, I’ve been playing around with trying to get Conky to output some BOINC (SETI@Home data), and through a little digging, found a couple of very useful resources. The first being BOINC’s own client_status.xml file, located on Ubunutu in /var/lib/boinc-client/client_status.xml, which contains a lot of information about BOINC projects, Work Units, Status and so on. The second being a command line application, again built into BOINC - boinc_cmd. boinc_cmd can be executed with a bunch of parameters, such as –get_simple_gui_info and –get_project_status which output to the Terminal a lot of information about Projects and Work Units.

To output BOINC data via Conky, it’s possible to call the boinc_cmd in .conkyrc and strip down the information with grep and sed etc:

${execi 10 boinc_cmd --get_simple_gui_info | grep -m 1 "fraction done:" | tail -n 1 - | sed -e 's/ fraction done: //'}
${execi 10 boinc_cmd --get_simple_gui_info | grep -m 2 "fraction done:" | tail -n 1 - | sed -e 's/ fraction done: //'}

…and so on for each piece of data required for output, but this is pretty labourious, and makes for a rather ugly .conkyrc, so I’ve written a really quick and dirty Perl Script (it’s not pleasant to look at, and needs a LOT of work, so it’s more of a pre Alpha-Alpha! I’m not sure how, or if it will work with multiple projects, since I only have SETI@HOME installed…) - which actually retrieves all the data from the client_status.xml file. The (archived) script, boinc.pl can be downloaded here (and viewed below - just copy and paste the text into a file, and save it as “boinc.pl” if the download doesn’t work for you). It’s also posted over at the Ubuntu Forums. I’ve called it in .conkyrc by adding one simple line:

BOINC:
${color lightgrey}${execi 10 perl ~/ConkyScripts/boinc/boinc.pl}

OK, so that’s actually two lines, but the first line doesn’t really do anything except output the text “BOINC:” to Conky, so it doesn’t count - but it’s much cleaner than potentially dozens of lines, right? The script itself is in my ~/ConkyScripts/boinc directory and has been made executable:

sudo chmod a+x boinc.pl

Here’s the script so far - it’s VERY much Work In Progress, but it outputs the data as shown in the image above:

Edit 15/03/08: I’ve updated the code, so hopefully it’ll work with multiple projects:

#!/usr/bin/perl

$BoincStatePath="/var/lib/boinc-client";
$BoincClientStateFile="client_state.xml";
$StateFile="$BoincStatePath/$BoincClientStateFile";

open(INFO, $StateFile);
@lines = <INFO>;
close(INFO);
sub strip_tags($);

sub convert_time_to_string($);
sub estimate_time_remaining;
$projectCount = 0;
$wuCount = 0;
$wuActive = 0;
$wuActiveTask = 0;

foreach $line (@lines) {

   if ($line =~ /<master_url>/) {
      $projectMasterURL[$projectCount] = strip_tags($line);
   }

   if ($line =~ /<project_name>/) {
      $projectName[$projectCount] = strip_tags($line);
      $projectCount++;
   }

   if ($line =~ /<workunit>/) {
      $wuCount++;
   }

   if ($line =~ /<active_task_state>1/) {
      $wuActive++;
   }

   if ($line =~ /<active_task>/) {
      $wuActiveTask++;
   }

   if ($line =~ /<result_name>/) {
      $wuName[$wuActiveTask] = strip_tags($line);
   }

   if ($line =~ /<fraction_done>/) {
      $wuPercent[$wuActiveTask] = strip_tags($line) * 100;
   }

   if ($line =~ /<project_master_url>/) {
      $wuMasterURL[$wuActiveTask] = strip_tags($line);
   }

   if ($line =~ /<current_cpu_time>/) {
      $wuCPUTime[$wuActiveTask] = convert_time_to_string(strip_tags($line));
      $wuCPUTimeRaw[$wuActiveTask] = strip_tags($line);
   }

}

print "No. Work Units: ".$wuCount.", Active WU: ".$wuActive."\n";

for($i = 0; $i <= $projectCount; ++$i) {
   print $projectName[$i];
   for ($j = 1; $j <= $wuActiveTask; ++$j) {
      if($projectMasterURL[$i] eq $wuMasterURL[$j]) {
         print "WU ".$j.": ".$wuName[$j];
         $estTime = convert_time_to_string(estimate_time_remaining($wuCPUTimeRaw[$j],$wuPercent[$j]));
         print "CPU Time: ".$wuCPUTime[$j]." Time Remaining: ".$estTime."\n";
         print $wuPercent[$j]."% Complete\n";
      }
   }
}

sub strip_tags($) {
   my $string = shift;
   $string =~ s/<(.*?)>//gi;
   $string =~ s/ //gi;
   return $string;
}

sub convert_time_to_string($) {
   $cpuTime = int($_[0]);
   #Calculate the number of days
   if ($cpuTime > 86400) {
      $timeDays = $cpuTime/(24*60*60).":";
   } else {
      $timeDays = "";
   }

   #Calculate the number of hours and minutes
   $timeHours = ($cpuTime/(60*60))%24;
   $timeMinutes = ($cpuTime/60)%60;
   $timeSeconds = $cpuTime%60;
   $cpuTimeString = $timeDays.$timeHours.":".$timeMinutes.":".$timeSeconds;

   return $cpuTimeString;
}

sub estimate_time_remaining {
   $cpuTime = $_[0];
   $currentPercent = $_[1];
   $onePercentTime = $cpuTime/$currentPercent;
   $totalTime = $onePercentTime * 100;
   $estimatedTimeReminaing = $totalTime - $cpuTime;
   return $estimatedTimeReminaing;
}

written by Hodge \\ tags: , , , , ,

Mar 09
1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 3.5 out of 5)
Loading ... Loading ...

Conky ScreenshotI recently installed Conky, which is a highly configurable and “light weight system monitor”. As with many packages, it’s available via the Ubuntu Repositories:

sudo apt-get install conky

The default installation outputs some pretty useful information about the system - CPU usage, RAM/Swap usage, HD IO, HDD space and so on, and there are also some awesome scripts available to pull in other information to the display. The data monitored by Conky is controlled by the .conkyrc file locate in the user Home directory ~/.conkyrc. Opening and editing, or creating this file if it doesn’t exist (Applications -> Accessories -> Text Editor then Save As .conkyrc in the home directory), .conkyrc allows full control of how Conky gathers and displays information. The first section of the file, controls how the physical aspects of Conky is handled - the window size, transparency, position on the desctop etc., and the second part of the file takes a number of variables - both built in to Conky (which gather information such as RAM usage, etc.), and via exec, execi and texeci commands.

The Conky website has a great references on the configuration settings, available variables, and the man page.

I’ve also recently written a post which deals specifically with setting up Dual Core processors - Conky: Dual Core Processors in .conkyrc

As previously mentioned, in addition to Conky’s built in variables, it is possible to execute external shell commands, and even Perl/Python etc. scripts, and have the output sent to Conky for processing. I currently have two scripts installed, both obtained from Ubuntu Forums:

Conky Gmail Revisited, written by lvleph, is a Perl script, which logs into your Gmail account, and checks for new mail periodically (the interval of which is actually controlled via the .conkyrc). The Perl script is easy to download and use. Once I saved the script to ~/ConkyScripts/gmail/gmail.pl I just had to modify the script to enter my Gmail username and password, and make it executable

cd ~/ConkyScripts/gmail/
sudo chmod a+x gmail.pl

I could then call the script from my .conkyrc:

You have ${texeci 360 perl ~/ConkyScripts/gmail/gmail.pl n} new gmail(s).

texeci is a Conky command, to which I passed the parameters 360 (an interval in seconds which the script should run), and the shell command to execute - in this case, perl ~/ConkyScripts/gmail/gmail.pl n (the n is actually a parameter passed to the gmail.pl script!). The original forum post has a great list of installation instructions, thanks to lvleph.

I also added

${execi 360 perl ~/ConkyScripts/gmail/gmail.pl s}

to .conkyrc which calls the script again, but with “s” as the parameter, to output any new email subjects to Conky.

Conky Weather Revisited V2, also written by lvleph, grabs local weather information. It even comes with its own Weather Font! Again, it’s easy to download and incorporate into the .conkyrc file (I recommend the version from Page 3 of the forum thread - just remember to download the font from the front page). Again, I saved this to its own directory ~/ConkyScripts/weather/weather.pl and it was just a matter of calling the script from the .conkyrc as before. Running

./weather.pl

in a terminal window outputs the possible parameters which can be passed to the script - the most important being the area code/city code - in my case THXX0027, for Mae Hongson. Again, the original forum post has a great list of installation instructions, thanks to lvleph.

I’ve also recently written a Perl script, which allows BOINC data to be viewed via Conky. See my recent post on BOINC and SETI@Home with Conky, on Ubuntu.

Desktop with Conky

So, here’s my full .conkyrc file, for anyone who’s interested, which outputs the image above - try and tested on an Acer Aspire 5052, with AMD Turion 64 X2 (Dual Core) Processor:

# set to yes if you want Conky to be forked in the background
background no
cpu_avg_samples 2
net_avg_samples 2
out_to_console no
# Use Xft?
use_xft yes
# Xft font when Xft is enabled
xftfont Bitstream Vera Sans Mono:size=8
# Text alpha when using Xft
xftalpha 0.8
on_bottom yes
# Update interval in seconds
update_interval 1
# Create own window instead of using desktop (required in nautilus)
own_window yes
own_window_transparent yes
own_window_type override
# Use double buffering (reduces flicker, may not work for everyone)
double_buffer yes
# Minimum size of text area
minimum_size 260 5
maximum_width 260
# Draw shades?
draw_shades no
# Draw outlines?
draw_outline no
# Draw borders around text
draw_borders no
# Stippled borders?
stippled_borders no
# border margins
border_margin 4
# border width
border_width 1
# Default colors and also border colors
default_color white
default_shade_color white
default_outline_color white
# Text alignment, other possible values are commented
gap_x 15
gap_y 30
alignment top_right
# Gap between borders of screen and text
# Add spaces to keep things from moving about? This only affects certain objects.
use_spacer no
# Subtract file system buffers from used memory?
no_buffers yes
# set to yes if you want all text to be in uppercase
uppercase no
# boinc (seti) dir
seti_dir /usr/lib/boinc-app-seti/setiathome_enhanced
TEXT
${color #42AE4A}$sysname $kernel $machine - $nodename
${color #42AE4A}Uptime:${color lightgrey} $uptime ${color #42AE4A} Load:${color lightgrey} $loadavg
${color lightgrey}${hr}
${color #42AE4A}Usage (Avg):${color #42AE4A} ${freq_dyn_g}Ghz ${color lightgrey}${cpu cpu0}% ${alignr}${color #42AE4A}${cpubar cpu0 5,80}
${color #42AE4A}Usage (Core 1):${color #42AE4A} ${freq_dyn_g cpu1}Ghz ${color lightgrey}${cpu cpu1}% ${alignr}${color #42AE4A}${cpubar cpu1 5,80}
${color #42AE4A}Usage (Core 2):${color #42AE4A} ${freq_dyn_g cpu2}Ghz ${color lightgrey}${cpu cpu2}% ${alignr}${color #42AE4A}${cpubar cpu2 5,80}
${color #42AE4A}Average
${cpugraph cpu0 42AE4A eeeeee}
${color #42AE4A}Core 1 $alignr Core 2
${color #42AE4A}${cpugraph cpu1 25,120 42AE4A eeeeee} ${color #42AE4A} $alignr${color #42AE4A}${cpugraph cpu2 25,120 42AE4A eeeeee}
${color #42AE4A}Processes:${color lightgrey} $processes ${color #42AE4A}Run:${color lightgrey} $running_processes ${color #42AE4A}CPU Temp:${color lightgrey} ${execi 1100 cat /proc/acpi/thermal_zone/THRM/temperature | grep 'temperature:' | sed -e 's/temperature: //'}
${color #42AE4A}Core 1 Temp: ${color lightgrey}${execi 8 sensors | grep -A 1 'Core0' | cut -c13-16 | sed '/^$/d'} C ${color #42AE4A}Core 2 Temp: ${color lightgrey}${execi 8 sensors | grep -A 1 'Core1' | cut -c13-16 | sed '/^$/d'} C
${color lightgrey}${hr}
${color #42AE4A}CPU Usage PID CPU% MEM%
${color lightgrey} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color #42AE4A} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color #42AE4A} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color #42AE4A}Mem Usage
${color lightgrey} ${top_mem name 1} ${top_mem pid 1} ${top_mem cpu 1} ${top_mem mem 1}
${color #42AE4A} ${top_mem name 2} ${top_mem pid 2} ${top_mem cpu 2} ${top_mem mem 2}
${color #42AE4A} ${top_mem name 3} ${top_mem pid 3} ${top_mem cpu 3} ${top_mem mem 3}
${color lightgrey}${hr}
${color #42AE4A}RAM:${color lightgrey} $mem/$memmax ($memperc%) ${alignr}${color #42AE4A}${membar 5,100}
${color #42AE4A}SWAP:${color lightgrey} $swap/$swapmax ($swapperc%) ${alignr}${color #42AE4A}${swapbar 5,100}
${color #42AE4A}HD IO: ${color lightgrey}${diskio}
${color #42AE4A}${diskiograph 42AE4A eeeeee}
${color #42AE4A}Hard Disk Space:
${color #42AE4A} Root ${color lightgrey}${fs_used /}/${fs_size /}${alignr}${color #42AE4A}${fs_bar 5,120 /}
${color #42AE4A} Win ${color lightgrey}${fs_used /media/hda1}/${fs_size /media/hda1}${alignr}${color #42AE4A}${fs_bar 5,120 /media/hda1}
${color #42AE4A} Data ${color lightgrey}${fs_used /media/hda5}/${fs_size /media/hda5}${alignr}${color #42AE4A}${fs_bar 5,120 /media/hda5}
${color lightgrey}${hr}
${color #42AE4A}Network: ${color lightgrey}${addr eth0}
${color #42AE4A}Down:${color lightgrey} ${downspeed eth0} k/s $alignr${color #42AE4A} Up:${color lightgrey} ${upspeed eth0} k/s
${color #42AE4A}${downspeedgraph eth0 27,120 42AE4A eeeeee 180} $alignr${color #42AE4A}${upspeedgraph eth0 27,120 42AE4A eeeeee 25}
${color lightgrey}${totaldown eth0} $alignr${color lightgrey}${totalup eth0}
${color #42AE4A}Power: ${color lightgrey}${execi 2 acpi | sed -e 's/ .*: //'}
${color #42AE4A}You have ${color lightgrey}${texeci 360 perl ~/ConkyScripts/gmail/gmail.pl n} ${color #42AE4A}new gmail(s).
${color lightgrey}${execi 360 perl ~/ConkyScripts/gmail/gmail.pl s}
${color #42AE4A}$font${alignc}Mae Hongson Weather
${color #42AE4A}$font${alignc}Today
${alignc}${voffset -5}${color lightgrey}${font weather:size=30}${execi 3600 perl ~/ConkyScripts/weather/weather.pl THXX0027 c cp}${font}$color${voffset -15}${offset 10}${color lightgrey}${execi 3600 perl ~/ConkyScripts/weather/weather.pl THXX0027 c c}
${voffset 5}${color #42AE4A}$font${alignc}5 Day Forcast
${voffset -5}${font weather:size=30}${alignc}${offset -45}${execi 3600 perl ~/ConkyScripts/weather/weather.pl THXX0027 c 1p}${offset 25}${color orange}${execi 3600 perl ~/ConkyScripts/weather/weather.pl THXX0027 c 2p}${offset 25}${color cyan}${execi 3600 perl ~/ConkyScripts/weather/weather.pl THXX0027 c 3p}${offset 24}${color green}${execi 3600 perl ~/ConkyScripts/weather/weather.pl THXX0027 c 4p}${offset 23}${color red}${execi 3600 perl ~/ConkyScripts/weather/weather.pl THXX0027 c 5p}${font}$color
${alignc}${offset -15}${execi 3600 perl ~/ConkyScripts/weather/weather.pl THXX0027 c 1}${offset 10}${execi 3600 perl ~/ConkyScripts/weather/weather.pl THXX0027 c 2}${offset 10}${execi 3600 perl ~/ConkyScripts/weather/weather.pl THXX0027 c 3}${offset 10}${execi 3600 perl ~/ConkyScripts/weather/weather.pl THXX0027 c 4}${offset 10}${execi 3600 perl ~/ConkyScripts/weather/weather.pl THXX0027 c 5}

The “Post your .conkyrc files w/ screenshots” thread over at Ubuntu Forums has many other .conkyrc examples to peruse.

written by Hodge \\ tags: , , ,

Webloogle Blog Directory