Difference between revisions of "Conky"

From ArchWiki
Jump to: navigation, search
m (add dual screen configuration)
m (Graysky: Link to the conkyrc file was broken. Changed it to the last revision it was in, instead of master.)
(43 intermediate revisions by 21 users not shown)
Line 1: Line 1:
 
[[Category:Status monitoring and notification]]
 
[[Category:Status monitoring and notification]]
[[Category:Eye candy]]
 
 
[[es:Conky]]
 
[[es:Conky]]
 
[[fr:Conky]]
 
[[fr:Conky]]
Line 9: Line 8:
 
Conky is a system monitor software for the X Window System. It is available for GNU/Linux and FreeBSD. It is free software released under the terms of the GPL license. Conky is able to monitor many system variables including CPU, memory, swap, disk space, temperature, top, upload, download, system messages, and much more. It is extremely configurable, however, the configuration can be a little hard to understand. Conky is a fork of torsmo.
 
Conky is a system monitor software for the X Window System. It is available for GNU/Linux and FreeBSD. It is free software released under the terms of the GPL license. Conky is able to monitor many system variables including CPU, memory, swap, disk space, temperature, top, upload, download, system messages, and much more. It is extremely configurable, however, the configuration can be a little hard to understand. Conky is a fork of torsmo.
  
==Installation and configuration==
+
== Installation and configuration ==
*[[pacman|Install]] the {{Pkg|conky}} package which is available in the [[Official Repositories|official repositories]].
+
 
