Voici le script usage.py qui crée trois images, respectivement appelées .cpu.png, .mem.png et .swap.png
J'utilise la commande sar pour récupérer les pourcentages d'utilisation que je veux (ici, les pourcentages de cpu, ram et swap utilisés)
Si vous n'avez pas cette commande:
sudo apt-get install sysstat
#!/usr/bin/python
import cairo
import os
import math
# W = Width, H = Height
W, H = 80, 80
pi = math.pi
def circle(ctx):
ctx.set_source_rgba(0.9, 0.9, 0.9, 0.5)
ctx.arc(W/2, H/2, W/2 - 1, 0, pi * 2)
ctx.stroke()
def text(ctx, usage, text):
# on parametre l'ecriture
ctx.set_source_rgb(1, 1, 1)
ctx.select_font_face("Arial")
ctx.set_font_size(10)
# on ecrit
ctx.move_to(W/2 - 9, H/2 - 4)
ctx.show_text(text)
ctx.move_to(W/2 - 12, H/2 + 6)
ctx.show_text(str(usage) + "%")
ctx.stroke()
def graph(ctx, usage):
# l'arc change de couleur si on depasse 40%
if usage < 40:
ctx.set_source_rgb(0, 0.7 - usage / 100, 0)
else:
ctx.set_source_rgb(usage / 100, 0, 0)
ctx.move_to(W/2, 0)
# dessin des arc de cercles des compteurs
ctx.line_to(W/2, H/10)
ctx.new_sub_path()
ctx.arc_negative(W/2, H/2, W/2 - W/10, (usage * pi / 50.0) - (pi / 2),
0 - (pi / 2))
ctx.new_sub_path()
ctx.arc(W/2, W/2, W/2 - 1, 0 - (pi / 2), (usage * pi / 50.0) - (pi / 2))
ctx.line_to(W/2 + (W/2 - W/10) * math.cos((usage * pi / 50.0) - (pi / 2)),
W/2 + (W/2 - W/10) * math.sin((usage * pi / 50.0) - (pi / 2)))
ctx.stroke()
def stat():
# on recupere les donnees avec sar
stri = os.popen("sar -Sur 1 1 | grep Moyenne | grep -v % | sed 's/,/./g'").read().split()
cpu = 100.00 - float(stri[8])
mem = round(float(stri[13]) * 2 / 3, 2)
swap = float(stri[24])
return cpu, mem, swap
def main():
# on cree les surfaces de nos images
cpuS = cairo.ImageSurface(cairo.FORMAT_ARGB32, W, H)
memS = cairo.ImageSurface(cairo.FORMAT_ARGB32, W, H)
swapS = cairo.ImageSurface(cairo.FORMAT_ARGB32, W, H)
cpu, mem, swap = stat()
# compteur cpu
ctx = cairo.Context(cpuS)
circle(ctx)
graph(ctx, cpu)
text(ctx, cpu, "CPU")
cpuS.write_to_png(".cpu.png")
# compteur ram
ctx = cairo.Context(memS)
circle(ctx)
graph(ctx, mem)
text(ctx, mem, "MEM")
memS.write_to_png(".mem.png")
# compteur swap
ctx = cairo.Context(swapS)
circle(ctx)
graph(ctx, swap)
text(ctx, swap, "SWAP")
swapS.write_to_png(".swap.png")
main()
Le script clock.py pour l'affichage de l'heure (On peut modifier le rendu en modifiant les flags de date dans le fichier)
#!/usr/bin/python
import cairo
import os
WIDTH, HEIGHT = 175, 30
def main():
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, WIDTH, HEIGHT)
ctx = cairo.Context(surface)
lg = cairo.LinearGradient(20.0, 10.0, 20.0, 30.0)
# text settings
lg.add_color_stop_rgba(0.1, 0.3, 0.3, 0.3, 1)
lg.add_color_stop_rgba(0.9, 1, 0.6, 0, 1)
ctx.select_font_face("OldStamper", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
ctx.set_font_size(40)
ctx.move_to(0, 30)
ctx.set_source(lg)
# execute command
stri = os.popen("date +%H:%M").read()
stri = stri[:-1]
# output to file
ctx.show_text(stri)
surface.write_to_png(".time.png")
main()
Dans le .conkyrc il suffit d'ajouter les lignes:
${exec /chemin/du/script.py}${image ~/.cpu.png -p 0, 160}${image ~/.mem.png -p 110, 160}${image ~/.swap.png -p 220, 160}
${exec /chemin/de/clock.py}${image ~/.time.png -p 5, 820}