Conky: highly configurable system monitor for X

September 2nd, 2007 edited by ana

Entry submitted by Casey Stamper. DPOTD needs your help, please contribute!

Conky is one of my favorite applications for all of my Linux distros. It is a light-weight system monitor (according to the project page) that can monitor many different aspects of your computer. You choose what to monitor and you choose where the monitor is displayed on your desktop through use of a configuration file - .conkyrc. I like to have my display on the top right of the screen and I have the background transparent so it looks like it floats on the desktop.

Here is a screenshot: (click on the image for full size)

I especially like the CPU temperature monitor because I like to keep track of how hot the CPU gets when I’m doing CPU-intensive operation. The application is very light on resources (especially important for my Inspiron 5160) but allows you to keep track of a lot of system parameters without the bloat of a GUI front end.

Among other things, I monitor disk space, memory usage, system load, network download and upload speed, internet connections by protocol, RAM usage, swap usage and running processes. Although it takes up a bit more memory to do so, I also monitor the /var/log/messages file (the same as having a window open running tail -f /var/log/messages just to see if anything is happening behind the scenes that I should be aware of.

With this utility running all the time, if something should suddenly crash or if I have any slowdowns or anything else unusual, a quick glance at these various readouts will usually allow me to narrow the problem down to something specific.

If you use GKrellM or another built-in monitoring package, try this one out - I think you will like it.


Posted in Debian, Ubuntu |

14 Responses

  1. gouki Says:

    Here’s another example. With less monitoring then the one on the post.

  2. action09 Says:

    Hi and thanks for your post !

    This is my .conkyrc is not available atm.

  3. ergosum Says:

    If you use GKrellM or another built-in monitoring package, try this one out - I think you will like it.

    Why? Couldn’t you have listed some advantages over GKrellm?

  4. Gary Says:

    ana it looks the .conkyrc you linked to in the Links is broken. Please please fix it, that looks like the perfect configuration for me!! :)

  5. Casey Stamper Says:

    To all:
    Thanks for all the comments. I apologize for the .conkyrc not being available. I’m still trying to figure that one out. The file is there, the permissions are correct but I can’t get to it either (through the website). I assume that it has to be an issue w/the hosting server - it worked not too long ago. I will copy my .conkyrc into this reply at the end.
    To ergosum: Frankly, I just don’t like the look of GKrellM. I prefer the simpler interface/look. Other than that, I can’t really point out any advantages or disadvantages as I haven’t used GKrellM to any extent.

    .conkyrc follows……
    # Conky sample configuration
    # the list of variables has been removed from this file in favour
    # of keeping the documentation more maintainable.
    # Check for an up-to-date-list.

    # set to yes if you want Conky to be forked in the background
    background no

    # X font when Xft is disabled, you can pick one with program xfontsel
    #font 5×7
    #font 6×10
    #font 7×13
    #font 8×13
    #font 9×15
    #font **
    #font -*-*-*-*-*-*-34-*-*-*-*-*-*-*

    # 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

    # Print everything to stdout?
    # out_to_console no

    # MPD host/port
    # mpd_host localhost
    # mpd_port 6600
    # mpd_password tinker_bell

    # Print everything to console?
    # out_to_console no

    # mail spool
    # mail_spool $MAIL

    # Update interval in seconds
    update_interval 5.0

    # This is the number of times Conky will update before quitting.
    # Set to zero to run forever.
    total_run_times 0

    # Create own window instead of using desktop (required in nautilus)
    own_window no

    # If own_window is yes, you may use type normal, desktop or override
    own_window_type normal

    # Use pseudo transparency with own_window?
    own_window_transparent yes

    # If own_window_transparent is set to no, you can set the background colour here
    own_window_colour hotpink

    # If own_window is yes, these window manager hints may be used
    #own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

    # Use double buffering (reduces flicker, may not work for everyone)
    double_buffer yes

    # Minimum size of text area
    minimum_size 280 5

    # Draw shades?
    draw_shades yes

    # Draw outlines?
    draw_outline no

    # Draw borders around text
    draw_borders no

    # Draw borders around graphs
    draw_graph_borders yes

    # Stippled borders?
    stippled_borders 8

    # border margins
    border_margin 4

    # border width
    border_width 1

    # Default colors and also border colors
    default_color white
    default_shade_color black
    default_outline_color black

    # Text alignment, other possible values are commented
    #alignment top_left
    alignment top_right
    #alignment bottom_left
    #alignment bottom_right
    #alignment none

    # Gap between borders of screen and text
    # same thing as passing -x at command line
    gap_x 10
    gap_y 26

    # Subtract file system buffers from used memory?
    no_buffers yes

    # set to yes if you want all text to be in uppercase
    uppercase no

    # number of cpu samples to average
    # set to 1 to disable averaging
    cpu_avg_samples 2

    # number of net samples to average
    # set to 1 to disable averaging
    net_avg_samples 2

    # Force UTF8? note that UTF8 support required XFT
    override_utf8_locale no

    # Add spaces to keep things from moving about? This only affects certain objects.
    use_spacer no

    # Allow each port monitor to track at most this many connections (if 0 or not set, default is 256)
    #max_port_monitor_connections 256

    # Maximum number of special things, e.g. fonts, offsets, aligns, etc.
    #max_specials 512

    # Maximum size of buffer for user text, i.e. below TEXT line.
    #max_user_text 16384

    # variable is given either in format $variable or in ${variable}. Latter
    # allows characters right after the variable and must be used in network
    # stuff because of an argument

    # stuff after ‘TEXT’ will be formatted on screen

    $nodename - $sysname $kernel on $machine
    ${color lightgrey}Uptime:$color $uptime ${color lightgrey}- Load:$color $loadavg
    ${color lightgrey}CPU Temperature: ${acpitemp}
    ${color lightgrey}CPU Usage:${color #cc2222} $cpu% ${cpubar}
    ${color red}${cpugraph 0000ff 00ff00}
    ${color lightgrey}RAM Usage:$color $mem/$memmax - $memperc% ${membar}
    ${color lightgrey}Swap Usage:$color $swap/$swapmax - $swapperc% ${swapbar}
    ${color lightgrey}Processes:$color $processes ${color grey}Running:$color $running_processes
    ${color lightgrey}Networking:
    Down:${color #8844ee} ${downspeed eth1} k/s${color lightgrey} ${offset 100}Up:${color #22ccff} ${upspeed eth1} k/s
    ${color #0000ff}${downspeedgraph eth1 32,175 ff0000 0000ff} ${color #22ccff}${upspeedgraph eth1 32,175 0000ff ff0000}
    ${color lightgrey}
    ${color lightgrey}File systems:
    / $color${fs_used /}/${fs_size /} ${fs_bar /}
    ${color}Name PID CPU% MEM%
    ${color #ddaa00} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
    ${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
    ${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
    ${color lightgrey} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}
    ${color}Mem usage
    ${color #ddaa00} ${top_mem name 1} ${top_mem pid 1} ${top_mem cpu 1} ${top_mem mem 1}
    ${color lightgrey} ${top_mem name 2} ${top_mem pid 2} ${top_mem cpu 2} ${top_mem mem 2}
    ${color lightgrey} ${top_mem name 3} ${top_mem pid 3} ${top_mem cpu 3} ${top_mem mem 3}
    ${color lightgrey} ${top_mem name 4} ${top_mem pid 4} ${top_mem cpu 4} ${top_mem mem 4}
    ${color #ddaa00}Port(s)${alignr}#Connections
    $color Inbound: ${tcp_portmon 1 32767 count} Outbound: ${tcp_portmon 32768 61000 count}${alignr}ALL: ${tcp_portmon 1 65535 count}
    ${color #ddaa00}Inbound Connection ${alignr} Local Service/Port$color
    ${tcp_portmon 1 32767 rhost 0} ${alignr} ${tcp_portmon 1 32767 lservice 0}
    ${tcp_portmon 1 32767 rhost 1} ${alignr} ${tcp_portmon 1 32767 lservice 1}
    ${tcp_portmon 1 32767 rhost 2} ${alignr} ${tcp_portmon 1 32767 lservice 2}
    ${tcp_portmon 1 32767 rhost 3} ${alignr} ${tcp_portmon 1 32767 lservice 3}
    ${color #ddaa00}Outbound Connection ${alignr} Remote Service/Port$color
    ${tcp_portmon 32768 61000 rhost 0} ${alignr} ${tcp_portmon 32768 61000 rservice 0}
    ${tcp_portmon 32768 61000 rhost 1} ${alignr} ${tcp_portmon 32768 61000 rservice 1}
    ${tcp_portmon 32768 61000 rhost 2} ${alignr} ${tcp_portmon 32768 61000 rservice 2}
    ${tcp_portmon 32768 61000 rhost 3} ${alignr} ${tcp_portmon 32768 61000 rservice 3}
    ${color orange}LOGGING ${hr 2}$color
    ${execi 30 tail -n3 /var/log/messages | fold -w50}

    ${color orange}FORTUNE ${hr 2}$color
    ${execi 120 fortune -s | fold -w50}

  6. Casey Stamper Says:

    I fixed the link - moved the file into the root of the site. I’m not sure what the difference is…

  7. janP Says:

    Thanks for your post. Conky is my favorite apllication for monitoring and it looks cool… and for a few friends the reason to give linux a try.

  8. franz Says:

    Using Ubuntu 7.04 added conky with Synaptic and edited my conkyrc according to your example but when I run it nothing shows up even if the command line seems still working (didn’t run in “daemon” mode just to test it)
    any clue?? thanks

  9. Casey Stamper Says:

    franz: I don’t know how you’re running but my .conkyrc is in my home directory (/home/cstamper/.conkyrc) and I run the app as myself from the command line (conky &). I don’t close the command line window after that (I’m sure that there is probably a better way to do it by going through sessions, etc. but that’s just the way I have it set up now). It seems to work just fine for me whether I’m using KDE or GNOME or Xfce. I’m not sure what else to suggest. If you do a ps -A | grep conky, does it show it as running?

  10. stabbowsky Says:

    Hi. I see battery status on your screenshot and there’s no line in your conky config file that displays the battery status. I’ve tried battery, battery_percent etc. and all I get on screen is ${battery} or ${battery_percent}. Any suggestions?

  11. Casey Stamper Says:

    I *think* I used the battery variable but I remember that I had to play with it for a while. Obviously, the .conkyrc I posted is older than the one I’m actually using. :( It may have been the apm_battery variable. I apologize - just don’t remember. I’ll look at my laptop tonight and get a good answer back tomorrow. I think it all depends on whether your LT is APM or ACPI capable. I know that one of them didn’t work but I’ll verify tonight.

    battery (num) Battery status and remaining percentage capacity of ACPI or APM battery. ACPI battery number can be given as argument (default is BAT0).

  12. Casey Stamper Says:

    stabbowsky: My battery statement is this:
    Battery status/remaining time: $battery
    So, the trick is to not use the curly braces, I guess. Also, when I unplug the laptop, I don’t get a time remaining reading. I get a “discharging 61%” or whatever the value is. I should probably change my label. Hope this helps.

  13. Gary Says:

    Thanks Casey!

  14. uterrorista Says:

    Set the battery in conky correctly