*Edit the {{ic|~/.conkyrc}} config file using an example configuration file from [http://conky.sourceforge.net/screenshots.html homeproject-screenshot]
+
* [[pacman|Install]] the {{Pkg|conky}} package which is available in the [[official repositories]].
*Alternatively, you can use the default config at {{ic|/etc/conky/conky.conf}}:
+
* Edit the {{ic|~/.conkyrc}} config file using an example configuration file from [http://conky.sourceforge.net/screenshots.html homeproject-screenshot]
 +
When editing your config file, you will see immediately the effect of any change as soon as you save it. There is no need to log out/log in your X session. So best is to test all kind of options, one by one, save the configuration file and see the change on your conky window, and correct if your change is unappropriated.
 +
* Alternatively, you can use the default config at {{ic|/etc/conky/conky.conf}}:
 
  $ cp /etc/conky/conky.conf ~/.conkyrc
 
  $ cp /etc/conky/conky.conf ~/.conkyrc
 +
Best is to use a local {{ic|~/.conkyrc}} config.
 +
As many apps, conky will first try to look for a local {{ic|.conkyrc}} file. If this one doesn't exist, then it will read the default one in {{ic|/etc/conky}}.
  
* If conky does not accept changes -- e.g. minimum_size -- you made to {{ic|~/.conkyrc}} make sure you cleared {{ic|/etc/conky/conky.conf}} or commented out the relevant section
+
In case you store your configuration locally, e.g. in your home directory, you will not be able to read any log files unless you do some changes. One of the nice features of conky is to pipe to your desktop some {{ic|/var/log/}} files to read all kinds of log messages. Most of these files can only be read by {{ic|root}}, and you will thus need to {{ic|sudo}} conky. Starting conky as {{ic|root}} is not recommended, so you will need to make this following changes:
 +
$ usermod -aG log username
 +
You add {{ic|username}} to the {{ic|log group}}. Now {{ic|username}} can read log files, and you will be able to redirect log messages with conky on your desktop.
  
==AUR packages==
+
* If conky does not accept changes -- e.g. minimum_size -- you made to {{ic|~/.conkyrc}} make sure you cleared {{ic|/etc/conky/conky.conf}} or commented out the relevant section.Best is to remove files in {{ic|/etc/conky/}}, as conky will keep reading them and this can give you some Xorg error messages.
  
In addition to the basic {{Pkg|conky}} package in the [[Official Repositories|official repositories]], there are various [[Arch User Repository|AUR]] packages available with extra compile options enabled.
+
== AUR packages ==
  
*Install {{AUR|conky-cli}} for conky without X11 dependencies
+
In addition to the basic '''conky''' package, there are various [[AUR]] packages available with extra compile options enabled:
*Install {{AUR|conky-nvidia}} for nvidia support.
+
 
*Install {{AUR|conky-lua}} for lua support.
+
* {{App|conky-cli|Conky without X11 dependencies||{{AUR|conky-cli}}}}
*Install {{AUR|conky-lua-nv}} for both lua and nvidia support.
+
* {{App|conky-lua|Conky with Lua support||{{AUR|conky-lua}}}}
 +
* {{App|conky-lua-nv|Conky with both Lua and Nvidia support||{{AUR|conky-lua-nv}}}}
 +
* {{App|conky-nvidia|Conky with Nvidia support||{{AUR|conky-nvidia}}}}
 +
 
 +
== Tips and tricks ==
 +
 
 +
=== Enable real transparency in KDE4 and Xfce4 ===
  
==Tips and tricks==
 
===Enable real transparency in KDE4 and XFCE4===
 
 
Since version 1.8.0, Conky suppports real transparency. To enable it add this line to {{ic|~/.conkyrc}}:
 
Since version 1.8.0, Conky suppports real transparency. To enable it add this line to {{ic|~/.conkyrc}}:
 
  own_window_transparent yes
 
  own_window_transparent yes
Line 34: Line 43:
 
This replaces the {{Pkg|feh}} method described below.
 
This replaces the {{Pkg|feh}} method described below.
  
===Autostart with xfce4===
+
=== Autostart with Xfce4 ===
 +
 
 
In {{ic|.conkyrc}} file:
 
In {{ic|.conkyrc}} file:
 
  background yes
 
  background yes
Line 40: Line 50:
 
This variable will fork Conky to your background.
 
This variable will fork Conky to your background.
 
If you want to make your window always visible on your desktop, sticky across all workspaces and not showing in your taskbar, add these arguments:
 
If you want to make your window always visible on your desktop, sticky across all workspaces and not showing in your taskbar, add these arguments:
  own_windows yes
+
  own_window yes
  own_windows_type override
+
  own_window_type override
 
The override option makes your window out of control of your window manager.
 
The override option makes your window out of control of your window manager.
  
Line 56: Line 66:
 
  Hidden=false
 
  Hidden=false
  
===Prevent flickering===
+
=== Prevent flickering ===
Conky needs Double Buffer Extension (DBE) support from the X server to prevent flickering because it cannot update the window fast enough without it. It can be enabled in {{ic|/etc/X11/xorg.conf}} with {{ic|Load "dbe"}} line in {{ic|Section "Module"}}. The xorg.conf file has been replaced (1.8.x patch upwards) by {{ic|/etc/X11/xorg.conf.d}} which contains the particular configuration files. ''DBE'' is loaded automatically.
+
  
To verify:
+
Conky needs Double Buffer Extension (DBE) support from the X server to prevent flickering because it cannot update the window fast enough without it. It can be enabled in {{ic|/etc/X11/xorg.conf}} with {{ic|Load "dbe"}} line in {{ic|Section "Module"}}. The xorg.conf file has been replaced (1.8.x patch upwards) by {{ic|/etc/X11/xorg.conf.d}} which contains the particular configuration files. ''DBE'' is loaded automatically.
$ grep dbe /var/log/Xorg.0.log
+
 
+
Output (should be similar):
+
[  3286.101] (II) LoadModule: "dbe"
+
[  3286.101] (II) Loading /usr/lib/xorg/modules/extensions/libdbe.so
+
[  3286.111] (II) Module dbe: vendor="X.Org Foundation"
+
  
 
To enable double-buffer check to have in {{ic|~/.conkyrc}}:
 
To enable double-buffer check to have in {{ic|~/.conkyrc}}:
Line 71: Line 74:
 
  double_buffer yes
 
  double_buffer yes
  
===Dual Screen===
+
=== Custom colors ===
 +
 
 +
Aside the classic preset colors (white, black, yellow...), you can set your own custom color using the color name code. To determine the code of a color, use a color selector app. The basic {{Pkg|gcolor2}} package in the [[Official Repositories|official repositories]] will give you the color name. It is made of a series of letters and numbers.
 +
Add this line in your configuration file for a custom color:
 +
color1    Colorname1
 +
color2    Colorname2
 +
Then, when editing the TEXT section, use custom color number previously defined.
 +
 
 +
=== Dual Screen ===
 +
 
 
When using a dual screen configuration, you will need to play with two options to place your conky window.
 
When using a dual screen configuration, you will need to play with two options to place your conky window.
 
Let's say you are running a 1680X1050 pixels resolution, and you want the window on middle top of your left monitor, you will use this:
 
Let's say you are running a 1680X1050 pixels resolution, and you want the window on middle top of your left monitor, you will use this:
Line 78: Line 90:
 
The alignment option is trivial, and gap_X option is the distance, in pixels, from the left border of your screen.
 
The alignment option is trivial, and gap_X option is the distance, in pixels, from the left border of your screen.
  
 +
=== Do not minimize on Show Desktop ===
  
===Do not minimize on Show Desktop (Compiz)===
+
'''Using Compiz:''' If the 'Show Desktop' button or key-binding minimizes Conky along with all other windows, start the Compiz configuration settings manager, go to "General Options" and uncheck the "Hide Skip Taskbar Windows" option.
If the 'Show Desktop' button or key-binding minimizes Conky along with all other windows, start the Compiz configuration settings manager, go to "General Options" and uncheck the "Hide Skip Taskbar Windows" option.
+
  
===Integrate with KDesktop===
+
If you do not use Compiz, try editing {{ic|~/.conkyrc}} and adding/changing the following line:
Conky with screenshot configuration generate problems with icons visualization. So there are some steps to follow.
+
 
 +
own_window_type override
 +
 
 +
=== Integrate with Gnome 3 ===
 +
 
 +
Some have experienced problems with Conky showing up under Gnome 3.
 
*Add these lines to {{ic|~/.conkyrc}}:
 
*Add these lines to {{ic|~/.conkyrc}}:
 +
own_window yes
 +
own_window_type conky
 +
own_window_transparent yes
 +
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
 +
 +
If you still experience problems with transparency. You could add these lines.
 +
own_window_argb_visual yes
 +
own_window_argb_value 255
 +
 +
=== Integrate with KDE ===
 +
 +
Conky with screenshot configuration generate problems with icons visualization. So there are some steps to follow.
 +
* Add these lines to {{ic|~/.conkyrc}}:
 
  own_window yes
 
  own_window yes
 
  own_window_type normal
 
  own_window_type normal
 
  own_window_transparent yes
 
  own_window_transparent yes
 
  own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
 
  own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
*If this setting is on, comment it out or delete the line:
+
* If this setting is on, comment it out or delete the line:
 
  minimum_size
 
  minimum_size
*To automatically start Conky, create this symlink:
+
* To automatically start Conky, create this symlink:
$ ln -s /usr/bin/conky ~/.kde/share/autostart/conkylink
+
** KDE4:
For KDE4 users:
+
 
  $ ln -s /usr/bin/conky ~/.kde4/Autostart/conkylink
 
  $ ln -s /usr/bin/conky ~/.kde4/Autostart/conkylink
*[[pacman|Install]] the {{Pkg|feh}} package which is available in the [[Official Repositories|official repositories]].
+
** KDE3:
*Make a script to allow transparency with the desktop
+
$ ln -s /usr/bin/conky ~/.kde/share/autostart/conkylink
For KDE3 users
+
* Install the {{Pkg|feh}} package which is available in the official repositories.
$ nano -w ~/.kde/share/autostart/fehconky  
+
* Make a script to allow transparency with the desktop
 +
In KDE4 edit {{ic|~/.kde4/Autostart/fehconky}}:
  
 
  #!/bin/bash
 
  #!/bin/bash
  feh --bg-scale `dcop kdesktop KBackgroundIface currentWallpaper 1`
+
  feh --bg-scale "$(sed -n 's/wallpaper=//p' ~/.kde4/share/config/plasma-desktop-appletsrc)"
For KDE4 users
+
 
$ nano -w ~/.kde4/Autostart/fehconky
+
In KDE3 edit {{ic|~/.kde/share/autostart/fehconky}}:
  
 
  #!/bin/bash
 
  #!/bin/bash
  feh --bg-scale "`grep 'wallpaper=' ~/.kde4/share/config/plasma-desktop-appletsrc | tail --lines=1 | sed 's/wallpaper=//'`"
+
  feh --bg-scale $(dcop kdesktop KBackgroundIface currentWallpaper 1)
 +
 
 
use {{ic|--bg-center}} if you use a centered wallpaper.
 
use {{ic|--bg-center}} if you use a centered wallpaper.
*Make it executable
+
 
$ chmod +x ~/.kde/share/autostart/fehconky
+
* Make it executable:
KDE4
+
** KDE4:
 
  $ chmod +x ~/.kde4/Autostart/fehconky
 
  $ chmod +x ~/.kde4/Autostart/fehconky
*Instead of using a script, you can add the corresponding line to the bottom of {{ic|~/.conkyrc}}
+
** KDE3:
For KDE3
+
$ chmod +x ~/.kde/share/autostart/fehconky
  ${exec feh --bg-scale `dcop kdesktop KBackgroundIface currentWallpaper 1`}
+
* Instead of using a script, you can add the corresponding line to the bottom of {{ic|~/.conkyrc}}
For KDE4
+
** For KDE4
  ${exec feh --bg-scale "`grep 'wallpaper=' ~/.kde4/share/config/plasma-desktop-appletsrc | tail --lines=1 | sed 's/wallpaper=//'`"}
+
  ${exec feh --bg-scale "$(sed -n 's/wallpaper=//p' ~/.kde4/share/config/plasma-desktop-appletsrc)"}
 +
** For KDE3
 +
  ${exec feh --bg-scale $(dcop kdesktop KBackgroundIface currentWallpaper 1)}
 +
 
 +
=== Integrate with Razor-qt ===
 +
 
 +
With Conky's default configuration, its window might disappear from the desktop when you click on the latter.
 +
Add these lines to:
 +
{{hc|~/.conkyrc|own_window yes
 +
own_window_class Conky
 +
own_window_type normal
 +
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
 +
own_window_transparent yes
 +
}}
 +
 
 +
=== Display package update information ===
 +
 
 +
* [https://bbs.archlinux.org/viewtopic.php?id=68104 Paconky] - Displays package update information in a user-defined format. The output of this program can be included in Conky with the {{ic|<nowiki>${execpi}</nowiki>}} command.
 +
* [https://bbs.archlinux.org/viewtopic.php?id=53761 Scrolling Notifications] - Prints scrolling update notifications. From the author of Paconky.
 +
* [https://bbs.archlinux.org/viewtopic.php?id=57291 Perl Script] - Simpler and earlier script from the author of Paconky. Prints only the number of packages needing an update.
 +
* [https://bbs.archlinux.org/viewtopic.php?id=37284 Python Script] - Fairly configurable update notification program in [[Python]].
 +
* [https://bbs.archlinux.org/viewtopic.php?pid=483742#p483742 Bash Script] - [[Bash]] script for users that have enabled ShowSize.
  
===Display package update information===
+
=== Display weather forecast ===
*[https://bbs.archlinux.org/viewtopic.php?id=68104 Paconky] - Displays package update information in a user-defined format. The output of this program can be included in Conky with the {{ic|<nowiki>${execpi}</nowiki>}} command.
+
*[https://bbs.archlinux.org/viewtopic.php?id=53761 Scrolling Notifications] - Prints scrolling update notifications. From the author of Paconky.
+
*[https://bbs.archlinux.org/viewtopic.php?id=57291 Perl Script] - Simpler and earlier script from the author of Paconky. Prints only the number of packages needing an update.
+
*[https://bbs.archlinux.org/viewtopic.php?id=37284 Python Script] - Fairly configurable update notification program in [[Python]].
+
*[https://bbs.archlinux.org/viewtopic.php?pid=483742#p483742 Bash Script] - [[Bash]] script for users that have enabled ShowSize.
+
  
===Display weather forecast===
 
 
See [https://bbs.archlinux.org/viewtopic.php?id=37381 this thread].
 
See [https://bbs.archlinux.org/viewtopic.php?id=37381 this thread].
  
===Display RSS feeds===
+
=== Display RSS feeds ===
Conky has the ability to display RSS feeds natively without the need for an outside script to run and output into Conky. For example, to display the titles of the ten most recent Planet Arch updates and refresh the feed every minute, you would put this into your {{ic|~/.conkyrc}}:
+
  
  ${rss http://planet.archlinux.org/rss20.xml 1 item_titles 10 }
+
Conky has the ability to display RSS feeds natively without the need for an outside script to run and output into Conky. For example, to display the titles of the ten most recent Planet Arch updates and refresh the feed every minute, you would put this into your {{ic|~/.conkyrc}} in the TEXT section:
 +
 
 +
  ${rss https://planet.archlinux.org/rss20.xml 1 item_titles 10 }
 +
If you want to display Arch Forum rss feed, add this line:
 +
${rss https://bbs.archlinux.org/extern.php?action=feed&type=rss 1 item_titles 4}
 +
where 1 is in minutes the refresh interval (15 mn is default),4 the number of items you wish to show.
 +
 
 +
=== Display Distrowatch Arch Linux ranking ===
  
===Display Distrowatch Arch Linux ranking===
 
 
See [https://bbs.archlinux.org/viewtopic.php?id=88779 this thread].
 
See [https://bbs.archlinux.org/viewtopic.php?id=88779 this thread].
  
===Display rTorrent stats===
+
=== Display rTorrent stats ===
 +
 
 
See [https://bbs.archlinux.org/viewtopic.php?id=67304 this thread].
 
See [https://bbs.archlinux.org/viewtopic.php?id=67304 this thread].
  
===Display number of new emails (Gmail)===
+
=== Display your WordPress blog stats ===
 +
 
 +
This can be achieved by using the in python written extension named [http://evilshit.wordpress.com/2013/04/20/conkypress-a-wordpress-stats-visualization-tool-for-your-desktop/ ConkyPress].
 +
 
 +
=== Display number of new emails (Gmail) ===
 +
 
 
Create a file named {{ic|gmail.py}} in a convenient location (this example uses {{ic|~/.scripts/}}) with the following [[Python]] code:
 
Create a file named {{ic|gmail.py}} in a convenient location (this example uses {{ic|~/.scripts/}}) with the following [[Python]] code:
  import os
+
  #!/usr/bin/env python
 
+
   
  #Enter your username and password below within double quotes
+
  from urllib.request import FancyURLopener
  # eg. username="username" and password="password"
+
  username="****"
+
username = 'your username'
  password="****"
+
password = 'your password'
com="wget -q -O - https://"+username+":"+password+"@mail.google.com/mail/feed/atom --no-check-certificate"
+
   
  temp=os.popen(com)
+
  url = 'https://%s:%s@mail.google.com/mail/feed/atom' % (username, password)
  msg=temp.read()
+
   
  index=msg.find("<fullcount>")
+
opener = FancyURLopener()
  index2=msg.find("</fullcount>")
+
page = opener.open(url)
  fc=int(msg[index+11:index2])
+
   
  print(str(fc)+" new")
+
contents = page.read().decode('utf-8')
 +
   
 +
 +
ifrom = contents.index('<fullcount>') + 11
 +
  ito  = contents.index('</fullcount>')
 +
   
 +
unread = contents[ifrom:ito]
 +
 +
  print(unread)
  
Some users report problems with wget. If this script returns a ValueError, try replacing the wget line with
+
With a Google App mail account, the above username variable must contain your domain:
[[Python]] code:
+
  username = 'user@yourdomain.com'
  com='curl -s -u "{}:{}" https://mail.google.com/mail/feed/atom'.format(username, password)
+
{{Note|Regular Gmail users input only your username without @gmail.com}}
as suggested [https://bbs.archlinux.org/viewtopic.php?id=130608 here]. A similar change can be made if using a Google App mail account (below).
+
 
 +
You can also use Python's urllib as follows.
 +
import urllib.request
 +
from xml.etree import ElementTree as etree
 +
 +
# Enter your username and password below within quotes below, in place of ****.
 +
# Set up authentication for gmail
 +
auth_handler = urllib.request.HTTPBasicAuthHandler()
 +
auth_handler.add_password(realm='New mail feed',
 +
                          uri='https://mail.google.com/',
 +
                          user= '****',
 +
                          passwd= '****')
 +
opener = urllib.request.build_opener(auth_handler)
 +
# ...and install it globally so it can be used with urlopen.
 +
urllib.request.install_opener(opener)
 +
 +
gmail = 'https://mail.google.com/gmail/feed/atom'
 +
NS = '{http://purl.org/atom/ns#}'
 +
with urllib.request.urlopen(gmail) as source:
 +
    tree = etree.parse(source)
 +
fullcount = tree.find(NS + 'fullcount').text
 +
print(fullcount + ' new')
  
 
Add the following string to your {{ic|~/.conkyrc}} in order the check your Gmail account for new email every five minutes (300 seconds) and display:
 
Add the following string to your {{ic|~/.conkyrc}} in order the check your Gmail account for new email every five minutes (300 seconds) and display:
 
  ${execpi 300 python ~/.scripts/gmail.py}
 
  ${execpi 300 python ~/.scripts/gmail.py}
  
====Other Methods====
+
==== Other Methods ====
 +
 
 
The same way, but with using {{ic|grep}} and {{ic|sed}} for filtering output of {{ic|wget}}:
 
The same way, but with using {{ic|grep}} and {{ic|sed}} for filtering output of {{ic|wget}}:
 
   
 
   
Line 199: Line 286:
 
Here I used * as the password for Conky to ask for it at start, but you do not ''have'' to do it.
 
Here I used * as the password for Conky to ask for it at start, but you do not ''have'' to do it.
  
====Google Apps====
+
=== Display new emails (IMAP + SSL) ===
The above Python script did not work for me and my Google Apps account. I modified the script below to work with a Google App mail account [[Python]] code:
+
import os
+
 
+
#Enter your domain, username and password below within double quotes
+
# eg. domain="yourdomain.com", username="username" and password="password"
+
domain="yourdomain.com"
+
username="username"
+
password="password"
+
com="wget -q -O - https://mail.google.com/a/"+domain+"/feed/atom --http-user="+username+"@"+domain+" --http-password="+password+" --no-check-certificate"
+
temp=os.popen(com)
+
msg=temp.read()
+
index=msg.find("<fullcount>")
+
index2=msg.find("</fullcount>")
+
fc=int(msg[index+11:index2])
+
print(str(fc)+" new")
+
  
===Display new emails (IMAP + SSL)===
 
 
Conky has built in support for IMAP accounts but does not support SSL. This can be provided using this script from [http://www.unix.com/shell-programming-scripting/115322-perl-conky-gmail-imap-unread-message-count.html this forum post]. This requires the Perl/CPAN Modules Mail::IMAPClient and IO::Socket::SSL which are in the {{AUR|perl-mail-imapclient}} and {{Pkg|perl-io-socket-ssl}} packages
 
Conky has built in support for IMAP accounts but does not support SSL. This can be provided using this script from [http://www.unix.com/shell-programming-scripting/115322-perl-conky-gmail-imap-unread-message-count.html this forum post]. This requires the Perl/CPAN Modules Mail::IMAPClient and IO::Socket::SSL which are in the {{AUR|perl-mail-imapclient}} and {{Pkg|perl-io-socket-ssl}} packages
  
Line 258: Line 329:
 
  ${execpi 300 ~/.conky/imap.pl}  
 
  ${execpi 300 ~/.conky/imap.pl}  
 
or wherever you saved the file.
 
or wherever you saved the file.
 +
 +
If you use Gmail you might need to [http://www.google.com/accounts/IssuedAuthSubTokens?hide_authsub=1 generate] an application specific password.
  
 
Alternatively, you can use stunnel as shown above: [[Conky#How to display the number of new emails (Gmail) in Conky]]
 
Alternatively, you can use stunnel as shown above: [[Conky#How to display the number of new emails (Gmail) in Conky]]
 +
 +
=== Fix scrolling with UTF-8 multibyte characters ===
 +
 +
The current version of conky (1.9.0) suffers from a bug (http://sourceforge.net/p/conky/bugs/341/) where scrolling text increments by byte, not by character, resulting in text containing multibyte characters to disappear and reappear while scrolling.  A package with a patch fixing this bug can be found in the AUR: {{AUR|conky-utfscroll}}
  
 
== User-contributed configuration examples ==
 
== User-contributed configuration examples ==
 +
 
=== Graysky ===
 
=== Graysky ===
[[http://img9.imageshack.us/img9/3153/imageffj.jpg Screen shot]]
 
  
[[https://github.com/graysky2/configs/raw/master/dotfiles/.conkyrc Here]] it is - modify to fit your system.  Optimized for a quad core chip w/ several hdds (although one of them is not connected for this screenshot) and an nvidia graphics card.  You can easily modify this to a dual or single core system with one or whatever number of hdds.
+
[[http://img9.imageshack.us/img9/3153/imageffj.jpg Screenshot]].
  
==A sample rings script with nvidia support:==
+
[[https://raw.github.com/graysky2/configs/5fbe513918dfe8066f87e670108318464902afae/dotfiles/.conkyrc Here]] it is - modify to fit your system. Optimized for a quad core chip w/ several hdds (although one of them is not connected for this screenshot) and an nvidia graphics card. You can easily modify this to a dual or single core system with one or whatever number of hdds.
 +
 
 +
=== A sample rings script with nvidia support===
  
 
{{bc|1=
 
{{bc|1=
1 # -- Conky settings -- #
+
# -- Conky settings -- #
  2 background no
+
background no
  3 update_interval 1
+
update_interval 1
  4
+
  5 cpu_avg_samples 2
+
  6 net_avg_samples 2
+
  7
+
  8 override_utf8_locale yes
+
  9
+
10 double_buffer yes
+
11 no_buffers yes
+
12
+
13 text_buffer_size 2048
+
14 imlib_cache_size 0
+
15
+
16 # -- Window specifications -- #
+
17
+
18 own_window yes
+
19 own_window_type normal
+
20 own_window_transparent yes
+
21 own_window_hints undecorate,sticky,skip_taskbar,skip_pager,below
+
22
+
23 border_inner_margin 0
+
24 border_outer_margin 0
+
25
+
26 minimum_size 320 800
+
27 maximum_width 320
+
28
+
29 alignment bottom_right
+
30 gap_x 0
+
31 gap_y 0
+
32
+
33 # -- Graphics settings -- #
+
34 draw_shades no
+
35 draw_outline no
+
36 draw_borders no
+
37 draw_graph_borders yes
+
38
+
39 # -- Text settings -- #
+
40 use_xft yes
+
41 xftfont MaiandraGD:size=24
+
42 xftalpha 0.4
+
43
+
44 uppercase no
+
45
+
46 default_color 888888
+
47
+
48 # -- Lua Load -- #
+
49 lua_load ~/conky/lua/lua.lua
+
50 lua_draw_hook_pre ring_stats
+
51
+
52 TEXT
+
53 ${alignr}${voffset 53}${goto 90}${font MaiandraGD:size=11}${time %A, %d %B %Y}
+
54
+
55
+
56 ${voffset 5}${goto 164}${font MaiandraGD:size=16}${time %H:%M}
+
57
+
58
+
59
+
60 ${voffset -40}${goto 100}${font MaiandraGD:size=9}Kernel:${offset 70}Uptime:
+
61 ${goto 90}${font MaiandraGD:size=9}$kernel${offset 40}$uptime
+
62 ${voffset 57}${goto 117}${font snap:size=8}${cpu cpu0}%
+
63 ${goto 117}${cpu cpu1}%
+
64 ${goto 117}CPU
+
65 ${voffset 19}${goto 145}${memperc}%
+
66 ${goto 145}$swapperc%
+
67 ${goto 145}MEM
+
68 ${voffset 25}${goto 170}${nvidia gpufreq}
+
69 ${goto 170}${nvidia memfreq}
+
70 ${goto 170}GPU
+
71 ${voffset 27}${goto 198}${totaldown ppp0}
+
72 ${goto 198}${totalup ppp0}
+
73 ${goto 205}NET
+
74 ${voffset 21}
+
75 ${goto 222}${fs_used /home}
+
76 ${goto 230}DISK
+
  
 +
cpu_avg_samples 2
 +
net_avg_samples 2
 +
 +
override_utf8_locale yes
 +
 +
double_buffer yes
 +
no_buffers yes
 +
 +
text_buffer_size 2048
 +
imlib_cache_size 0
 +
 +
# -- Window specifications -- #
 +
 +
own_window yes
 +
own_window_type normal
 +
own_window_transparent yes
 +
own_window_hints undecorate,sticky,skip_taskbar,skip_pager,below
 +
 +
border_inner_margin 0
 +
border_outer_margin 0
 +
 +
minimum_size 320 800
 +
maximum_width 320
 +
 +
alignment bottom_right
 +
gap_x 0
 +
gap_y 0
 +
 +
# -- Graphics settings -- #
 +
draw_shades no
 +
draw_outline no
 +
draw_borders no
 +
draw_graph_borders yes
 +
 +
# -- Text settings -- #
 +
use_xft yes
 +
xftfont MaiandraGD:size=24
 +
xftalpha 0.4
 +
 +
uppercase no
 +
 +
default_color 888888
 +
 +
# -- Lua Load -- #
 +
lua_load ~/conky/lua/lua.lua
 +
lua_draw_hook_pre ring_stats
 +
 +
TEXT
 +
${alignr}${voffset 53}${goto 90}${font MaiandraGD:size=11}${time %A, %d %B %Y}
 +
 +
 +
${voffset 5}${goto 164}${font MaiandraGD:size=16}${time %H:%M}
 +
 +
 +
 +
${voffset -40}${goto 100}${font MaiandraGD:size=9}Kernel:${offset 70}Uptime:
 +
${goto 90}${font MaiandraGD:size=9}$kernel${offset 40}$uptime
 +
${voffset 57}${goto 117}${font snap:size=8}${cpu cpu0}%
 +
${goto 117}${cpu cpu1}%
 +
${goto 117}CPU
 +
${voffset 19}${goto 145}${memperc}%
 +
${goto 145}$swapperc%
 +
${goto 145}MEM
 +
${voffset 25}${goto 170}${nvidia gpufreq}
 +
${goto 170}${nvidia memfreq}
 +
${goto 170}GPU
 +
${voffset 27}${goto 198}${totaldown ppp0}
 +
${goto 198}${totalup ppp0}
 +
${goto 205}NET
 +
${voffset 21}
 +
${goto 222}${fs_used /home}
 +
${goto 230}DISK
 
}}
 
}}
*And the required lua.lua script:
+
 
 +
And the required lua.lua script:
  
 
{{bc|1=
 
{{bc|1=
1 --[[
+
--[[
  2 Ring Meters by londonali1010 (2009)
+
Ring Meters by londonali1010 (2009)
  3  
+
 
  4 This script draws percentage meters as rings. It is fully customisable; all options are described in the script.
+
  This script draws percentage meters as rings. It is fully customisable; all options are described in the script.
  5  
+
 
  6 IMPORTANT: if you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away. The if s    tatement on line 145 uses a delay to make sure that this does not happen. It calculates the length of the delay by the number of updat    es since Conky started. Generally, a value of 5s is long enough, so if you update Conky every 1s, use update_num > 5 in that if state    ment (the default). If you only update Conky every 2s, you should change it to update_num > 3; conversely if you update Conky every 0   .5s, you should use update_num > 10. ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it, otherwise     the update_num will not be reset and you will get an error.
+
  IMPORTANT: if you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away. The if statement on line 145 uses a delay to make sure that this does not happen. It calculates the length of the delay by the number of updates since Conky started. Generally, a value of 5s is long enough, so if you update Conky every 1s, use update_num > 5 in that if statement (the default). If you only update Conky every 2s, you should change it to update_num > 3; conversely if you update Conky every 0.5s, you should use update_num > 10. ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it, otherwise the update_num will not be reset and you will get an error.
  7  
+
 
  8 To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua):
+
  To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua):
  9        lua_load ~/scripts/rings-v1.2.1.lua
+
        lua_load ~/scripts/rings-v1.2.1.lua
10        lua_draw_hook_pre ring_stats
+
        lua_draw_hook_pre ring_stats
11 
+
 
  12 Changelog:
+
  Changelog:
  13 + v1.2.1 -- Fixed minor bug that caused script to crash if conky_parse() returns a nil value (20.10.2009)
+
  + v1.2.1 -- Fixed minor bug that caused script to crash if conky_parse() returns a nil value (20.10.2009)
  14 + v1.2 -- Added option for the ending angle of the rings (07.10.2009)
+
  + v1.2 -- Added option for the ending angle of the rings (07.10.2009)
  15 + v1.1 -- Added options for the starting angle of the rings, and added the "max" variable, to allow for variables that output a numer    ical value rather than a percentage (29.09.2009)
+
  + v1.1 -- Added options for the starting angle of the rings, and added the "max" variable, to allow for variables that output a numerical value rather than a percentage (29.09.2009)
  16 + v1.0 -- Original release (28.09.2009)
+
  + v1.0 -- Original release (28.09.2009)
  17 ]]
+
  ]]
  18
+
   
  19 settings_table = {
+
  settings_table = {
20        {
+
        {
21                -- Edit this table to customise your rings.
+
                -- Edit this table to customise your rings.
22                -- You can create more rings simply by adding more elements to settings_table.
+
                -- You can create more rings simply by adding more elements to settings_table.
23                -- "name" is the type of stat to display; you can choose from 'cpu', 'memperc', 'fs_used_perc', 'battery_used_perc'.
+
                -- "name" is the type of stat to display; you can choose from 'cpu', 'memperc', 'fs_used_perc', 'battery_used_perc'.
24                name='time',
+
                name='time',
25                -- "arg" is the argument to the stat type, e.g. if in Conky you would write ${cpu cpu0}, 'cpu0' would be the argument   . If you would not use an argument in the Conky variable, use ''.
+
                -- "arg" is the argument to the stat type, e.g. if in Conky you would write ${cpu cpu0}, 'cpu0' would be the argument. If you would not use an argument in the Conky variable, use ''.
26                arg='%I.%M',
+
                arg='%I.%M',
27                -- "max" is the maximum value of the ring. If the Conky variable outputs a percentage, use 100.
+
                -- "max" is the maximum value of the ring. If the Conky variable outputs a percentage, use 100.
28                max=12,
+
                max=12,
29                -- "bg_colour" is the colour of the base ring.
+
                -- "bg_colour" is the colour of the base ring.
30                bg_colour=0x888888,
+
                bg_colour=0x888888,
31                -- "bg_alpha" is the alpha value of the base ring.
+
                -- "bg_alpha" is the alpha value of the base ring.
32                bg_alpha=0.3,
+
                bg_alpha=0.3,
33                -- "fg_colour" is the colour of the indicator part of the ring.
+
                -- "fg_colour" is the colour of the indicator part of the ring.
34                fg_colour=0x888888,
+
                fg_colour=0x888888,
35                -- "fg_alpha" is the alpha value of the indicator part of the ring.
+
                -- "fg_alpha" is the alpha value of the indicator part of the ring.
36                fg_alpha=0.5,
+
                fg_alpha=0.5,
37                -- "x" and "y" are the x and y coordinates of the centre of the ring, relative to the top left corner of the Conky wi    ndow.
+
                -- "x" and "y" are the x and y coordinates of the centre of the ring, relative to the top left corner of the Conky window.
38                x=191, y=145,
+
                x=191, y=145,
39                -- "radius" is the radius of the ring.
+
                -- "radius" is the radius of the ring.
40                radius=32,
+
                radius=32,
41                -- "thickness" is the thickness of the ring, centred around the radius.
+
                -- "thickness" is the thickness of the ring, centred around the radius.
42                thickness=4,
+
                thickness=4,
43                -- "start_angle" is the starting angle of the ring, in degrees, clockwise from top. Value can be either positive or n    egative.
+
                -- "start_angle" is the starting angle of the ring, in degrees, clockwise from top. Value can be either positive or negative.
44                start_angle=0,
+
                start_angle=0,
45                -- "end_angle" is the ending angle of the ring, in degrees, clockwise from top. Value can be either positive or negat    ive, but must be larger (e.g. more clockwise) than start_angle.
+
                -- "end_angle" is the ending angle of the ring, in degrees, clockwise from top. Value can be either positive or negative, but must be larger (e.g. more clockwise) than start_angle.
46                end_angle=360
+
                end_angle=360
47        },
+
        },
48        {
+
        {
49                name='time',
+
                name='time',
50                arg='%M.%S',
+
                arg='%M.%S',
51                max=60,
+
                max=60,
52                bg_colour=0x888888,
+
                bg_colour=0x888888,
53                bg_alpha=0.3,
+
                bg_alpha=0.3,
54                fg_colour=0x888888,
+
                fg_colour=0x888888,
55                fg_alpha=0.5,
+
                fg_alpha=0.5,
56                x=191, y=145,
+
                x=191, y=145,
57                radius=37,
+
                radius=37,
58                thickness=4,
+
                thickness=4,
59                start_angle=0,
+
                start_angle=0,
60                end_angle=360
+
                end_angle=360
61        },
+
        },
62        {
+
        {
63                name='time',
+
                name='time',
64                arg='%S',
+
                arg='%S',
65                max=60,
+
                max=60,
66                bg_colour=0x888888,
+
                bg_colour=0x888888,
67                bg_alpha=0.3,
+
                bg_alpha=0.3,
68                fg_colour=0x888888,
+
                fg_colour=0x888888,
69                fg_alpha=0.5,
+
                fg_alpha=0.5,
70                x=191, y=145,
+
                x=191, y=145,
71                radius=42,
+
                radius=42,
72                thickness=4,
+
                thickness=4,
73                start_angle=0,
+
                start_angle=0,
74                end_angle=360
+
                end_angle=360
75        },
+
        },
76        {
+
        {
77                name='cpu',
+
                name='cpu',
78                arg='cpu0',
+
                arg='cpu0',
79                max=100,
+
                max=100,
80                bg_colour=0x888888,
+
                bg_colour=0x888888,
81                bg_alpha=0.3,
+
                bg_alpha=0.3,
82                fg_colour=0x888888,
+
                fg_colour=0x888888,
83                fg_alpha=0.5,
+
                fg_alpha=0.5,
84                x=140, y=300,
+
                x=140, y=300,
85                radius=26,
+
                radius=26,
86                thickness=5,
+
                thickness=5,
87                start_angle=-90,
+
                start_angle=-90,
88                end_angle=180
+
                end_angle=180
89        },
+
        },
90        {
+
        {
91                name='cpu',
+
                name='cpu',
92                arg='cpu1',
+
                arg='cpu1',
93                max=100,
+
                max=100,
94                bg_colour=0x888888,
+
                bg_colour=0x888888,
95                bg_alpha=0.3,
+
                bg_alpha=0.3,
96                fg_colour=0x888888,
+
                fg_colour=0x888888,
97                fg_alpha=0.5,
+
                fg_alpha=0.5,
98                x=140, y=300,
+
                x=140, y=300,
99                radius=20,
+
                radius=20,
100                thickness=5,
+
                thickness=5,
101                start_angle=-90,
+
                start_angle=-90,
102                end_angle=180
+
                end_angle=180
103        },
+
        },
104        {
+
        {
105                name='memperc',
+
                name='memperc',
106                arg='',
+
                arg='',
107                max=100,
+
                max=100,
108                bg_colour=0x888888,
+
                bg_colour=0x888888,
109                bg_alpha=0.3,
+
                bg_alpha=0.3,
110                fg_colour=0x888888,
+
                fg_colour=0x888888,
111                fg_alpha=0.5,
+
                fg_alpha=0.5,
112                x=170, y=350,
+
                x=170, y=350,
113                radius=26,
+
                radius=26,
114                thickness=5,
+
                thickness=5,
115                start_angle=-90,
+
                start_angle=-90,
116                end_angle=180
+
                end_angle=180
117        },
+
        },
118        {
+
        {
119                name='swapperc',
+
                name='swapperc',
120                arg='',
+
                arg='',
121                max=100,
+
                max=100,
122                bg_colour=0x888888,
+
                bg_colour=0x888888,
123                bg_alpha=0.3,
+
                bg_alpha=0.3,
124                fg_colour=0x888888,
+
                fg_colour=0x888888,
125                fg_alpha=0.5,
+
                fg_alpha=0.5,
126                x=170, y=350,
+
                x=170, y=350,
127                radius=20,
+
                radius=20,
128                thickness=5,
+
                thickness=5,
129                start_angle=-90,
+
                start_angle=-90,
130                end_angle=180
+
                end_angle=180
131        },
+
        },
132        {
+
        {
133                name='time',
+
                name='time',
134                arg='%d',
+
                arg='%d',
135                max=31,
+
                max=31,
136                bg_colour=0x888888,
+
                bg_colour=0x888888,
137                bg_alpha=0.3,
+
                bg_alpha=0.3,
138                fg_colour=0x888888,
+
                fg_colour=0x888888,
139                fg_alpha=0.5,
+
                fg_alpha=0.5,
140                x=191, y=145,
+
                x=191, y=145,
141                radius=50,
+
                radius=50,
142                thickness=5,
+
                thickness=5,
143                start_angle=-140,
+
                start_angle=-140,
144                end_angle=-30
+
                end_angle=-30
145        },
+
        },
146        {
+
        {
147                name='time',
+
                name='time',
148                arg='%m',
+
                arg='%m',
149                max=12,
+
                max=12,
150                bg_colour=0x888888,
+
                bg_colour=0x888888,
151                bg_alpha=0.3,
+
                bg_alpha=0.3,
152                fg_colour=0x888888,
+
                fg_colour=0x888888,
153                fg_alpha=0.5,
+
                fg_alpha=0.5,
154                x=191, y=145,
+
                x=191, y=145,
155                radius=50,
+
                radius=50,
156                thickness=5,
+
                thickness=5,
157                start_angle=30,
+
                start_angle=30,
158                end_angle=140
+
                end_angle=140
159        },
+
        },
160 --      {
+
--      {
161 --              name='fs_used_perc',
+
--              name='fs_used_perc',
162 --              arg='/',
+
--              arg='/',
163 --              max=100,
+
--              max=100,
164 --              bg_colour=0x888888,
+
--              bg_colour=0x888888,
165 --              bg_alpha=0.3,
+
--              bg_alpha=0.3,
166 --              fg_colour=0x888888,
+
--              fg_colour=0x888888,
167 --              fg_alpha=0.5,
+
--              fg_alpha=0.5,
168 --              x=260, y=503,
+
--              x=260, y=503,
169 --              radius=26,
+
--              radius=26,
170 --              thickness=5,
+
--              thickness=5,
171 --              start_angle=-90,
+
--              start_angle=-90,
172 --              end_angle=180
+
--              end_angle=180
173 --      },
+
--      },
174        {
+
        {
175                name='fs_used_perc',
+
                name='fs_used_perc',
176                arg='/home',
+
                arg='/home',
177                max=100,
+
                max=100,
178                bg_colour=0x888888,
+
                bg_colour=0x888888,
179                bg_alpha=0.3,
+
                bg_alpha=0.3,
180                fg_colour=0x888888,
+
                fg_colour=0x888888,
181                fg_alpha=0.5,
+
                fg_alpha=0.5,
182                x=260, y=503,
+
                x=260, y=503,
183                radius=20,
+
                radius=20,
184                thickness=5,
+
                thickness=5,
185                start_angle=-90,
+
                start_angle=-90,
186                end_angle=180
+
                end_angle=180
187        },
+
        },
188        {
+
        {
189                name='totalup',
+
                name='totalup',
190                arg='ppp0',
+
                arg='ppp0',
191                max=2,
+
                max=2,
192                bg_colour=0x888888,
+
                bg_colour=0x888888,
193                bg_alpha=0.3,
+
                bg_alpha=0.3,
194                fg_colour=0x888888,
+
                fg_colour=0x888888,
195                fg_alpha=0.5,
+
                fg_alpha=0.5,
196                x=230, y=452,
+
                x=230, y=452,
197                radius=20,
+
                radius=20,
198                thickness=5,
+
                thickness=5,
199                start_angle=-90,
+
                start_angle=-90,
200                end_angle=180
+
                end_angle=180
201        },
+
        },
202        {
+
        {
203                name='totaldown',
+
                name='totaldown',
204                arg='ppp0',
+
                arg='ppp0',
205                max=2,
+
                max=2,
206                bg_colour=0x888888,
+
                bg_colour=0x888888,
207                bg_alpha=0.3,
+
                bg_alpha=0.3,
208                fg_colour=0x888888,
+
                fg_colour=0x888888,
209                fg_alpha=0.5,
+
                fg_alpha=0.5,
210                x=230, y=452,
+
                x=230, y=452,
211                radius=26,
+
                radius=26,
212                thickness=5,
+
                thickness=5,
213                start_angle=-90,
+
                start_angle=-90,
214                end_angle=180
+
                end_angle=180
215        },
+
        },
216        {
+
        {
217                name='nvidia',
+
                name='nvidia',
218                arg='gpufreq',
+
                arg='gpufreq',
219                max=475,
+
                max=475,
220                bg_colour=0x888888,
+
                bg_colour=0x888888,
221                bg_alpha=0.3,
+
                bg_alpha=0.3,
222                fg_colour=0x888888,
+
                fg_colour=0x888888,
223                fg_alpha=0.5,
+
                fg_alpha=0.5,
224                x=200, y=401,
+
                x=200, y=401,
225                radius=26,
+
                radius=26,
226                thickness=5,
+
                thickness=5,
227                start_angle=-90,
+
                start_angle=-90,
228                end_angle=180
+
                end_angle=180
229        },
+
        },
230 {
+
{
231                name='nvidia',
+
                name='nvidia',
232                arg='memfreq',
+
                arg='memfreq',
233                max=700,
+
                max=700,
234                bg_colour=0x888888,
+
                bg_colour=0x888888,
235                bg_alpha=0.3,
+
                bg_alpha=0.3,
236                fg_colour=0x888888,
+
                fg_colour=0x888888,
237                fg_alpha=0.5,
+
                fg_alpha=0.5,
238                x=200, y=401,
+
                x=200, y=401,
239                radius=20,
+
                radius=20,
240                thickness=5,
+
                thickness=5,
241                start_angle=-90,
+
                start_angle=-90,
242                end_angle=180
+
                end_angle=180
243        },
+
        },
244 }
+
}
245
+
246 require 'cairo'
+
require 'cairo'
247
+
248 function rgb_to_r_g_b(colour,alpha)
+
function rgb_to_r_g_b(colour,alpha)
249        return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
+
        return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
250 end
+
end
251
+
252 function draw_ring(cr,t,pt)
+
function draw_ring(cr,t,pt)
253        local w,h=conky_window.width,conky_window.height
+
        local w,h=conky_window.width,conky_window.height
254
+
255        local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
+
        local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
256        local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']
+
        local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']
257
+
258        local angle_0=sa*(2*math.pi/360)-math.pi/2
+
        local angle_0=sa*(2*math.pi/360)-math.pi/2
259        local angle_f=ea*(2*math.pi/360)-math.pi/2
+
        local angle_f=ea*(2*math.pi/360)-math.pi/2
260        local t_arc=t*(angle_f-angle_0)
+
        local t_arc=t*(angle_f-angle_0)
261
+
262        -- Draw background ring
+
        -- Draw background ring
263
+
264        cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
+
        cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
265        cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
+
        cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
266        cairo_set_line_width(cr,ring_w)
+
        cairo_set_line_width(cr,ring_w)
267        cairo_stroke(cr)
+
        cairo_stroke(cr)
268
+
269        -- Draw indicator ring
+
        -- Draw indicator ring
270
+
271        cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
+
        cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
272        cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
+
        cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
273        cairo_stroke(cr)
+
        cairo_stroke(cr)
274 end
+
end
275
+
276 function conky_ring_stats()
+
function conky_ring_stats()
277        local function setup_rings(cr,pt)
+
        local function setup_rings(cr,pt)
278                local str=''
+
                local str=''
279                local value=0
+
                local value=0
280
+
281                str=string.format('${%s %s}',pt['name'],pt['arg'])
+
                str=string.format('${%s %s}',pt['name'],pt['arg'])
282                str=conky_parse(str)
+
                str=conky_parse(str)
283
+
284                value=tonumber(str)
+
                value=tonumber(str)
285                if value == nil then value = 0 end
+
                if value == nil then value = 0 end
286                pct=value/pt['max']
+
                pct=value/pt['max']
287
+
288                draw_ring(cr,pct,p<nowiki><nowiki>Insert non-formatted text here</nowiki>'''Bold text'''</nowiki>t)
+
                draw_ring(cr,pct,p<nowiki><nowiki>Insert non-formatted text here</nowiki>'''Bold text'''</nowiki>t)
289        end
+
        end
290
+
291        if conky_window==nil then return end
+
        if conky_window==nil then return end
292        local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_w    indow.height)
+
        local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_w    indow.height)
293
+
294        local cr=cairo_create(cs)
+
        local cr=cairo_create(cs)
295
+
296        local updates=conky_parse('${updates}')
+
        local updates=conky_parse('${updates}')
297        update_num=tonumber(updates)
+
        update_num=tonumber(updates)
298
+
299        if update_num>5 then
+
        if update_num>5 then
300                for i in pairs(settings_table) do
+
                for i in pairs(settings_table) do
301                        setup_rings(cr,settings_table[i])
+
                        setup_rings(cr,settings_table[i])
302                end
+
                end
303        end
+
        end
304 end
+
end          
~             
+
 
}}
 
}}
 +
 
== A note about symbolic fonts ==
 
== A note about symbolic fonts ==
  
 
Many of the more decorated .conkyrc's use the fonts PizzaDude Bullets and Pie Charts for Maps. They are available from the AUR as 'ttf-pizzadude-bullets' and 'ttf-piechartsformaps' respectively, or they can be found and downloaded with a quick search and manually installed using the instructions in [[Fonts]].
 
Many of the more decorated .conkyrc's use the fonts PizzaDude Bullets and Pie Charts for Maps. They are available from the AUR as 'ttf-pizzadude-bullets' and 'ttf-piechartsformaps' respectively, or they can be found and downloaded with a quick search and manually installed using the instructions in [[Fonts]].
 +
 +
== Fonts appear smaller than they should ==
 +
 +
If you notice that your conky fonts appear smaller than they should, or they don't align properly, it could be caused by a default setting in the infinality freetype2 patch.  This setting can cause some programs to display fonts at 72 DPI instead of 96 even if the rest of your system is set to 96. If you notice a problem open {{ic|/etc/fonts/infinality/infinality.conf}}  search for the section on DPI and change 72 to 96.
  
 
== Universal method to enable true transparency ==
 
== Universal method to enable true transparency ==
Line 669: Line 752:
 
Check xcompmgr documentation to help you decide which compositing options you would like to enable. The following is a common standard command.
 
Check xcompmgr documentation to help you decide which compositing options you would like to enable. The following is a common standard command.
  
{{bc|
+
$ xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &
xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &
+
}}
+
  
 
Make sure conky is running with {{ic|conky &}}. Use transset-df to enable transparency on the Conky window. Set '.5' to any value in the range 0 - 1.
 
Make sure conky is running with {{ic|conky &}}. Use transset-df to enable transparency on the Conky window. Set '.5' to any value in the range 0 - 1.
  
{{bc|
+
$ transset-df .5 -n Conky
transset-df .5 -n Conky
+
}}
+
  
 
This should give your conky window true transparency. If you get an error like,  
 
This should give your conky window true transparency. If you get an error like,  
Line 684: Line 763:
 
{{hc|$ xprop &#124; grep WM_NAME|2=WM_NAME(STRING) = "Conky (ArchitectLinux)"}}
 
{{hc|$ xprop &#124; grep WM_NAME|2=WM_NAME(STRING) = "Conky (ArchitectLinux)"}}
  
In this case, "Conky" is right, but for you it may be different, so be sure to use your output instead. If ~/.conkyrc has {{ic|own_window_type panel}} then this xprop invocation may show now output. Try using any of the following options instead. {{ic|<nowiki>own_window_type {dock,normal,override,desktop}</nowiki>}}
+
In this case, "Conky" is right, but for you it may be different, so be sure to use your output instead. If {{ic|~/.conkyrc}} has {{ic|own_window_type panel}} then this xprop invocation may show now output. Try using any of the following options instead. {{ic|<nowiki>own_window_type {dock,normal,override,desktop}</nowiki>}}
  
Use this in ~/.xinitrc to have transparent conky run when you {{ic|startx}}.
+
Use this in {{ic|~/.xinitrc}} to have transparent conky run when you {{ic|startx}}.
  
{{bc|
+
xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &
xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &
+
conky -d; sleep 1 && transset-df .5 -n Conky
conky -d; sleep 1 && transset-df .5 -n Conky
+
 
}}
+
== See also ==
  
== External links ==
+
* [http://conky.sourceforge.net/config_settings.html Official Conky Configuration Settings]
*[http://bbs.archlinux.org/viewtopic.php?id=39906 Conky Configs on arch forums]
+
* [https://bbs.archlinux.org/viewtopic.php?id=39906 Conky Configs on arch forums]
*[http://conky.sourceforge.net/ Official website]
+
* [http://conky.sourceforge.net/ Official website]
*[http://freshmeat.net/projects/conky/ Conky] on [[wikipedia:Freshmeat|Freshmeat]]
+
* [http://freshmeat.net/projects/conky/ Conky] on [[wikipedia:Freshmeat|Freshmeat]]
*[http://sourceforge.net/projects/conky/ Conky] on [[wikipedia:sourceforge.net|SourceForge]]
+
* [http://sourceforge.net/projects/conky/ Conky] on [[wikipedia:sourceforge.net|SourceForge]]
*[irc://chat.freenode.org/conky #conky] IRC chat channel on [[wikipedia:Freenode|freenode]]
+
* [irc://chat.freenode.org/conky #conky] IRC chat channel on [[wikipedia:Freenode|freenode]]
*[http://novel.evilcoder.org/wiki/index.php?title=ConkyFAQ&oldid=12463 FAQ]
+
* [http://novel.evilcoder.org/wiki/index.php?title=ConkyFAQ&oldid=12463 FAQ]

Revision as of 22:51, 14 August 2013

Conky is a system monitor software for the X Window System. It is available for GNU/Linux and FreeBSD. It is free software released under the terms of the GPL license. Conky is able to monitor many system variables including CPU, memory, swap, disk space, temperature, top, upload, download, system messages, and much more. It is extremely configurable, however, the configuration can be a little hard to understand. Conky is a fork of torsmo.

Installation and configuration

When editing your config file, you will see immediately the effect of any change as soon as you save it. There is no need to log out/log in your X session. So best is to test all kind of options, one by one, save the configuration file and see the change on your conky window, and correct if your change is unappropriated.

  • Alternatively, you can use the default config at /etc/conky/conky.conf:
$ cp /etc/conky/conky.conf ~/.conkyrc

Best is to use a local ~/.conkyrc config. As many apps, conky will first try to look for a local .conkyrc file. If this one doesn't exist, then it will read the default one in /etc/conky.

In case you store your configuration locally, e.g. in your home directory, you will not be able to read any log files unless you do some changes. One of the nice features of conky is to pipe to your desktop some /var/log/ files to read all kinds of log messages. Most of these files can only be read by root, and you will thus need to sudo conky. Starting conky as root is not recommended, so you will need to make this following changes:

$ usermod -aG log username

You add username to the log group. Now username can read log files, and you will be able to redirect log messages with conky on your desktop.

  • If conky does not accept changes -- e.g. minimum_size -- you made to ~/.conkyrc make sure you cleared /etc/conky/conky.conf or commented out the relevant section.Best is to remove files in /etc/conky/, as conky will keep reading them and this can give you some Xorg error messages.

AUR packages

In addition to the basic conky package, there are various AUR packages available with extra compile options enabled:

  • conky-cli — Conky without X11 dependencies
|| conky-cliAUR
  • conky-lua — Conky with Lua support
|| conky-luaAUR
  • conky-lua-nv — Conky with both Lua and Nvidia support
|| conky-lua-nvAUR
  • conky-nvidia — Conky with Nvidia support
|| conky-nvidiaAUR

Tips and tricks

Enable real transparency in KDE4 and Xfce4

Since version 1.8.0, Conky suppports real transparency. To enable it add this line to ~/.conkyrc:

own_window_transparent yes

The above option is not desired with the OWN_WINDOW_ARGB_VISUAL yes option. This replaces the feh method described below.

Autostart with Xfce4

In .conkyrc file:

background yes

This variable will fork Conky to your background. If you want to make your window always visible on your desktop, sticky across all workspaces and not showing in your taskbar, add these arguments:

own_window yes
own_window_type override

The override option makes your window out of control of your window manager.

Add a ~/.config/autostart/conky.desktop:

[Desktop Entry]
Encoding=UTF-8
Version=0.9.4
Type=Application
Name=conky
Comment=
Exec=conky -d
StartupNotify=false
Terminal=false
Hidden=false

Prevent flickering

Conky needs Double Buffer Extension (DBE) support from the X server to prevent flickering because it cannot update the window fast enough without it. It can be enabled in /etc/X11/xorg.conf with Load "dbe" line in Section "Module". The xorg.conf file has been replaced (1.8.x patch upwards) by /etc/X11/xorg.conf.d which contains the particular configuration files. DBE is loaded automatically.

To enable double-buffer check to have in ~/.conkyrc:

# Place below the other options, not below TEXT or XY
double_buffer yes

Custom colors

Aside the classic preset colors (white, black, yellow...), you can set your own custom color using the color name code. To determine the code of a color, use a color selector app. The basic gcolor2 package in the official repositories will give you the color name. It is made of a series of letters and numbers. Add this line in your configuration file for a custom color:

color1     Colorname1
color2     Colorname2

Then, when editing the TEXT section, use custom color number previously defined.

Dual Screen

When using a dual screen configuration, you will need to play with two options to place your conky window. Let's say you are running a 1680X1050 pixels resolution, and you want the window on middle top of your left monitor, you will use this:

alignment top_left
gap_X 840

The alignment option is trivial, and gap_X option is the distance, in pixels, from the left border of your screen.

Do not minimize on Show Desktop

Using Compiz: If the 'Show Desktop' button or key-binding minimizes Conky along with all other windows, start the Compiz configuration settings manager, go to "General Options" and uncheck the "Hide Skip Taskbar Windows" option.

If you do not use Compiz, try editing ~/.conkyrc and adding/changing the following line:

own_window_type override

Integrate with Gnome 3

Some have experienced problems with Conky showing up under Gnome 3.

  • Add these lines to ~/.conkyrc:
own_window yes
own_window_type conky
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

If you still experience problems with transparency. You could add these lines.

own_window_argb_visual yes
own_window_argb_value 255

Integrate with KDE

Conky with screenshot configuration generate problems with icons visualization. So there are some steps to follow.

  • Add these lines to ~/.conkyrc:
own_window yes
own_window_type normal
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
  • If this setting is on, comment it out or delete the line:
minimum_size
  • To automatically start Conky, create this symlink:
    • KDE4:
$ ln -s /usr/bin/conky ~/.kde4/Autostart/conkylink
    • KDE3:
$ ln -s /usr/bin/conky ~/.kde/share/autostart/conkylink
  • Install the feh package which is available in the official repositories.
  • Make a script to allow transparency with the desktop

In KDE4 edit ~/.kde4/Autostart/fehconky:

#!/bin/bash
feh --bg-scale "$(sed -n 's/wallpaper=//p' ~/.kde4/share/config/plasma-desktop-appletsrc)"

In KDE3 edit ~/.kde/share/autostart/fehconky:

#!/bin/bash
feh --bg-scale $(dcop kdesktop KBackgroundIface currentWallpaper 1)

use --bg-center if you use a centered wallpaper.

  • Make it executable:
    • KDE4:
$ chmod +x ~/.kde4/Autostart/fehconky
    • KDE3:
$ chmod +x ~/.kde/share/autostart/fehconky
  • Instead of using a script, you can add the corresponding line to the bottom of ~/.conkyrc
    • For KDE4
${exec feh --bg-scale "$(sed -n 's/wallpaper=//p' ~/.kde4/share/config/plasma-desktop-appletsrc)"}
    • For KDE3
${exec feh --bg-scale $(dcop kdesktop KBackgroundIface currentWallpaper 1)}

Integrate with Razor-qt

With Conky's default configuration, its window might disappear from the desktop when you click on the latter. Add these lines to:

~/.conkyrc
own_window yes
own_window_class Conky
own_window_type normal
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_transparent yes

Display package update information

  • Paconky - Displays package update information in a user-defined format. The output of this program can be included in Conky with the ${execpi} command.
  • Scrolling Notifications - Prints scrolling update notifications. From the author of Paconky.
  • Perl Script - Simpler and earlier script from the author of Paconky. Prints only the number of packages needing an update.
  • Python Script - Fairly configurable update notification program in Python.
  • Bash Script - Bash script for users that have enabled ShowSize.

Display weather forecast

See this thread.

Display RSS feeds

Conky has the ability to display RSS feeds natively without the need for an outside script to run and output into Conky. For example, to display the titles of the ten most recent Planet Arch updates and refresh the feed every minute, you would put this into your ~/.conkyrc in the TEXT section:

${rss https://planet.archlinux.org/rss20.xml 1 item_titles 10 }

If you want to display Arch Forum rss feed, add this line:

${rss https://bbs.archlinux.org/extern.php?action=feed&type=rss 1 item_titles 4}

where 1 is in minutes the refresh interval (15 mn is default),4 the number of items you wish to show.

Display Distrowatch Arch Linux ranking

See this thread.

Display rTorrent stats

See this thread.

Display your WordPress blog stats

This can be achieved by using the in python written extension named ConkyPress.

Display number of new emails (Gmail)

Create a file named gmail.py in a convenient location (this example uses ~/.scripts/) with the following Python code:

#!/usr/bin/env python

from urllib.request import FancyURLopener

username = 'your username'
password  = 'your password'

url = 'https://%s:%s@mail.google.com/mail/feed/atom' % (username, password)

opener = FancyURLopener()
page = opener.open(url)

contents = page.read().decode('utf-8')


ifrom = contents.index('<fullcount>') + 11
ito   = contents.index('</fullcount>')

unread = contents[ifrom:ito]

print(unread)

With a Google App mail account, the above username variable must contain your domain:

username = 'user@yourdomain.com'
Note: Regular Gmail users input only your username without @gmail.com

You can also use Python's urllib as follows.

import urllib.request
from xml.etree import ElementTree as etree

# Enter your username and password below within quotes below, in place of ****.
# Set up authentication for gmail
auth_handler = urllib.request.HTTPBasicAuthHandler()
auth_handler.add_password(realm='New mail feed',
                          uri='https://mail.google.com/',
                          user= '****',
                          passwd= '****')
opener = urllib.request.build_opener(auth_handler)
# ...and install it globally so it can be used with urlopen.
urllib.request.install_opener(opener)

gmail = 'https://mail.google.com/gmail/feed/atom'
NS = '{http://purl.org/atom/ns#}'
with urllib.request.urlopen(gmail) as source:
    tree = etree.parse(source)
fullcount = tree.find(NS + 'fullcount').text
print(fullcount + ' new')

Add the following string to your ~/.conkyrc in order the check your Gmail account for new email every five minutes (300 seconds) and display:

${execpi 300 python ~/.scripts/gmail.py}

Other Methods

The same way, but with using grep and sed for filtering output of wget:

$ wget -q -O - https://mail.google.com/a/domain/feed/atom \
>                                --http-user=login@domain \
>                                --http-password=password \ 
>                                --no-check-certificate | \
> grep fullcount | sed 's/<[^0-9]*>//g'

instead of words login, domain, password you must type yours data.

Alternatively, you can use stunnel which is provided by the stunnel package.

The following configuration is taken from Conky's FAQ

Modify /etc/stunnel/stunnel.conf as follows, and then start the stunnel daemon:

# Service-level configuration for TLS server
[imap]
client = yes
accept  = 143
connect = imap.gmail.com:143
protocol = imap
sslVersion = TLSv1
# Service-level configuration for SSL server
[imaps]
client = yes
accept  = 993
connect = imap.gmail.com:993

The only thing left is our ~/.conkyrc:

imap localhost username * -i 120 -p 993
TEXT
Inbox: ${imap_unseen}/${imap_messages}

Here I used * as the password for Conky to ask for it at start, but you do not have to do it.

Display new emails (IMAP + SSL)

Conky has built in support for IMAP accounts but does not support SSL. This can be provided using this script from this forum post. This requires the Perl/CPAN Modules Mail::IMAPClient and IO::Socket::SSL which are in the perl-mail-imapclientAUR and perl-io-socket-ssl packages

Create a file named imap.pl in a location to be read by Conky. In this file, add (with the appropriate changes):

#!/usr/bin/perl

# gimap.pl by gxmsgx
# description: get the count of unread messages on imap

use strict;
use Mail::IMAPClient;
use IO::Socket::SSL;

my $username = 'example.username'; 
my $password = 'password123'; 

my $socket = IO::Socket::SSL->new(
  PeerAddr => 'imap.server',
  PeerPort => 993
 )
 or die "socket(): $@";

my $client = Mail::IMAPClient->new(
  Socket   => $socket,
  User     => $username,
  Password => $password,
 )
 or die "new(): $@";

if ($client->IsAuthenticated()) {
   my $msgct;

   $client->select("INBOX");
   $msgct = $client->unseen_count||'0';
   print "$msgct\n";
}

$client->logout();

Add to ~/.conkyrc:

${execpi 300 ~/.conky/imap.pl} 

or wherever you saved the file.

If you use Gmail you might need to generate an application specific password.

Alternatively, you can use stunnel as shown above: Conky#How to display the number of new emails (Gmail) in Conky

Fix scrolling with UTF-8 multibyte characters

The current version of conky (1.9.0) suffers from a bug (http://sourceforge.net/p/conky/bugs/341/) where scrolling text increments by byte, not by character, resulting in text containing multibyte characters to disappear and reappear while scrolling. A package with a patch fixing this bug can be found in the AUR: conky-utfscrollAUR

User-contributed configuration examples

Graysky

[Screenshot].

[Here] it is - modify to fit your system. Optimized for a quad core chip w/ several hdds (although one of them is not connected for this screenshot) and an nvidia graphics card. You can easily modify this to a dual or single core system with one or whatever number of hdds.

A sample rings script with nvidia support

# -- Conky settings -- #
background no
update_interval 1

cpu_avg_samples 2
net_avg_samples 2

override_utf8_locale yes

double_buffer yes
no_buffers yes

text_buffer_size 2048
imlib_cache_size 0

# -- Window specifications -- #

own_window yes
own_window_type normal
own_window_transparent yes
own_window_hints undecorate,sticky,skip_taskbar,skip_pager,below

border_inner_margin 0
border_outer_margin 0

minimum_size 320 800
maximum_width 320

alignment bottom_right
gap_x 0
gap_y 0

# -- Graphics settings -- #
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes

# -- Text settings -- #
use_xft yes
xftfont MaiandraGD:size=24
xftalpha 0.4

uppercase no

default_color 888888

# -- Lua Load -- #
lua_load ~/conky/lua/lua.lua
lua_draw_hook_pre ring_stats

TEXT
${alignr}${voffset 53}${goto 90}${font MaiandraGD:size=11}${time %A, %d %B %Y}


${voffset 5}${goto 164}${font MaiandraGD:size=16}${time %H:%M}



${voffset -40}${goto 100}${font MaiandraGD:size=9}Kernel:${offset 70}Uptime:
${goto 90}${font MaiandraGD:size=9}$kernel${offset 40}$uptime
${voffset 57}${goto 117}${font snap:size=8}${cpu cpu0}%
${goto 117}${cpu cpu1}%
${goto 117}CPU
${voffset 19}${goto 145}${memperc}%
${goto 145}$swapperc%
${goto 145}MEM
${voffset 25}${goto 170}${nvidia gpufreq}
${goto 170}${nvidia memfreq}
${goto 170}GPU
${voffset 27}${goto 198}${totaldown ppp0}
${goto 198}${totalup ppp0}
${goto 205}NET
${voffset 21}
${goto 222}${fs_used /home}
${goto 230}DISK

And the required lua.lua script:

--[[
 Ring Meters by londonali1010 (2009)

 This script draws percentage meters as rings. It is fully customisable; all options are described in the script.

 IMPORTANT: if you are using the 'cpu' function, it will cause a segmentation fault if it tries to draw a ring straight away. The if statement on line 145 uses a delay to make sure that this does not happen. It calculates the length of the delay by the number of updates since Conky started. Generally, a value of 5s is long enough, so if you update Conky every 1s, use update_num > 5 in that if statement (the default). If you only update Conky every 2s, you should change it to update_num > 3; conversely if you update Conky every 0.5s, you should use update_num > 10. ALSO, if you change your Conky, is it best to use "killall conky; conky" to update it, otherwise the update_num will not be reset and you will get an error.

 To call this script in Conky, use the following (assuming that you save this script to ~/scripts/rings.lua):
         lua_load ~/scripts/rings-v1.2.1.lua
         lua_draw_hook_pre ring_stats
  
 Changelog:
 + v1.2.1 -- Fixed minor bug that caused script to crash if conky_parse() returns a nil value (20.10.2009)
 + v1.2 -- Added option for the ending angle of the rings (07.10.2009)
 + v1.1 -- Added options for the starting angle of the rings, and added the "max" variable, to allow for variables that output a numerical value rather than a percentage (29.09.2009)
 + v1.0 -- Original release (28.09.2009)
 ]]
 
 settings_table = {
         {
                 -- Edit this table to customise your rings.
                 -- You can create more rings simply by adding more elements to settings_table.
                 -- "name" is the type of stat to display; you can choose from 'cpu', 'memperc', 'fs_used_perc', 'battery_used_perc'.
                 name='time',
                 -- "arg" is the argument to the stat type, e.g. if in Conky you would write ${cpu cpu0}, 'cpu0' would be the argument. If you would not use an argument in the Conky variable, use .
                 arg='%I.%M',
                 -- "max" is the maximum value of the ring. If the Conky variable outputs a percentage, use 100.
                 max=12,
                 -- "bg_colour" is the colour of the base ring.
                 bg_colour=0x888888,
                 -- "bg_alpha" is the alpha value of the base ring.
                 bg_alpha=0.3,
                 -- "fg_colour" is the colour of the indicator part of the ring.
                 fg_colour=0x888888,
                 -- "fg_alpha" is the alpha value of the indicator part of the ring.
                 fg_alpha=0.5,
                 -- "x" and "y" are the x and y coordinates of the centre of the ring, relative to the top left corner of the Conky window.
                 x=191, y=145,
                 -- "radius" is the radius of the ring.
                 radius=32,
                 -- "thickness" is the thickness of the ring, centred around the radius.
                 thickness=4,
                 -- "start_angle" is the starting angle of the ring, in degrees, clockwise from top. Value can be either positive or negative.
                 start_angle=0,
                 -- "end_angle" is the ending angle of the ring, in degrees, clockwise from top. Value can be either positive or negative, but must be larger (e.g. more clockwise) than start_angle.
                 end_angle=360
         },
         {
                 name='time',
                 arg='%M.%S',
                 max=60,
                 bg_colour=0x888888,
                 bg_alpha=0.3,
                 fg_colour=0x888888,
                 fg_alpha=0.5,
                 x=191, y=145,
                 radius=37,
                 thickness=4,
                 start_angle=0,
                 end_angle=360
         },
         {
                 name='time',
                 arg='%S',
                 max=60,
                 bg_colour=0x888888,
                 bg_alpha=0.3,
                 fg_colour=0x888888,
                 fg_alpha=0.5,
                 x=191, y=145,
                 radius=42,
                 thickness=4,
                 start_angle=0,
                 end_angle=360
         },
         {
                 name='cpu',
                 arg='cpu0',
                 max=100,
                 bg_colour=0x888888,
                 bg_alpha=0.3,
                 fg_colour=0x888888,
                 fg_alpha=0.5,
                 x=140, y=300,
                 radius=26,
                 thickness=5,
                 start_angle=-90,
                 end_angle=180
         },
         {
                 name='cpu',
                 arg='cpu1',
                 max=100,
                 bg_colour=0x888888,
                 bg_alpha=0.3,
                 fg_colour=0x888888,
                 fg_alpha=0.5,
                 x=140, y=300,
                 radius=20,
                 thickness=5,
                 start_angle=-90,
                 end_angle=180
         },
         {
                 name='memperc',
                 arg=,
                 max=100,
                 bg_colour=0x888888,
                 bg_alpha=0.3,
                 fg_colour=0x888888,
                 fg_alpha=0.5,
                 x=170, y=350,
                 radius=26,
                 thickness=5,
                 start_angle=-90,
                 end_angle=180
         },
         {
                 name='swapperc',
                 arg=,
                 max=100,
                 bg_colour=0x888888,
                 bg_alpha=0.3,
                 fg_colour=0x888888,
                 fg_alpha=0.5,
                 x=170, y=350,
                 radius=20,
                 thickness=5,
                 start_angle=-90,
                 end_angle=180
         },
         {
                 name='time',
                 arg='%d',
                 max=31,
                 bg_colour=0x888888,
                 bg_alpha=0.3,
                 fg_colour=0x888888,
                 fg_alpha=0.5,
                 x=191, y=145,
                 radius=50,
                 thickness=5,
                 start_angle=-140,
                 end_angle=-30
         },
         {
                 name='time',
                 arg='%m',
                 max=12,
                 bg_colour=0x888888,
                 bg_alpha=0.3,
                 fg_colour=0x888888,
                 fg_alpha=0.5,
                 x=191, y=145,
                 radius=50,
                 thickness=5,
                 start_angle=30,
                 end_angle=140
         },
 --      {
 --              name='fs_used_perc',
 --              arg='/',
 --              max=100,
 --              bg_colour=0x888888,
 --              bg_alpha=0.3,
 --              fg_colour=0x888888,
 --              fg_alpha=0.5,
 --              x=260, y=503,
 --              radius=26,
 --              thickness=5,
 --              start_angle=-90,
 --              end_angle=180
 --      },
         {
                 name='fs_used_perc',
                 arg='/home',
                 max=100,
                 bg_colour=0x888888,
                 bg_alpha=0.3,
                 fg_colour=0x888888,
                 fg_alpha=0.5,
                 x=260, y=503,
                 radius=20,
                 thickness=5,
                 start_angle=-90,
                 end_angle=180
         },
         {
                 name='totalup',
                 arg='ppp0',
                 max=2,
                 bg_colour=0x888888,
                 bg_alpha=0.3,
                 fg_colour=0x888888,
                 fg_alpha=0.5,
                 x=230, y=452,
                 radius=20,
                 thickness=5,
                 start_angle=-90,
                 end_angle=180
         },
         {
                 name='totaldown',
                 arg='ppp0',
                 max=2,
                 bg_colour=0x888888,
                 bg_alpha=0.3,
                 fg_colour=0x888888,
                 fg_alpha=0.5,
                 x=230, y=452,
                 radius=26,
                 thickness=5,
                 start_angle=-90,
                 end_angle=180
         },
         {
                 name='nvidia',
                 arg='gpufreq',
                 max=475,
                 bg_colour=0x888888,
                 bg_alpha=0.3,
                 fg_colour=0x888888,
                 fg_alpha=0.5,
                 x=200, y=401,
                 radius=26,
                 thickness=5,
                 start_angle=-90,
                 end_angle=180
         },
 {
                 name='nvidia',
                 arg='memfreq',
                 max=700,
                 bg_colour=0x888888,
                 bg_alpha=0.3,
                 fg_colour=0x888888,
                 fg_alpha=0.5,
                 x=200, y=401,
                 radius=20,
                 thickness=5,
                 start_angle=-90,
                 end_angle=180
         },
 }
 
 require 'cairo'
 
 function rgb_to_r_g_b(colour,alpha)
         return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
 end
 
 function draw_ring(cr,t,pt)
         local w,h=conky_window.width,conky_window.height
 
         local xc,yc,ring_r,ring_w,sa,ea=pt['x'],pt['y'],pt['radius'],pt['thickness'],pt['start_angle'],pt['end_angle']
         local bgc, bga, fgc, fga=pt['bg_colour'], pt['bg_alpha'], pt['fg_colour'], pt['fg_alpha']
 
         local angle_0=sa*(2*math.pi/360)-math.pi/2
         local angle_f=ea*(2*math.pi/360)-math.pi/2
         local t_arc=t*(angle_f-angle_0)
 
         -- Draw background ring
 
         cairo_arc(cr,xc,yc,ring_r,angle_0,angle_f)
         cairo_set_source_rgba(cr,rgb_to_r_g_b(bgc,bga))
         cairo_set_line_width(cr,ring_w)
         cairo_stroke(cr)
 
         -- Draw indicator ring
 
         cairo_arc(cr,xc,yc,ring_r,angle_0,angle_0+t_arc)
         cairo_set_source_rgba(cr,rgb_to_r_g_b(fgc,fga))
         cairo_stroke(cr)
 end
 
 function conky_ring_stats()
         local function setup_rings(cr,pt)
                 local str=
                 local value=0
 
                 str=string.format('${%s %s}',pt['name'],pt['arg'])
                 str=conky_parse(str)
 
                 value=tonumber(str)
                 if value == nil then value = 0 end
                 pct=value/pt['max']
 
                 draw_ring(cr,pct,p<nowiki>Insert non-formatted text hereBold text</nowiki>t)
         end
 
         if conky_window==nil then return end
         local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_w    indow.height)
 
         local cr=cairo_create(cs)
 
         local updates=conky_parse('${updates}')
         update_num=tonumber(updates)
 
         if update_num>5 then
                 for i in pairs(settings_table) do
                         setup_rings(cr,settings_table[i])
                 end
         end
 end

A note about symbolic fonts

Many of the more decorated .conkyrc's use the fonts PizzaDude Bullets and Pie Charts for Maps. They are available from the AUR as 'ttf-pizzadude-bullets' and 'ttf-piechartsformaps' respectively, or they can be found and downloaded with a quick search and manually installed using the instructions in Fonts.

Fonts appear smaller than they should

If you notice that your conky fonts appear smaller than they should, or they don't align properly, it could be caused by a default setting in the infinality freetype2 patch. This setting can cause some programs to display fonts at 72 DPI instead of 96 even if the rest of your system is set to 96. If you notice a problem open /etc/fonts/infinality/infinality.conf search for the section on DPI and change 72 to 96.

Universal method to enable true transparency

Transparency is a strange beast in Conky, but there is a way to universally apply true transparency with any environment or window manager by using xcompmgr and transset-df. Install xcompmgr from [extra] and transset-df from [community] with pacman -S xcompmgr transset-df. These packages both have the same 3 dependencies, so this is the lightest method for composition available, for those of you using standalone window managers in order to achieve the leanest setup you can manage (or whatever reason you have :D)

NOTE: This may conflict with any other compositing manager you are already using.

Check xcompmgr documentation to help you decide which compositing options you would like to enable. The following is a common standard command.

$ xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &

Make sure conky is running with conky &. Use transset-df to enable transparency on the Conky window. Set '.5' to any value in the range 0 - 1.

$ transset-df .5 -n Conky

This should give your conky window true transparency. If you get an error like,

$ transset-df .5 -n Conky
No Window matching Conky exists!

Verify that conky is running, and use xprop and click on the conky window to find the name you should pass to transset-df.

$ xprop | grep WM_NAME
WM_NAME(STRING) = "Conky (ArchitectLinux)"

In this case, "Conky" is right, but for you it may be different, so be sure to use your output instead. If ~/.conkyrc has own_window_type panel then this xprop invocation may show now output. Try using any of the following options instead. own_window_type {dock,normal,override,desktop}

Use this in ~/.xinitrc to have transparent conky run when you startx.

xcompmgr -c -t-5 -l-5 -r4.2 -o.55 &
conky -d; sleep 1 && transset-df .5 -n Conky

See also