Pour l'installer, rien de plus simple:


apt-get install conky

La configuration se fait via un fichier de configuration que vous retrouverez à la racine de votre Home: .conkyrc auquel vous pouvez associez un fichier de script .lua (dans mon cas pour afficher en forme de cercle l'occupation disque etc...


Voici le .conkyrc:

update_interval 2
cpu_avg_samples 5
net_avg_samples 5
double_buffer yes
no_buffers yes
text_buffer_size 1024
out_to_console no
use_spacer right
alignment top_left
gap_x 120
gap_y 110
maximum_width 400
minimum_size 350 10
draw_shades no
own_window yes
own_window_transparent yes
own_window_type override
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
override_utf8_locale yes
use_xft yes
xftalpha .1
xftfont Verdana:size=9
imap imap.free.fr user mdp
default_color white
default_shade_color 777777
default_outline_color black
color1 FAF0E6
color2 FAF0E6
color3 FFA300
color4 EAEAEA
color5 F8F8FF
lua_load ~/.conky.lua
lua_draw_hook_post main
####### END CONFIG #######
TEXT
${voffset 10}${offset -5}${color1}${font calame:size=40}${time %H:%M}${voffset -30}${offset 15}${color3}${font calame:size=24}${time %d} ${offset -10}${voffset -5}${color1}${font EPIDEMIA:size=20}${time %B} ${time %Y}${voffset 35}${font 28 Days Later:size=24}${offset -80}${time %A}${font}
${color2}${offset 10}Vous avez ${imap_unseen} messages non-lus
${offset 10}${exec birthday -d 31}
${color1}${if_mpd_playing}${font Denise DJ Font:size=50}b${voffset -30}${font}${color2}$mpd_smart
${offset 85}${voffset 10}${mpd_bar 3,200}$endif
${font 28 Days Later:size=20}$nodename${font}${color2}
${offset 10}${texeci 86400 lsb_release -sd}
${offset 10}$sysname $kernel $machine
${offset 10}${texeci 3600 aptitude search "~U" | wc -l} mises à jour sont disponible
${offset 10}Uptime : $uptime
${offset 10}IP publique: ${texeci 3600 wget http://checkip.dyndns.org -O - -o /dev/null | cut -d : -f 2 | cut -d \< -f 1}
${offset 10}IP locale : ${addr eth2}
${offset 10}Down: ${downspeed eth2} Up: ${upspeed eth2}(ko/s)
${font Verdana:size=8}${offset 38}${voffset 30}Core 1 : ${hwmon 1 temp 1}°C ${alignc}${freq_g 1} GHz
${offset 38}Core 2 : ${hwmon 0 temp 1}°C ${alignc}${freq_g 2} GHz
${offset 52}${voffset 38}RAM : $mem / $memmax
${offset 52}Swap : $swap / $swapmax
${offset 78}${voffset 46}${font Verdana:size=8}/root ${font Verdana:size=7}${fs_used_perc /}% used ${fs_free /} free
${offset 78}${font Verdana:size=8}/home ${font Verdana:size=7}${fs_used_perc /home}% used ${fs_free /home} free
${offset 78}${font Verdana:size=8}/media ${font Verdana:size=7}${fs_used_perc /media/multimedia}% used ${fs_free /media/multimedia} free




Et le .conky.lua qu'il appelle (adaptation d'un script existant, cf commentaire ci dessous):



--==============================================================================
-- conky_orange.lua
--
-- author : SLK
-- version : v2011011601
-- license : Distributed under the terms of GNU GPL version 2 or later
--
--==============================================================================
require 'cairo'
--------------------------------------------------------------------------------
-- gauge DATA
gauge = {
{
name='cpu', arg='cpu0', max_value=100,
x=40, y=500,
graph_radius=28,
graph_thickness=5,
graph_start_angle=180,
graph_unit_angle=2.7, graph_unit_thickness=2.7,
graph_bg_colour=0xffffff, graph_bg_alpha=0.3,
graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.4,
hand_fg_colour=0xFFA300, hand_fg_alpha=1.0,
txt_radius=34,
txt_weight=0, txt_size=8.0,
txt_fg_colour=0xFFA300, txt_fg_alpha=1.0,
graduation_radius=28,
graduation_thickness=0, graduation_mark_thickness=1,
graduation_unit_angle=27,
graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
},
{
name='cpu', arg='cpu1', max_value=100,
x=40, y=500,
graph_radius=20,
graph_thickness=5,
graph_start_angle=180,
graph_unit_angle=2.7, graph_unit_thickness=2.7,
graph_bg_colour=0xffffff, graph_bg_alpha=0.3,
graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.4,
hand_fg_colour=0xFFA300, hand_fg_alpha=1.0,
txt_radius=10,
txt_weight=0, txt_size=8.0,
txt_fg_colour=0xFFA300, txt_fg_alpha=1.0,
graduation_radius=28,
graduation_thickness=0, graduation_mark_thickness=1,
graduation_unit_angle=27,
graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
},
{
name='memperc', arg='', max_value=100,
x=55, y=580,
graph_radius=28,
graph_thickness=5,
graph_start_angle=180,
graph_unit_angle=2.7, graph_unit_thickness=2.7,
graph_bg_colour=0xffffff, graph_bg_alpha=0.3,
graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.4,
hand_fg_colour=0xFFA300, hand_fg_alpha=1.0,
txt_radius=36,
txt_weight=0, txt_size=8.0,
txt_fg_colour=0xFFA300, txt_fg_alpha=1.0,
graduation_radius=23,
graduation_thickness=0, graduation_mark_thickness=2,
graduation_unit_angle=27,
graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.5,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
},
{
name='swapperc', arg='', max_value=100,
x=55, y=580,
graph_radius=20,
graph_thickness=5,
graph_start_angle=180,
graph_unit_angle=2.7, graph_unit_thickness=2.7,
graph_bg_colour=0xffffff, graph_bg_alpha=0.3,
graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.4,
hand_fg_colour=0xFFA300, hand_fg_alpha=1.0,
txt_radius=10,
txt_weight=0, txt_size=8.0,
txt_fg_colour=0xFFA300, txt_fg_alpha=1.0,
graduation_radius=23,
graduation_thickness=0, graduation_mark_thickness=2,
graduation_unit_angle=27,
graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.5,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.3,
},
{
name='fs_used_perc', arg='/', max_value=100,
x=80, y=670,
graph_radius=20,
graph_thickness=5,
graph_start_angle=180,
graph_unit_angle=2.7, graph_unit_thickness=2.7,
graph_bg_colour=0xffffff, graph_bg_alpha=0.3,
graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.4,
hand_fg_colour=0xFFA300, hand_fg_alpha=1.0,
txt_radius=34,
txt_weight=0, txt_size=8.0,
txt_fg_colour=0xFFA300, txt_fg_alpha=0.0,
graduation_radius=28,
graduation_thickness=0, graduation_mark_thickness=1,
graduation_unit_angle=27,
graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.5,
},
{
name='fs_used_perc', arg='/home/', max_value=100,
x=80, y=670,
graph_radius=28,
graph_thickness=5,
graph_start_angle=180,
graph_unit_angle=2.7, graph_unit_thickness=2.7,
graph_bg_colour=0xffffff, graph_bg_alpha=0.3,
graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.4,
hand_fg_colour=0xFFA300, hand_fg_alpha=1.0,
txt_radius=10,
txt_weight=0, txt_size=8.0,
txt_fg_colour=0xFFA300, txt_fg_alpha=0.0,
graduation_radius=28,
graduation_thickness=0, graduation_mark_thickness=1,
graduation_unit_angle=27,
graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.5,
},
{
name='fs_used_perc', arg='/media/multimedia/', max_value=100,
x=80, y=670,
graph_radius=36,
graph_thickness=5,
graph_start_angle=180,
graph_unit_angle=2.7, graph_unit_thickness=2.7,
graph_bg_colour=0xffffff, graph_bg_alpha=0.3,
graph_fg_colour=0xFFFFFF, graph_fg_alpha=0.4,
hand_fg_colour=0xFFA300, hand_fg_alpha=1.0,
txt_radius=10,
txt_weight=0, txt_size=8.0,
txt_fg_colour=0xFFA300, txt_fg_alpha=0.0,
graduation_radius=28,
graduation_thickness=0, graduation_mark_thickness=1,
graduation_unit_angle=27,
graduation_fg_colour=0xFFFFFF, graduation_fg_alpha=0.3,
caption='',
caption_weight=1, caption_size=8.0,
caption_fg_colour=0xFFFFFF, caption_fg_alpha=0.5,
},
}
-------------------------------------------------------------------------------
-- rgb_to_r_g_b
-- converts color in hexa to decimal
--
function rgb_to_r_g_b(colour, alpha)
return ((colour / 0x10000) % 0x100) / 255., ((colour / 0x100) % 0x100) / 255., (colour % 0x100) / 255., alpha
end
-------------------------------------------------------------------------------
-- angle_to_position
-- convert degree to rad and rotate (0 degree is top/north)
--
function angle_to_position(start_angle, current_angle)
local pos = current_angle + start_angle
return ( ( pos * (2 * math.pi / 360) ) - (math.pi / 2) )
end
-------------------------------------------------------------------------------
-- draw_gauge_ring
-- displays gauges
--
function draw_gauge_ring(display, data, value)
local max_value = data['max_value']
local x, y = data['x'], data['y']
local graph_radius = data['graph_radius']
local graph_thickness, graph_unit_thickness = data['graph_thickness'], data['graph_unit_thickness']
local graph_start_angle = data['graph_start_angle']
local graph_unit_angle = data['graph_unit_angle']
local graph_bg_colour, graph_bg_alpha = data['graph_bg_colour'], data['graph_bg_alpha']
local graph_fg_colour, graph_fg_alpha = data['graph_fg_colour'], data['graph_fg_alpha']
local hand_fg_colour, hand_fg_alpha = data['hand_fg_colour'], data['hand_fg_alpha']
local graph_end_angle = (max_value * graph_unit_angle) % 360
-- background ring
cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, 0), angle_to_position(graph_start_angle, graph_end_angle))
cairo_set_source_rgba(display, rgb_to_r_g_b(graph_bg_colour, graph_bg_alpha))
cairo_set_line_width(display, graph_thickness)
cairo_stroke(display)
-- arc of value
local val = value % (max_value + 1)
local start_arc = 0
local stop_arc = 0
local i = 1
while i <= val do
start_arc = (graph_unit_angle * i) - graph_unit_thickness
stop_arc = (graph_unit_angle * i)
cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
cairo_set_source_rgba(display, rgb_to_r_g_b(graph_fg_colour, graph_fg_alpha))
cairo_stroke(display)
i = i + 1
end
local angle = start_arc
-- hand
start_arc = (graph_unit_angle * val) - (graph_unit_thickness * 2)
stop_arc = (graph_unit_angle * val)
cairo_arc(display, x, y, graph_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
cairo_set_source_rgba(display, rgb_to_r_g_b(hand_fg_colour, hand_fg_alpha))
cairo_stroke(display)
-- graduations marks
local graduation_radius = data['graduation_radius']
local graduation_thickness, graduation_mark_thickness = data['graduation_thickness'], data['graduation_mark_thickness']
local graduation_unit_angle = data['graduation_unit_angle']
local graduation_fg_colour, graduation_fg_alpha = data['graduation_fg_colour'], data['graduation_fg_alpha']
if graduation_radius > 0 and graduation_thickness > 0 and graduation_unit_angle > 0 then
local nb_graduation = graph_end_angle / graduation_unit_angle
local i = 0
while i < nb_graduation do
cairo_set_line_width(display, graduation_thickness)
start_arc = (graduation_unit_angle * i) - (graduation_mark_thickness / 2)
stop_arc = (graduation_unit_angle * i) + (graduation_mark_thickness / 2)
cairo_arc(display, x, y, graduation_radius, angle_to_position(graph_start_angle, start_arc), angle_to_position(graph_start_angle, stop_arc))
cairo_set_source_rgba(display,rgb_to_r_g_b(graduation_fg_colour,graduation_fg_alpha))
cairo_stroke(display)
cairo_set_line_width(display, graph_thickness)
i = i + 1
end
end
-- text
local txt_radius = data['txt_radius']
local txt_weight, txt_size = data['txt_weight'], data['txt_size']
local txt_fg_colour, txt_fg_alpha = data['txt_fg_colour'], data['txt_fg_alpha']
local movex = txt_radius * math.cos(angle_to_position(graph_start_angle, angle))
local movey = txt_radius * math.sin(angle_to_position(graph_start_angle, angle))
cairo_select_font_face (display, "ubuntu", CAIRO_FONT_SLANT_NORMAL, txt_weight)
cairo_set_font_size (display, txt_size)
cairo_set_source_rgba (display, rgb_to_r_g_b(txt_fg_colour, txt_fg_alpha))
cairo_move_to (display, x + movex - (txt_size / 2), y + movey + 3)
cairo_show_text (display, value)
cairo_stroke (display)
-- caption
local caption = data['caption']
local caption_weight, caption_size = data['caption_weight'], data['caption_size']
local caption_fg_colour, caption_fg_alpha = data['caption_fg_colour'], data['caption_fg_alpha']
local tox = graph_radius * (math.cos((graph_start_angle * 2 * math.pi / 360)-(math.pi/2)))
local toy = graph_radius * (math.sin((graph_start_angle * 2 * math.pi / 360)-(math.pi/2)))
cairo_select_font_face (display, "ubuntu", CAIRO_FONT_SLANT_NORMAL, caption_weight);
cairo_set_font_size (display, caption_size)
cairo_set_source_rgba (display, rgb_to_r_g_b(caption_fg_colour, caption_fg_alpha))
cairo_move_to (display, x + tox + 5, y + toy + 1)
-- bad hack but not enough time !
if graph_start_angle < 105 then
cairo_move_to (display, x + tox - 30, y + toy + 1)
end
cairo_show_text (display, caption)
cairo_stroke (display)
end
-------------------------------------------------------------------------------
-- go_gauge_rings
-- loads data and displays gauges
--
function go_gauge_rings(display)
local function load_gauge_rings(display, data)
local str, value = '', 0
str = string.format('${%s %s}',data['name'], data['arg'])
str = conky_parse(str)
value = tonumber(str)
draw_gauge_ring(display, data, value)
end
for i in pairs(gauge) do
load_gauge_rings(display, gauge[i])
end
end
-------------------------------------------------------------------------------
-- MAIN
function conky_main()
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_window.height)
local display = cairo_create(cs)
local updates = conky_parse('${updates}')
update_num = tonumber(updates)
if update_num > 5 then
go_gauge_rings(display)
end
end



Il est important de noter qu'un certain nombre de programme externe sont nécessaire pour ce conky, même si ça peut paraître évident.


Par exemple concernant l'affichage du morceau de musique joué, c'est lié au serveur de musique mpd.


Concernant la liste des évènement important, ce n'est que le retour brut de la commande birthday (avec son fichier de configuration rattaché: ~/.birthdays), faites un man pour plus de détail sur son fonctionnement, c'est simplissime.


J'oublie les utilitaires retournant la températures, la librairie lua etc... et ce sans compter que si vous souhaitez afficher d'autres chose comme la météo de votre ville ou je ne sais quoi, il vous en faudra surement d'autre.


Ce qu'il est important de retenir c'est que conky est un outil qui vous affiche le résultat d'autres commandes et que donc aucun outil n'est universel, vous devrez forcement l'adapter à votre environnement.


Ce billet est donc juste un autre mémo personnel qui peut vous servir de base à la création de votre propre fichier de configuration de conky.