2006-02-14, 09:57 PM
OK .. first.. lets show you WHY you might want to do this :)
<a class="ipsAttachLink ipsAttachLink_image" href="<fileStore.core_Attachment>/post-798-1139953495.png" data-fileid="477">[img]<fileStore.core_Attachment>/post-798-1139953495.png[/img]</a>
This is my conky :) You can see that this is weighted towards gentoo users
Ok, first the preparation. I will assume that you have conky installed (yum install conky, emerge conky, most systems have it now).
Ok so we need to create a couple of scripts to help create the output. If you aren't a gentoo user, skip these.
If you don't have a local user bin folder then you should make it:
Code:
mkdir ~/bin
~/bin/emerge-current.sh
Code:
#!/bin/bash
# emerge-current.sh by Hellf[i]re
#
# This script is designed to read the name of the last package compiled.
#
# As this script does read the entirety of emerge.log, it will be rather
# heavy on the CPU. It shouldn't be enough to be noticable on newer (2.0Ghz+)
# processors, but it still should not be run more often than every 30 seconds.
#
# Usage:
# .conkyrc: ${execi [time] /path/to/script/emerge-current.sh}
#
# Usage Example
# ${execi 30 /home/youruser/scripts/emerge-current.sh}
tail -n 50 /var/log/emerge.log |\
tac |\
grep 'Compiling' |\
head |\
sed -e 's/.*(//' |\
sed -e 's/::.*)//' |\
head -n 1 |\
cut -d \) -f 1
~/bin/emerge-progress.sh
Code:
#!/bin/bash
# source: Jeremy_Z @ forums.gentoo.org http://forums.gentoo.org/viewtopic-t-351806-postdays-0-pos
torder-asc-start-550.html
#
# This script will report the progress of the last emerge command run. It
# reports the TOTAL percentage complete - not the percentage of the current
# package. For example, if there are 110 packages currently being emerged, and
# it is on the 55th package, it will report 50.
#
# Usage:
# .conkyrc: ${execibar [time] /path/to/script/emerge-progress.sh}
#
# Usage Example
# ${execibar 30 /home/youruser/scripts/emerge-progress.sh}
tail -n 50 /var/log/emerge.log |\
tac |\
grep -v "Starting retry" |\
grep -iE '([0-9]* of [0-9]*)' -o -m 1 |\
sed -e 's/\(.*\) of \(.*\)/\1 \2/' |\
awk '{print 100.0*$1/$2}'
~/bin/emerge-status.sh
Code:
#!/bin/bash
#
# emerge-status.sh by Hellf[i]re
#
# This script will report the current status of portage.
#
# Usage:
# .conkyrc: ${execi [time] /path/to/script/emerge-current.sh}
#
# Usage Example
# ${execi 30 /home/youruser/scripts/emerge-current.sh}
#
# Known Bugs:
# 1) If there are two emerges running at once, when the first one finishes
# running, the script will report the current status as "Completed".
# 2) If there is a emerge running and you run a search, the script will
# report the current status as "Completed", until the running emerge
# moves to the next package, or itself completes.
# The reasons for this are twofold - one, it's a feature;) and two, there
# would be far too much parsing required to find out the current status of
# every command which is run in parallel.
STATUS=`tail -n 15 /var/log/emerge.log |\
grep -iE "Compiling|Cleaning|AUTOCLEAN|completed|search|terminating|rsync" |\
cut -d ' ' -f "2-" |\
grep -Ev 'Finished\.|Cleaning up\.\.\.' |\
tail -n 1`
#echo "$STATUS"
if [ "`echo "$STATUS" | grep -i compiling`" != "" ]; then echo Compiling
elif [ "`echo "$STATUS" | grep -i cleaning`" != "" ]; then echo Cleaning
elif [ "`echo "$STATUS" | grep -i autoclean`" != "" ]; then echo Autoclean
elif [ "`echo "$STATUS" | grep -i sync`" != "" ]; then echo Syncing
elif [ "`echo "$STATUS" | grep -i search`" != "" ]; then echo Searching
elif [ "`echo "$STATUS" | grep -i completed`" != "" ]; then echo Completed
elif [ "`echo "$STATUS" | grep -i terminating`" != "" ]; then echo Completed
fi
~/bin/lastsync.pl
Code:
#!/usr/bin/perl
use Date::Manip;
$date = `grep "Sync completed" /var/log/emerge.log | tail -n1 | cut -c-10`;
$date = &DateCalc("Jan 1, 1970 00:00:00 GMT",$date);
$date = UnixDate("$date","%A %H:%M");
print "$date";
Right thats those out of the way. Major thanks to the respective authors!
Now onto the ~/.conkyrc:
Code:
# ~/.conkyrc
background yes
use_xft no
on_bottom yes
font 6x10
update_interval 5.0
total_run_times 0
own_window no
own_window_transparent yes
double_buffer yes
minimum_size 180 5
draw_shades yes
draw_outline no
draw_borders no
stippled_borders 8
border_margin 4
border_width 1
default_color white
default_shade_color black
default_outline_color black
alignment top_right
gap_x 12
gap_y 12
no_buffers yes
uppercase no
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale no
use_spacer no
TEXT
${color #98c2c7}$nodename linux-$kernel${alignr}${time %T}$color
${color #98c2c7}SYSTEM$color
${color #ffcb48}UPTIME$color $uptime${alignr}${color #ffcb48}LOAD$color $loadavg
${color #ffcb48}CPU$color $cpu%${alignr}${color #ffcb48}FREQ$color $freq_dyn_g / $freq_g
${color #000000}${cpugraph cpu0 32,255 104e8b 0077ff}
${color #ffcb48}RAM$color $mem / $memmax ${color #7f8ed3}${membar}$color
${color #ffcb48}SWAP$color $swap / $swapmax ${color #7f8ed3}${swapbar}$color
${color #98c2c7}NETWORK$color
${color #ffcb48}PING$color mute${execi 50 sh -c "ping -q -c5 mute | tail -n 2 | head -n 1 | cut -d',' -f3" }
${color #ffcb48}DOWN$color ${downspeed eth0} k/s ${offset 80}${color #ffcb48}UP$color ${upspeed eth0} k/s
${color #000000}${downspeedgraph eth0 32,125 104e8b 0077ff} ${color #000000}${upspeedgraph eth0 32,125 104e8b 0077ff}
${color #98c2c7}STORAGE$color
root ${fs_used /} / ${fs_size /} ${color #7f8ed3}${fs_bar /}$color
${color #98c2c7}PROCESSES$color
${color #ffcb48}NAME PID CPU% MEM%$color
${color #007700}${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}$color
${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color #ffcb48}PROC$color $processes${alignr}${color #ffcb48}RUN$color $running_processes
${color #ffcb48}MEM USAGE$color
${color #007700}${top_mem name 1} ${top_mem pid 1} ${top_mem cpu 1} ${top_mem mem 1}$color
${top_mem name 2} ${top_mem pid 2} ${top_mem cpu 2} ${top_mem mem 2}
${top_mem name 3} ${top_mem pid 3} ${top_mem cpu 3} ${top_mem mem 3}
${color #98c2c7}PORTAGE$color
${color #ffcb48}LAST SYNC$color ${execi 300 /home/znx/bin/lastsync.pl}
${color #ffcb48}LAST 3$color
${execi 50 genlop -lnu | sed -e 's/.*\([><]\+\)/ \1/' | tail -n 3 | tac}
${color #ffcb48}CURRENT$color
> ${color #98c2c7}${execibar 30 /home/znx/bin/emerge-progress.sh}$color
> ${execi 30 /home/znx/bin/emerge-current.sh}
> ${execi 30 /home/znx/bin/emerge-status.sh}
NOTE if you are not using gentoo remove the lines at the end of the ~/.conkyrc from PORTAGE down to the end. And if you ARE then switch the "/home/znx/bin" for your user. :)
Thats it.. start up conky and it will run. If you are using KDE/Gnome you will need to tamper with them to make it work because conky doesn't work well with them yet.
Conky's Home where I sourced the script and 99% of the idea to the production of this layout.
Weeeeee.. just a quick jaunt.. ask questions if you have any
OH ..
Code:
${color #ffcb48}PING$color mute${execi 50 sh -c "ping -q -c5 mute | tail -n 2 | head -n 1 | cut -d',' -f3" }
This line is used to ping another system in my local network, you can either edit the name "mute" to be another machine, or remove the line as it will loose 100% of its packets.
See below for information about securing the genlop command.
Updated to fix mistakes found by dragon_788, many thanks!