#1301 Le 14/01/2012, à 13:23
- Keno40
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
En fait, elles apparaissent jusqu'au rafraîchissement puis redisparaissent.
Quand je lâche la sélection, elle réapparaissent une sec, puis redisparaissent.
Parfois, les autres à côté non sélectionnées apparaissent aussi une seconde. Bref, c'est la guirlande de noël!!!
Hors ligne
#1302 Le 14/01/2012, à 13:37
- Didier-T
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
En fait, elles apparaissent jusqu'au rafraîchissement puis redisparaissent.
Quand je lâche la sélection, elle réapparaissent une sec, puis redisparaissent.Parfois, les autres à côté non sélectionnées apparaissent aussi une seconde. Bref, c'est la guirlande de noël!!!
et tu peut cliquer dessus normalement ???
Hors ligne
#1303 Le 14/01/2012, à 13:42
- Keno40
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Oui, quand elle est apparente et même quand elle disparait...
Hors ligne
#1304 Le 14/01/2012, à 13:50
- Didier-T
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Oui, quand elle est apparente et même quand elle disparait...
alors c'est certainement un conflit avec ton pilote d'affichage, désolé tu devait déja t'en douté, mais je suis sur la version ubuntu 11.10 et je ne connais pas suffisamment bien xubuntu pour pouvoir t'aider plus.
mais peut être en changeant la version de ton pilote d'affichage.
Hors ligne
#1305 Le 14/01/2012, à 14:04
- Keno40
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Je suis sous le pilote par défaut.
Ma carte 'et tout l'ordi même...) est tellement out of age qu'il n'y en a pas d'adapté.
Hors ligne
#1306 Le 17/01/2012, à 05:22
- Érotomania
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Salut,j'aimerais savoir si il y a une ligne de commande pour afficher la frequence du GPU en mode graphique j'ai cherché mais je n'ai pas trouvé,merci.
HP-Pavillon 6000 Processor: 4x AMD Athlon(tm) II X4 635 Processor Mémoire : 6113MB
Operating System Ubuntu 12.04.1 LTS
OpenGL Renderer GeForce GTX 460 SE/PCIe/SSE2
Hors ligne
#1307 Le 18/01/2012, à 17:34
- chepioq
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Salut,j'aimerais savoir si il y a une ligne de commande pour afficher la frequence du GPU en mode graphique j'ai cherché mais je n'ai pas trouvé,merci.
Tu veux dire sous forme de graphe ?
Il y a dans conky la commande execgraph :
execgraph (-t) (-l) command Same as execbar, but graphs values. Uses a logaritmic scale when the log option (-l switch) is given (to see small numbers). Values still have to be between 0 and 100. The size for graphs can be controlled via the default_graph_size config setting. Takes the switch '-t' to use a temperature gradient, which makes the gradient values change depending on the amplitude of a particular graph value (try it and see). If -t or -l is your first argument, you may need to preceed it by a space (' '). You may also use double-quotes around the exec argument should you need to execute a command with spaces. For example, ${execgraph "date +'%S'"} to execute `date +'%S'` and graph the result. Without quotes, it would simply print the result of `date`.
Voir ici pour l'ensemble des variables conky http://conky.sourceforge.net/variables.html
Tout est dans tout et réciproquement....
Hors ligne
#1308 Le 18/01/2012, à 17:41
- Keno40
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Bon, ben personne ne voit d'où peut venir le problème sur mon cas avec Xorg?
C'est une vieille install mise à niveau. J'utilisais Compiz dessus, il y a longtemps. C'est peut être un fond de reste de config qui fout la m.....
Hors ligne
#1309 Le 21/01/2012, à 16:36
- Sylvhem
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Bonjour à tous !
Bon, je n'ai pas trop eu le temps d'améliorer mon conky depuis la dernière fois, donc j'en suis grosso modo toujours au même point.
1. Je n'arrive toujours pas à utiliser la police Ubuntu-Title, que ça soit la version 3.0 ou une de celles que m'a passé Phyllinux. J'ai bien tenté de rafraîchir le cache des polices comme me l' suggéré Skubu mais ça n'a pas marché. Une dernière idée ? Ça serait dommage de ne pas pouvoir se servir de cette police, vu qu'elle a pas vraiment d'autre utilité...
2. ${battery_time} me renvoi toujours unknown, même quand je précise BAT0 pour la batterie. Un problème de compatibilité avec le matériel peut-être ? Qu'en pensez-vous ?
3. Je me suis aperçu que j'avais mal écrit la fonction own_window yes dans la partie avant TEXT. Je l'ai corrigé (et ajouté la semi-transparence au passage) mais les infos qui se trouvent dans les colonnes CPUID, CPU(%) et Mem(%) de la partie de mon conky consacré aux processus disparaissent. Je ne vois vraiment pas où se trouve le problème, si quelqu'un pouvait me renseigner.
4. J'aimerais faire en sorte que quand ma batterie soit presque vide ou que une de mes partitions soit presque pleine, la barre correspondante change de couleur. malheureusement, je n'ai vu aucune variable du type "SI variable1>x ALORS variable2". En regardant les anciens sujets, j'ai vu un conky de Vermouth utilisant LUA pour arriver à un résultat similaire. Je suis obligé d'utiliser LUA pour ça ? Je ne connais pas du tout ce langage et il ne me semble pas avoir de tutoriel pour débutant en français.
Voici le conky en question :
#Nombre de rafraichissement de Conky avant de quitter. 0 fait tourner Conky en permancence.
total_run_times 0
#Réglage de la mémoire.
double_buffer yes
#Intervalle de raffrachissement.
update_interval 3
#Fenêtre
own_window yes
own_window_transparent yes
own_window_type override
minimum_size 270 200
maximum_width 270
#Apparence.
use_xft yes
xftalpha 1
xftfont Ubuntu:size=10
override_utf8_locale yes
#Position.
alignment top_right
TEXT
${image $HOME/conky/images/logo_ubuntu.png -p 117,0}
${alignc}${font Ubuntu-Title:size=16}Ubuntu
#Affiche des informations sur l'ordinateur.
${font Ubuntu-Title:size=15}Ordinateur
${font}Nom : $nodename
Système : ${execi 86400 lsb_release -si} ${execi 86400 lsb_release -sr} ${execi 86400 lsb_release -sc}
Noyau : $sysname $kernel
Uptime : $uptime
#Affiche des informations sur l'état de la batterie.
${font Ubuntu-Title:size=15}Batterie
${font}État : $battery
Temps restant : ${battery_time}
${battery_bar 12}
${voffset -17}${alignc}${battery_percent} %
#Affiche des informations sur le processeur.
${font Ubuntu-Title:size=15}Processeur
${font}Pourcentage global : ${cpu 0} %
Premier coeur : ${cpu 1} %
Second coeur : ${cpu 2} %
Température : ${acpitemp} °C
#Affiche des informations sur l'état de la mémoire.
${font Ubuntu-Title:size=15}Mémoire
${font}Vive : $mem/$memmax
${membar 12}
${voffset -17}${alignc}$memperc %
Virtuelle : $swap/$swapmax
${swapbar 12}
${voffset -17}${alignc}$swapperc %
#Affiche des informations sur l'état du disque dur.
${font Ubuntu-Title:size=15}Disque dur
${font}GNU/Linux : ${fs_used /}/${fs_size /}
${fs_bar 12 /}
${voffset -17}${alignc}${fs_used_perc /} %
Windows : ${fs_used /media/Windows}/${fs_size /media/Windows}
${fs_bar 12 /media/Windows}
${voffset -17}${alignc}${fs_used_perc /media/Windows} %
Documents : ${fs_used /media/Windocs}/${fs_size /media/Windocs}
${fs_bar 12 /media/Windocs}
${voffset -17}${alignc}${fs_used_perc /media/Windocs} %
Température : ${hddtemp /dev/sda} °C
#Affiche la liste des principaux processus.
${font Ubuntu-Title:size=15}Processus
${font}Nom ${goto 1450}PID ${goto 1490}CPU (%) ${goto 1543}Mém (%)
${color 2439d4}${top name 1} ${goto 1444}${top pid 1} ${goto 1494}${top cpu 1} ${goto 1545}${top mem 1}
${color 085f95}${top name 2} ${goto 1444}${top pid 2} ${goto 1494}${top cpu 2} ${goto 1545}${top mem 2}
${color 0788bf}${top name 3} ${goto 1444}${top pid 3} ${goto 1494}${top cpu 3} ${goto 1545}${top mem 3}
${color ffffff}${top name 4} ${goto 1444}${top pid 4} ${goto 1494}${top cpu 4} ${goto 1545}${top mem 4}
${top name 5} ${goto 1444}${top pid 5} ${goto 1494}${top cpu 5} ${goto 1545}${top mem 5}
PS : J'aime vraiment bien ton conky Ex0artefact .
PPS : Bonne année à tous !
Membre discret de la brigade des S
Hors ligne
#1310 Le 27/01/2012, à 18:37
- Didier-T
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Bonjour Sylvhem,
pour les trois première question je ne sais pas, mais pour la quatrième tu peut regarder ceci, on te donne la solution en code conky, à toi d'adapter à tes besoins.
Hors ligne
#1311 Le 29/01/2012, à 21:16
- Sylvhem
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Merci beaucoup pour le lien, je vais regarder ça.
Membre discret de la brigade des S
Hors ligne
#1312 Le 31/01/2012, à 02:10
- Swiss_Knight
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
salut les gens,
petite question ; mon processeur est un triple cœur débloquable.
suivant mes envies, j'active ou non le 4ème cœur.
Mais dans Conky, j'ai mis 4 CPU.
Or, quand il n'y a que trois cœurs actifs, il me renvoie ce message d'erreur :
Conky: obj->data.i 4 info.cpu_count 3
Conky: attempting to use more CPUs than you have!
ce qui est somme toute logique.
J'aimerai lui coller une condition du genre ${if_existing cpu4}__tout ce qui concerne l'affichage du 4ème cœur___${endif}
mais écrite telle quelle, cette commande ne marche qu'à moitié. En effet, avant, Conky refusait tout bonnement de se lancer. Avec cette commande, il se lance quelque temps, puis s'arrête lorsque le message d'erreur apparaît, mais il apparaît bien plus tard et laisse le temps à conky de se lancer.
Auriez-vous une idée ?
Je ne dois pas être loin du compte je pense, mais je sais pas comment faire...
Merci.
Dernière modification par Swiss_Knight (Le 31/01/2012, à 02:11)
xuniL
Hors ligne
#1313 Le 31/01/2012, à 02:10
- Kamelot314
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Et voila le mien! Simple mais complet!
background no
font Sans:size=8
#xftfont Sans:size=10
use_xft yes
xftalpha 0.9
update_interval 3.0
total_run_times 0
own_window yes
own_window_type normal
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar
own_window_argb_visual yes
own_window_argb_value 0
double_buffer yes
minimum_size 220 5
maximum_width 220
draw_shades yes
draw_outline no
draw_borders no
draw_graph_borders yes
default_color white
default_shade_color black
alignment top_left
gap_x 12
gap_y 35
no_buffers yes
cpu_avg_samples 2
uppercase no
text_buffer_size 1024
override_utf8_locale yes
TEXT
${color}SYSTEM ${color}${hr 1}
Hostname: $alignr$nodename
Kernel: $alignr$kernel
Uptime: $alignr$uptime
Machine: $alignr$machine
CPU: ${alignr}${freq} MHz
Temperature: $alignr$acpitemp
Processes: ${alignr}$processes ($running_processes running)
Load: ${alignr}$loadavg
CPU1 ${goto 65}${cpu cpu1}%${goto 117}CPU2 ${goto 180}${cpu cpu2}%
${color}${cpugraph cpu1 20,107 FFFF00 FF0000}$alignr${cpugraph cpu2 20,107 FFFF00 FF0000}
Battery ${battery_time BAT0} ${alignr}(${battery BAT0})
${battery_bar 4 BAT0}
${color}Ram ${alignr}$mem / $memmax ($memperc%)
${color}${membar 4}
${color}Swap ${alignr}$swap / $swapmax ($swapperc%)
${color}${swapbar 4}
${color}Highest CPU ${goto 140}CPU%${alignr}MEM%
${color red}${top name 1}${goto 140}${top cpu 1}${alignr}${top mem 1}
${color}${top name 2}${goto 140}${top cpu 2}${alignr}${top mem 2}
${color}${top name 3}${goto 140}${top cpu 3}${alignr}${top mem 3}
${color}${top name 4}${goto 140}${top cpu 4}${alignr}${top mem 4}
${color}${top name 5}${goto 140}${top cpu 5}${alignr}${top mem 5}
${color}Highest MEM ${goto 140}CPU% ${alignr}MEM%
${color red}${top_mem name 1}${goto 140}${top_mem cpu 1}${alignr}${top_mem mem 1}
${color}${top_mem name 2}${goto 140}${top_mem cpu 2}${alignr}${top_mem mem 2}
${color}${top_mem name 3}${goto 140}${top_mem cpu 3}${alignr}${top_mem mem 3}
${color}${top_mem name 4}${goto 140}${top_mem cpu 4}${alignr}${top_mem mem 4}
${color}${top_mem name 5}${goto 140}${top_mem cpu 5}${alignr}${top_mem mem 5}
${color}FILESYSTEM & HARD DRIVES ${color}${hr 1}
File System:${alignr}Free Space: ${fs_free_perc /}%
${color}${fs_bar 4 /}
${color}Used: ${fs_used /}${alignr}Free: ${fs_free /}
Seagate:${alignr}Free Space: ${fs_free_perc /media/Seagate}%
${color}${fs_bar 4 /media/Seagate}
${color}Used: ${fs_used /media/Seagate}${alignr}Free: ${fs_free /media/Seagate}
Samsung:${alignr}Free Space: ${fs_free_perc /media/Samsung}%
${color}${fs_bar 4 /media/Samsung}
${color}Used: ${fs_used /media/Samsung}${alignr}Free: ${fs_free /media/Samsung}
${color}NETWORK ${color}${hr 1}
${color}Wlan0 Down ${downspeed wlan0}/s ${alignr}Up ${upspeed wlan0}/s
${color}${downspeedgraph wlan0 20,107 FFFF00 FF0000}$alignr${upspeedgraph wlan0 20,107 FFFF00 FF0000}
${color}Totals: Wlan0 ${totaldown wlan0} ${alignr}${totalup wlan0}
${color}Wlan0 Bitrate: ${wireless_bitrate wlan0}
${color}Eth0 Down ${downspeed eth0}/s ${alignr}Up ${upspeed eth0}/s
${color}${downspeedgraph eth0 20,107 FFFF00 FF0000}$alignr${upspeedgraph eth0 20,107 FFFF00 FF0000}
${color}Totals: Eth0 ${totaldown eth0} ${alignr}${totalup eth0}
Utilise [X]Ubuntu sur un Notebook Gateway NV-58 22H (nVidia G210M)
Hors ligne
#1314 Le 31/01/2012, à 02:17
- Swiss_Knight
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Sympa Kamelot314
Tu penses qu'il serait possible d'aller grep le nom des disques durs quelque part ? dans une commande udevadm par exemple ? ou autre, je ne sais pas.
xuniL
Hors ligne
#1315 Le 31/01/2012, à 02:23
- Kamelot314
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Sympa Kamelot314
Tu penses qu'il serait possible d'aller grep le nom des disques durs quelque part ? dans une commande udevadm par exemple ? ou autre, je ne sais pas.
Merci a toi!
Avec simplement Gparted, tu peux les voirs! Mes 2 disques durs sont des USB donc je l'ai ait cree moi meme. Mais pour ceux qui ne savent pas, avec l'utilitaire Gparted, vous pouvez le savoir et meme les renommez si vous voulez. Et ensuite simplement a ecrire le nom que vous voulez dans le script!
Utilise [X]Ubuntu sur un Notebook Gateway NV-58 22H (nVidia G210M)
Hors ligne
#1316 Le 01/02/2012, à 13:19
- Swiss_Knight
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Salut tous,
mon CPU se débloque de 3 à 4 cœurs, mais parfois après un crash, il revient à 3, et là conky patauge dans la choucroute : il ne veut rien afficher parce qu'il ne trouve pas le bon nombre de CPU.
J'ai, je pense, résolu ça dans .conykrc de la sorte, en mettant une condition pour l'affichage du 4ème cœur :
${if_match ${tail ~/conkymeteo/cond_meteo 1 1}==4}${goto 5}${voffset 2}${font StyleBats:size=9.9}${color2}k${voffset -2}${font DroidSansFallback:size=8.4}${color3}${offset 2}CPU 4${offset 5}${font DroidSans:size=8.2}${cpu cpu4}%${font}${offset 8}${endif}
Mais ça bug toujours, sauf qu'il s'affiche quelques secondes quand même cette fois, donc le .conkyrc a l'air OK. En creusant, j'ai vu qu'il y avait aussi un appel au quatrième cœur dans un petit script Lua qui permet d'afficher les barres d'utilisation :
{ --[ Graph for CPU4 ]--
name="cpu",
arg="cpu4",
max=100,
alarm=50,
alarm_colour={0xFF0000,0.72},
bg_colour={0xFFFFFF,0.25},
fg_colour={0x00FF00,0.55},
mid_colour={{0.45,0xFFFF00,0.70}},
x=82,y=217+i,
blocks=62,
space=0.96,
height=2,width=5,
angle=90,
smooth=true
},
Sauf que là, je ne sais pas comment mettre une condition...
Il me faudrait une idée nouvelle, ceci ne fonctionnant pas (attempt to call a nil value) :
numCores = tonumber(conky_parse(string.format('${%s %s %s %s}', 'tail', '~/conkymeteo/cond_meteo', '1', '1')))
if numCores == 4 then
le reste du code ici
end
xuniL
Hors ligne
#1317 Le 01/02/2012, à 13:34
- Didier-T
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Salut tous,
mon CPU se débloque de 3 à 4 cœurs, mais parfois après un crash, il revient à 3, et là conky patauge dans la choucroute : il ne veut rien afficher parce qu'il ne trouve pas le bon nombre de CPU.
...
tu peut tester cette ligne cher toi avec 3 puis 4 cœurs, pour voir ce que sa donne.
egrep -c '^processor' /proc/cpuinfo
si elle fonctionne correctement, je pourrais te donner une solution, pour ton affichage évolutif.
Hors ligne
#1318 Le 01/02/2012, à 14:02
- Swiss_Knight
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Salut Didier-T,
ça donne 3 ou 4 en fonction du nombre de cœurs actifs.
Et si jamais ça peut aider, j'ai mis dans mon script qui va prendre les informations sur la météo, une ligne comme suit :
grep -c processor /proc/cpuinfo >> ~/conkymeteo/cond_meteo
qui rajoute à la dernière ligne du fichier de sortie (cond_meteo), un chiffre qui indique le nombre de cœurs actifs. 3 ou 4.
Et c'est basé sur cette dernière ligne, que dans .conkyrc, je peux faire :
${if_match ${tail ~/conkymeteo/cond_meteo 1 1}==4}
le code qui concerne le 4ème cœur.
${endif}
Ça, ça a l'air de fonctionner.
Mais dans le code Lua (c.f. mon post précédent) je ne sais pas comment faire pour mettre le bloc de code qui concerne le 4ème cœur dans une condition du même genre.
xuniL
Hors ligne
#1319 Le 01/02/2012, à 14:20
- Didier-T
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Salut Didier-T,
ça donne 3 ou 4 en fonction du nombre de cœurs actifs.Et si jamais ça peut aider, j'ai mis dans mon script qui va prendre les informations sur la météo, une ligne comme suit :
grep -c processor /proc/cpuinfo >> ~/conkymeteo/cond_meteo
qui rajoute à la dernière ligne du fichier de sortie (cond_meteo), un chiffre qui indique le nombre de cœurs actifs. 3 ou 4.
Et c'est basé sur cette dernière ligne, que dans .conkyrc, je peux faire :
${if_match ${tail ~/conkymeteo/cond_meteo 1 1}==4} le code qui concerne le 4ème cœur. ${endif}
Ça, ça a l'air de fonctionner.
Mais dans le code Lua (c.f. mon post précédent) je ne sais pas comment faire pour mettre le bloc de code qui concerne le 4ème cœur dans une condition du même genre.
en fait ce que tu montre dans ton précédent post est un bloc de variable, tu ne peut donc pas insérer une condition à cette endroit ci, tu peut coller le contenue total de ton lua. avec un peut de chance, je pourrai t'aider.
Hors ligne
#1320 Le 01/02/2012, à 14:23
- Swiss_Knight
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
ah ? D'accord...
Tu as déjà du en voir passer des pareils :
--[[
BARGRAPH WIDGET
v2.1 by wlourf (07 Jan. 2011)
this widget draws a bargraph with different effects
http://u-scripts.blogspot.com/2010/07/bargraph-widget.html
To call the script in a conky, use, before TEXT
lua_load /path/to/the/script/bargraph.lua
lua_draw_hook_pre main_rings
and add one line (blank or not) after TEXT
Parameters are :
3 parameters are mandatory
name - the name of the conky variable to display, for example for {$cpu cpu0}, just write name="cpu"
arg - the argument of the above variable, for example for {$cpu cpu0}, just write arg="cpu0"
arg can be a numerical value if name=""
max - the maximum value the above variable can reach, for example, for {$cpu cpu0}, just write max=100
Optional parameters:
x,y - coordinates of the starting point of the bar, default = middle of the conky window
cap - end of cap line, ossibles values are r,b,s (for round, butt, square), default="b"
http://www.cairographics.org/samples/set_line_cap/
angle - angle of rotation of the bar in degress, default = 0 (i.e. a vertical bar)
set to 90 for an horizontal bar
skew_x - skew bar around x axis, default = 0
skew_y - skew bar around y axis, default = 0
blocks - number of blocks to display for a bar (values >0) , default= 10
height - height of a block, default=10 pixels
width - width of a block, default=20 pixels
space - space between 2 blocks, default=2 pixels
angle_bar - this angle is used to draw a bar on a circular way (ok, this is no more a bar !) default=0
radius - for cicular bars, internal radius, default=0
with radius, parameter width has no more effect.
Colours below are defined into braces {colour in hexadecimal, alpha}
fg_colour - colour of a block ON, default= {0x00FF00,1}
bg_colour - colour of a block OFF, default = {0x00FF00,0.5}
alarm - threshold, values after this threshold will use alarm_colour colour , default=max
alarm_colour - colour of a block greater than alarm, default=fg_colour
smooth - (true or false), create a gradient from fg_colour to bg_colour, default=false
mid_colour - colours to add to gradient, with this syntax {position into the gradient (0 to1), colour hexa, alpha}
for example, this table {{0.25,0xff0000,1},{0.5,0x00ff00,1},{0.75,0x0000ff,1}} will add
3 colours to gradient created by fg_colour and alarm_colour, default=no mid_colour
led_effect - add LED effects to each block, default=no led_effect
if smooth=true, led_effect is not used
possibles values : "r","a","e" for radial, parallel, perdendicular to the bar (just try!)
led_effect has to be used with theses colours :
fg_led - middle colour of a block ON, default = fg_colour
bg_led - middle colour of a block OFF, default = bg_colour
alarm_led - middle colour of a block > ALARM, default = alarm_colour
reflection parameters, not available for circular bars
reflection_alpha - add a reflection effect (values from 0 to 1) default = 0 = no reflection
other values = starting opacity
reflection_scale - scale of the reflection (default = 1 = height of text)
reflection_length - length of reflection, define where the opacity will be set to zero
values from 0 to 1, default =1
reflection - position of reflection, relative to a vertical bar, default="b"
possibles values are : "b","t","l","r" for bottom, top, left, right
draw_me - if set to false, text is not drawn (default = true or 1)
it can be used with a conky string, if the string returns 1, the text is drawn :
example : "${if_empty ${wireless_essid wlan0}}${else}1$endif",
v1.0 (10 Feb. 2010) original release
v1.1 (13 Feb. 2010) numeric values can be passed instead conky stats with parameters name="", arg = numeric_value
v1.2 (28 Feb. 2010) just renamed the widget to bargraph
v1.3 (03 Mar. 2010) added parameters radius & angle_bar to draw the bar in a circular way
v2.0 (12 Jul. 2010) rewrite script + add reflection effects and parameters are now set into tables
v2.1 (07 Jan. 2011) Add draw_me parameter and correct memory leaks, thanks to "Creamy Goodness"
-- This program is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation version 3 (GPLv3)
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-- MA 02110-1301, USA.
]]
require 'cairo'
----------------START OF PARAMETERS ----------
function conky_main_bars()
i=0
local bars_settings={
{ --[ Graph for CPU1 ]--
name="cpu",
arg="cpu1",
max=100,
alarm=50,
alarm_colour={0xFF0000,0.72},
bg_colour={0xFFFFFF,0.25},
fg_colour={0x00FF00,0.55},
mid_colour={{0.45,0xFFFF00,0.70}},
x=82,y=172+i,
blocks=62,
space=0.96,
height=2,width=5,
angle=90,
smooth=true
},
{ --[ Graph for CPU2 ]--
name="cpu",
arg="cpu2",
max=100,
alarm=50,
alarm_colour={0xFF0000,0.72},
bg_colour={0xFFFFFF,0.25},
fg_colour={0x00FF00,0.55},
mid_colour={{0.45,0xFFFF00,0.70}},
x=82,y=187+i,
blocks=62,
space=0.96,
height=2,width=5,
angle=90,
smooth=true
},
{ --[ Graph for CPU3 ]--
name="cpu",
arg="cpu3",
max=100,
alarm=50,
alarm_colour={0xFF0000,0.72},
bg_colour={0xFFFFFF,0.25},
fg_colour={0x00FF00,0.55},
mid_colour={{0.45,0xFFFF00,0.70}},
x=82,y=202+i,
blocks=62,
space=0.96,
height=2,width=5,
angle=90,
smooth=true
},
--numCores = tonumber(conky_parse(string.format('${%s %s %s %s}', 'tail', '~/conkymeteo/cond_meteo', '1', '1')))
--numCores = tonumber(conky_parse('${tail path_to_weather_log 1 1}')),
--if numCores == 4 then
{ --[ Graph for CPU4 ]--
name="cpu",
arg="cpu4",
max=100,
alarm=50,
alarm_colour={0xFF0000,0.72},
bg_colour={0xFFFFFF,0.25},
fg_colour={0x00FF00,0.55},
mid_colour={{0.45,0xFFFF00,0.70}},
x=82,y=217+i,
blocks=62,
space=0.96,
height=2,width=5,
angle=90,
smooth=true
},
--end
{ --[ Graph for Memory ]--
name="memperc",
arg="",
max=100,
alarm=50,
alarm_colour={0xFF0000,0.72},
bg_colour={0xFFFFFF,0.25},
fg_colour={0x00FF00,0.55},
mid_colour={{0.45,0xFFFF00,0.70}},
x=15,y=317+i,
blocks=83,
space=1,
height=2,width=5,
angle=90,
smooth=true
},
{ --[ Graph for Root ]--
name="fs_used_perc",
arg="/",
max=100,
alarm=50,
alarm_colour={0xFF0000,0.72},
bg_colour={0xFFFFFF,0.25},
fg_colour={0x00FF00,0.55},
mid_colour={{0.45,0xFFFF00,0.70}},
x=15,y=355+i,
blocks=83,
space=1,
height=2,width=5,
angle=90,
smooth=true
},
{ --[ Graph for Home ]--
name="fs_used_perc",
arg="/home",
max=100,
alarm=50,
alarm_colour={0xFF0000,0.72},
bg_colour={0xFFFFFF,0.25},
fg_colour={0x00FF00,0.55},
mid_colour={{0.45,0xFFFF00,0.70}},
x=16,y=383+i,
blocks=83,
space=1,
height=2,width=5,
angle=90,
smooth=true
},
{ --[ Graph for Swap ]--
name="swapperc",
arg="",
max=100,
alarm=50,
alarm_colour={0xFF0000,0.72},
bg_colour={0xFFFFFF,0.25},
fg_colour={0x00FF00,0.55},
mid_colour={{0.45,0xFFFF00,0.70}},
x=16,y=411+i,
blocks=83,
space=1,
height=2,width=5,
angle=90,
smooth=true
},
{ --[ Graph for Network ]--
name="downspeed wlan0",
arg="",
max=20,
alarm=50,
alarm_colour={0xFF0000,0.72},
bg_colour={0xFFFFFF,0.25},
fg_colour={0x00FF00,0.55},
mid_colour={{0.45,0xFFFF00,0.70}},
x=64,y=571+i,
blocks=40,
space=1,
height=2,width=5,
angle=90,
smooth=true
},
}
-----------END OF PARAMETERS--------------
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)
cr = cairo_create(cs)
--prevent segmentation error when reading cpu state
if tonumber(conky_parse('${updates}'))>3 then
for i in pairs(bars_settings) do
draw_multi_bar_graph(bars_settings[i])
end
end
cairo_destroy(cr)
cairo_surface_destroy(cs)
cr=nil
end
function draw_multi_bar_graph(t)
cairo_save(cr)
--check values
if t.draw_me == true then t.draw_me = nil end
if t.draw_me ~= nil and conky_parse(tostring(t.draw_me)) ~= "1" then return end
if t.name==nil and t.arg==nil then
print ("No input values ... use parameters 'name' with 'arg' or only parameter 'arg' ")
return
end
if t.max==nil then
print ("No maximum value defined, use 'max'")
return
end
if t.name==nil then t.name="" end
if t.arg==nil then t.arg="" end
--set default values
if t.x == nil then t.x = conky_window.width/2 end
if t.y == nil then t.y = conky_window.height/2 end
if t.blocks == nil then t.blocks=10 end
if t.height == nil then t.height=10 end
if t.angle == nil then t.angle=0 end
t.angle = t.angle*math.pi/180
--line cap style
if t.cap==nil then t.cap = "b" end
local cap="b"
for i,v in ipairs({"s","r","b"}) do
if v==t.cap then cap=v end
end
local delta=0
if t.cap=="r" or t.cap=="s" then delta = t.height end
if cap=="s" then cap = CAIRO_LINE_CAP_SQUARE
elseif cap=="r" then
cap = CAIRO_LINE_CAP_ROUND
elseif cap=="b" then
cap = CAIRO_LINE_CAP_BUTT
end
--end line cap style
--if t.led_effect == nil then t.led_effect="r" end
if t.width == nil then t.width=20 end
if t.space == nil then t.space=2 end
if t.radius == nil then t.radius=0 end
if t.angle_bar == nil then t.angle_bar=0 end
t.angle_bar = t.angle_bar*math.pi/360 --halt angle
--colours
if t.bg_colour == nil then t.bg_colour = {0x00FF00,0.5} end
if #t.bg_colour~=2 then t.bg_colour = {0x00FF00,0.5} end
if t.fg_colour == nil then t.fg_colour = {0x00FF00,1} end
if #t.fg_colour~=2 then t.fg_colour = {0x00FF00,1} end
if t.alarm_colour == nil then t.alarm_colour = t.fg_colour end
if #t.alarm_colour~=2 then t.alarm_colour = t.fg_colour end
if t.mid_colour ~= nil then
for i=1, #t.mid_colour do
if #t.mid_colour[i]~=3 then
print ("error in mid_color table")
t.mid_colour[i]={1,0xFFFFFF,1}
end
end
end
if t.bg_led ~= nil and #t.bg_led~=2 then t.bg_led = t.bg_colour end
if t.fg_led ~= nil and #t.fg_led~=2 then t.fg_led = t.fg_colour end
if t.alarm_led~= nil and #t.alarm_led~=2 then t.alarm_led = t.fg_led end
if t.led_effect~=nil then
if t.bg_led == nil then t.bg_led = t.bg_colour end
if t.fg_led == nil then t.fg_led = t.fg_colour end
if t.alarm_led == nil then t.alarm_led = t.fg_led end
end
if t.alarm==nil then t.alarm = t.max end --0.8*t.max end
if t.smooth == nil then t.smooth = false end
if t.skew_x == nil then
t.skew_x=0
else
t.skew_x = math.pi*t.skew_x/180
end
if t.skew_y == nil then
t.skew_y=0
else
t.skew_y = math.pi*t.skew_y/180
end
if t.reflection_alpha==nil then t.reflection_alpha=0 end
if t.reflection_length==nil then t.reflection_length=1 end
if t.reflection_scale==nil then t.reflection_scale=1 end
--end of default values
local function rgb_to_r_g_b(col_a)
return ((col_a[1] / 0x10000) % 0x100) / 255., ((col_a[1] / 0x100) % 0x100) / 255., (col_a[1] % 0x100) / 255., col_a[2]
end
--functions used to create patterns
local function create_smooth_linear_gradient(x0,y0,x1,y1)
local pat = cairo_pattern_create_linear (x0,y0,x1,y1)
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(t.fg_colour))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(t.alarm_colour))
if t.mid_colour ~=nil then
for i=1, #t.mid_colour do
cairo_pattern_add_color_stop_rgba (pat, t.mid_colour[i][1], rgb_to_r_g_b({t.mid_colour[i][2],t.mid_colour[i][3]}))
end
end
return pat
end
local function create_smooth_radial_gradient(x0,y0,r0,x1,y1,r1)
local pat = cairo_pattern_create_radial (x0,y0,r0,x1,y1,r1)
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(t.fg_colour))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(t.alarm_colour))
if t.mid_colour ~=nil then
for i=1, #t.mid_colour do
cairo_pattern_add_color_stop_rgba (pat, t.mid_colour[i][1], rgb_to_r_g_b({t.mid_colour[i][2],t.mid_colour[i][3]}))
end
end
return pat
end
local function create_led_linear_gradient(x0,y0,x1,y1,col_alp,col_led)
local pat = cairo_pattern_create_linear (x0,y0,x1,y1) ---delta, 0,delta+ t.width,0)
cairo_pattern_add_color_stop_rgba (pat, 0.0, rgb_to_r_g_b(col_alp))
cairo_pattern_add_color_stop_rgba (pat, 0.5, rgb_to_r_g_b(col_led))
cairo_pattern_add_color_stop_rgba (pat, 1.0, rgb_to_r_g_b(col_alp))
return pat
end
local function create_led_radial_gradient(x0,y0,r0,x1,y1,r1,col_alp,col_led,mode)
local pat = cairo_pattern_create_radial (x0,y0,r0,x1,y1,r1)
if mode==3 then
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col_alp))
cairo_pattern_add_color_stop_rgba (pat, 0.5, rgb_to_r_g_b(col_led))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col_alp))
else
cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col_led))
cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col_alp))
end
return pat
end
local function draw_single_bar()
--this fucntion is used for bars with a single block (blocks=1) but
--the drawing is cut in 3 blocks : value/alarm/background
--not zvzimzblr for circular bar
local function create_pattern(col_alp,col_led,bg)
local pat
if not t.smooth then
if t.led_effect=="e" then
pat = create_led_linear_gradient (-delta, 0,delta+ t.width,0,col_alp,col_led)
elseif t.led_effect=="a" then
pat = create_led_linear_gradient (t.width/2, 0,t.width/2,-t.height,col_alp,col_led)
elseif t.led_effect=="r" then
pat = create_led_radial_gradient (t.width/2, -t.height/2, 0, t.width/2,-t.height/2,t.height/1.5,col_alp,col_led,2)
else
pat = cairo_pattern_create_rgba (rgb_to_r_g_b(col_alp))
end
else
if bg then
pat = cairo_pattern_create_rgba (rgb_to_r_g_b(t.bg_colour))
else
pat = create_smooth_linear_gradient(t.width/2, 0, t.width/2,-t.height)
end
end
return pat
end
local y1=-t.height*pct/100
local y2,y3
if pct>(100*t.alarm/t.max) then
y1 = -t.height*t.alarm/100
y2 = -t.height*pct/100
if t.smooth then y1=y2 end
end
if t.angle_bar==0 then
--block for fg value
local pat = create_pattern(t.fg_colour,t.fg_led,false)
cairo_set_source(cr,pat)
cairo_rectangle(cr,0,0,t.width,y1)
cairo_fill(cr)
cairo_pattern_destroy(pat)
-- block for alarm value
if not t.smooth and y2 ~=nil then
pat = create_pattern(t.alarm_colour,t.alarm_led,false)
cairo_set_source(cr,pat)
cairo_rectangle(cr,0,y1,t.width,y2-y1)
cairo_fill(cr)
y3=y2
cairo_pattern_destroy(pat)
else
y2,y3=y1,y1
end
-- block for bg value
cairo_rectangle(cr,0,y2,t.width,-t.height-y3)
pat = create_pattern(t.bg_colour,t.bg_led,true)
cairo_set_source(cr,pat)
cairo_pattern_destroy(pat)
cairo_fill(cr)
end
end --end single bar
local function draw_multi_bar()
--function used for bars with 2 or more blocks
for pt = 1,t.blocks do
--set block y
local y1 = -(pt-1)*(t.height+t.space)
local light_on=false
--set colors
local col_alp = t.bg_colour
local col_led = t.bg_led
if pct>=(100/t.blocks) or pct>0 then --ligth on or not the block
if pct>=(pcb*(pt-1)) then
light_on = true
col_alp = t.fg_colour
col_led = t.fg_led
if pct>=(100*t.alarm/t.max) and (pcb*pt)>(100*t.alarm/t.max) then
col_alp = t.alarm_colour
col_led = t.alarm_led
end
end
end
--set colors
--have to try to create gradients outside the loop ?
local pat
if not t.smooth then
if t.angle_bar==0 then
if t.led_effect=="e" then
pat = create_led_linear_gradient (-delta, 0,delta+ t.width,0,col_alp,col_led)
elseif t.led_effect=="a" then
pat = create_led_linear_gradient (t.width/2, -t.height/2+y1,t.width/2,0+t.height/2+y1,col_alp,col_led)
elseif t.led_effect=="r" then
pat = create_led_radial_gradient (t.width/2, y1, 0, t.width/2,y1,t.width/1.5,col_alp,col_led,2)
else
pat = cairo_pattern_create_rgba (rgb_to_r_g_b(col_alp))
end
else
if t.led_effect=="a" then
pat = create_led_radial_gradient (0, 0, t.radius+(t.height+t.space)*(pt-1),
0, 0, t.radius+(t.height+t.space)*(pt),
col_alp,col_led,3)
else
pat = cairo_pattern_create_rgba (rgb_to_r_g_b(col_alp))
end
end
else
if light_on then
if t.angle_bar==0 then
pat = create_smooth_linear_gradient(t.width/2, t.height/2, t.width/2,-(t.blocks-0.5)*(t.height+t.space))
else
pat = create_smooth_radial_gradient(0, 0, (t.height+t.space), 0,0,(t.blocks+1)*(t.height+t.space),2)
end
else
pat = cairo_pattern_create_rgba (rgb_to_r_g_b(t.bg_colour))
end
end
cairo_set_source (cr, pat)
cairo_pattern_destroy(pat)
--draw a block
if t.angle_bar==0 then
cairo_move_to(cr,0,y1)
cairo_line_to(cr,t.width,y1)
else
cairo_arc( cr,0,0,
t.radius+(t.height+t.space)*(pt)-t.height/2,
-t.angle_bar -math.pi/2 ,
t.angle_bar -math.pi/2)
end
cairo_stroke(cr)
end
end
local function setup_bar_graph()
--function used to retrieve the value to display and to set the cairo structure
if t.blocks ~=1 then t.y=t.y-t.height/2 end
local value = 0
if t.name ~="" then
value = tonumber(conky_parse(string.format('${%s %s}', t.name, t.arg)))
--$to_bytes doesn't work when value has a decimal point,
--https://garage.maemo.org/plugins/ggit/browse.php/?p=monky;a=commitdiff;h=174c256c81a027a2ea406f5f37dc036fac0a524b;hp=d75e2db5ed3fc788fb8514121f67316ac3e5f29f
--http://sourceforge.net/tracker/index.php?func=detail&aid=3000865&group_id=143975&atid=757310
--conky bug?
--value = (conky_parse(string.format('${%s %s}', t.name, t.arg)))
--if string.match(value,"%w") then
-- value = conky_parse(string.format('${to_bytes %s}',value))
--end
else
value = tonumber(t.arg)
end
if value==nil then value =0 end
pct = 100*value/t.max
pcb = 100/t.blocks
cairo_set_line_width (cr, t.height)
cairo_set_line_cap (cr, cap)
cairo_translate(cr,t.x,t.y)
cairo_rotate(cr,t.angle)
local matrix0 = cairo_matrix_t:create()
tolua.takeownership(matrix0)
cairo_matrix_init (matrix0, 1,t.skew_y,t.skew_x,1,0,0)
cairo_transform(cr,matrix0)
--call the drawing function for blocks
if t.blocks==1 and t.angle_bar==0 then
draw_single_bar()
if t.reflection=="t" or t.reflection=="b" then cairo_translate(cr,0,-t.height) end
else
draw_multi_bar()
end
--dot for reminder
--[[
if t.blocks ~=1 then
cairo_set_source_rgba(cr,1,0,0,1)
cairo_arc(cr,0,t.height/2,3,0,2*math.pi)
cairo_fill(cr)
else
cairo_set_source_rgba(cr,1,0,0,1)
cairo_arc(cr,0,0,3,0,2*math.pi)
cairo_fill(cr)
end]]
--call the drawing function for reflection and prepare the mask used
if t.reflection_alpha>0 and t.angle_bar==0 then
local pat2
local matrix1 = cairo_matrix_t:create()
tolua.takeownership(matrix1)
if t.angle_bar==0 then
pts={-delta/2,(t.height+t.space)/2,t.width+delta,-(t.height+t.space)*(t.blocks)}
if t.reflection=="t" then
cairo_matrix_init (matrix1,1,0,0,-t.reflection_scale,0,-(t.height+t.space)*(t.blocks-0.5)*2*(t.reflection_scale+1)/2)
pat2 = cairo_pattern_create_linear (t.width/2,-(t.height+t.space)*(t.blocks),t.width/2,(t.height+t.space)/2)
elseif t.reflection=="r" then
cairo_matrix_init (matrix1,-t.reflection_scale,0,0,1,delta+2*t.width,0)
pat2 = cairo_pattern_create_linear (delta/2+t.width,0,-delta/2,0)
elseif t.reflection=="l" then
cairo_matrix_init (matrix1,-t.reflection_scale,0,0,1,-delta,0)
pat2 = cairo_pattern_create_linear (-delta/2,0,delta/2+t.width,-0)
else --bottom
cairo_matrix_init (matrix1,1,0,0,-1*t.reflection_scale,0,(t.height+t.space)*(t.reflection_scale+1)/2)
pat2 = cairo_pattern_create_linear (t.width/2,(t.height+t.space)/2,t.width/2,-(t.height+t.space)*(t.blocks))
end
end
cairo_transform(cr,matrix1)
if t.blocks==1 and t.angle_bar==0 then
draw_single_bar()
cairo_translate(cr,0,-t.height/2)
else
draw_multi_bar()
end
cairo_set_line_width(cr,0.01)
cairo_pattern_add_color_stop_rgba (pat2, 0,0,0,0,1-t.reflection_alpha)
cairo_pattern_add_color_stop_rgba (pat2, t.reflection_length,0,0,0,1)
if t.angle_bar==0 then
cairo_rectangle(cr,pts[1],pts[2],pts[3],pts[4])
end
cairo_clip_preserve(cr)
cairo_set_operator(cr,CAIRO_OPERATOR_CLEAR)
cairo_stroke(cr)
cairo_mask(cr,pat2)
cairo_pattern_destroy(pat2)
cairo_set_operator(cr,CAIRO_OPERATOR_OVER)
end --reflection
pct,pcb=nil
end --setup_bar_graph()
--start here !
setup_bar_graph()
cairo_restore(cr)
end
xuniL
Hors ligne
#1321 Le 01/02/2012, à 14:38
- Didier-T
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
ah ? D'accord...
Tu as déjà du en voir passer des pareils :
--[[ BARGRAPH WIDGET v2.1 by wlourf (07 Jan. 2011) this widget draws a bargraph with different effects http://u-scripts.blogspot.com/2010/07/bargraph-widget.html To call the script in a conky, use, before TEXT lua_load /path/to/the/script/bargraph.lua lua_draw_hook_pre main_rings and add one line (blank or not) after TEXT Parameters are : 3 parameters are mandatory name - the name of the conky variable to display, for example for {$cpu cpu0}, just write name="cpu" arg - the argument of the above variable, for example for {$cpu cpu0}, just write arg="cpu0" arg can be a numerical value if name="" max - the maximum value the above variable can reach, for example, for {$cpu cpu0}, just write max=100 Optional parameters: x,y - coordinates of the starting point of the bar, default = middle of the conky window cap - end of cap line, ossibles values are r,b,s (for round, butt, square), default="b" http://www.cairographics.org/samples/set_line_cap/ angle - angle of rotation of the bar in degress, default = 0 (i.e. a vertical bar) set to 90 for an horizontal bar skew_x - skew bar around x axis, default = 0 skew_y - skew bar around y axis, default = 0 blocks - number of blocks to display for a bar (values >0) , default= 10 height - height of a block, default=10 pixels width - width of a block, default=20 pixels space - space between 2 blocks, default=2 pixels angle_bar - this angle is used to draw a bar on a circular way (ok, this is no more a bar !) default=0 radius - for cicular bars, internal radius, default=0 with radius, parameter width has no more effect. Colours below are defined into braces {colour in hexadecimal, alpha} fg_colour - colour of a block ON, default= {0x00FF00,1} bg_colour - colour of a block OFF, default = {0x00FF00,0.5} alarm - threshold, values after this threshold will use alarm_colour colour , default=max alarm_colour - colour of a block greater than alarm, default=fg_colour smooth - (true or false), create a gradient from fg_colour to bg_colour, default=false mid_colour - colours to add to gradient, with this syntax {position into the gradient (0 to1), colour hexa, alpha} for example, this table {{0.25,0xff0000,1},{0.5,0x00ff00,1},{0.75,0x0000ff,1}} will add 3 colours to gradient created by fg_colour and alarm_colour, default=no mid_colour led_effect - add LED effects to each block, default=no led_effect if smooth=true, led_effect is not used possibles values : "r","a","e" for radial, parallel, perdendicular to the bar (just try!) led_effect has to be used with theses colours : fg_led - middle colour of a block ON, default = fg_colour bg_led - middle colour of a block OFF, default = bg_colour alarm_led - middle colour of a block > ALARM, default = alarm_colour reflection parameters, not available for circular bars reflection_alpha - add a reflection effect (values from 0 to 1) default = 0 = no reflection other values = starting opacity reflection_scale - scale of the reflection (default = 1 = height of text) reflection_length - length of reflection, define where the opacity will be set to zero values from 0 to 1, default =1 reflection - position of reflection, relative to a vertical bar, default="b" possibles values are : "b","t","l","r" for bottom, top, left, right draw_me - if set to false, text is not drawn (default = true or 1) it can be used with a conky string, if the string returns 1, the text is drawn : example : "${if_empty ${wireless_essid wlan0}}${else}1$endif", v1.0 (10 Feb. 2010) original release v1.1 (13 Feb. 2010) numeric values can be passed instead conky stats with parameters name="", arg = numeric_value v1.2 (28 Feb. 2010) just renamed the widget to bargraph v1.3 (03 Mar. 2010) added parameters radius & angle_bar to draw the bar in a circular way v2.0 (12 Jul. 2010) rewrite script + add reflection effects and parameters are now set into tables v2.1 (07 Jan. 2011) Add draw_me parameter and correct memory leaks, thanks to "Creamy Goodness" -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation version 3 (GPLv3) -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, -- MA 02110-1301, USA. ]] require 'cairo' ----------------START OF PARAMETERS ---------- function conky_main_bars() i=0 local bars_settings={ { --[ Graph for CPU1 ]-- name="cpu", arg="cpu1", max=100, alarm=50, alarm_colour={0xFF0000,0.72}, bg_colour={0xFFFFFF,0.25}, fg_colour={0x00FF00,0.55}, mid_colour={{0.45,0xFFFF00,0.70}}, x=82,y=172+i, blocks=62, space=0.96, height=2,width=5, angle=90, smooth=true }, { --[ Graph for CPU2 ]-- name="cpu", arg="cpu2", max=100, alarm=50, alarm_colour={0xFF0000,0.72}, bg_colour={0xFFFFFF,0.25}, fg_colour={0x00FF00,0.55}, mid_colour={{0.45,0xFFFF00,0.70}}, x=82,y=187+i, blocks=62, space=0.96, height=2,width=5, angle=90, smooth=true }, { --[ Graph for CPU3 ]-- name="cpu", arg="cpu3", max=100, alarm=50, alarm_colour={0xFF0000,0.72}, bg_colour={0xFFFFFF,0.25}, fg_colour={0x00FF00,0.55}, mid_colour={{0.45,0xFFFF00,0.70}}, x=82,y=202+i, blocks=62, space=0.96, height=2,width=5, angle=90, smooth=true }, --numCores = tonumber(conky_parse(string.format('${%s %s %s %s}', 'tail', '~/conkymeteo/cond_meteo', '1', '1'))) --numCores = tonumber(conky_parse('${tail path_to_weather_log 1 1}')), --if numCores == 4 then { --[ Graph for CPU4 ]-- name="cpu", arg="cpu4", max=100, alarm=50, alarm_colour={0xFF0000,0.72}, bg_colour={0xFFFFFF,0.25}, fg_colour={0x00FF00,0.55}, mid_colour={{0.45,0xFFFF00,0.70}}, x=82,y=217+i, blocks=62, space=0.96, height=2,width=5, angle=90, smooth=true }, --end { --[ Graph for Memory ]-- name="memperc", arg="", max=100, alarm=50, alarm_colour={0xFF0000,0.72}, bg_colour={0xFFFFFF,0.25}, fg_colour={0x00FF00,0.55}, mid_colour={{0.45,0xFFFF00,0.70}}, x=15,y=317+i, blocks=83, space=1, height=2,width=5, angle=90, smooth=true }, { --[ Graph for Root ]-- name="fs_used_perc", arg="/", max=100, alarm=50, alarm_colour={0xFF0000,0.72}, bg_colour={0xFFFFFF,0.25}, fg_colour={0x00FF00,0.55}, mid_colour={{0.45,0xFFFF00,0.70}}, x=15,y=355+i, blocks=83, space=1, height=2,width=5, angle=90, smooth=true }, { --[ Graph for Home ]-- name="fs_used_perc", arg="/home", max=100, alarm=50, alarm_colour={0xFF0000,0.72}, bg_colour={0xFFFFFF,0.25}, fg_colour={0x00FF00,0.55}, mid_colour={{0.45,0xFFFF00,0.70}}, x=16,y=383+i, blocks=83, space=1, height=2,width=5, angle=90, smooth=true }, { --[ Graph for Swap ]-- name="swapperc", arg="", max=100, alarm=50, alarm_colour={0xFF0000,0.72}, bg_colour={0xFFFFFF,0.25}, fg_colour={0x00FF00,0.55}, mid_colour={{0.45,0xFFFF00,0.70}}, x=16,y=411+i, blocks=83, space=1, height=2,width=5, angle=90, smooth=true }, { --[ Graph for Network ]-- name="downspeed wlan0", arg="", max=20, alarm=50, alarm_colour={0xFF0000,0.72}, bg_colour={0xFFFFFF,0.25}, fg_colour={0x00FF00,0.55}, mid_colour={{0.45,0xFFFF00,0.70}}, x=64,y=571+i, blocks=40, space=1, height=2,width=5, angle=90, smooth=true }, } -----------END OF PARAMETERS-------------- 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) cr = cairo_create(cs) --prevent segmentation error when reading cpu state if tonumber(conky_parse('${updates}'))>3 then for i in pairs(bars_settings) do draw_multi_bar_graph(bars_settings[i]) end end cairo_destroy(cr) cairo_surface_destroy(cs) cr=nil end function draw_multi_bar_graph(t) cairo_save(cr) --check values if t.draw_me == true then t.draw_me = nil end if t.draw_me ~= nil and conky_parse(tostring(t.draw_me)) ~= "1" then return end if t.name==nil and t.arg==nil then print ("No input values ... use parameters 'name' with 'arg' or only parameter 'arg' ") return end if t.max==nil then print ("No maximum value defined, use 'max'") return end if t.name==nil then t.name="" end if t.arg==nil then t.arg="" end --set default values if t.x == nil then t.x = conky_window.width/2 end if t.y == nil then t.y = conky_window.height/2 end if t.blocks == nil then t.blocks=10 end if t.height == nil then t.height=10 end if t.angle == nil then t.angle=0 end t.angle = t.angle*math.pi/180 --line cap style if t.cap==nil then t.cap = "b" end local cap="b" for i,v in ipairs({"s","r","b"}) do if v==t.cap then cap=v end end local delta=0 if t.cap=="r" or t.cap=="s" then delta = t.height end if cap=="s" then cap = CAIRO_LINE_CAP_SQUARE elseif cap=="r" then cap = CAIRO_LINE_CAP_ROUND elseif cap=="b" then cap = CAIRO_LINE_CAP_BUTT end --end line cap style --if t.led_effect == nil then t.led_effect="r" end if t.width == nil then t.width=20 end if t.space == nil then t.space=2 end if t.radius == nil then t.radius=0 end if t.angle_bar == nil then t.angle_bar=0 end t.angle_bar = t.angle_bar*math.pi/360 --halt angle --colours if t.bg_colour == nil then t.bg_colour = {0x00FF00,0.5} end if #t.bg_colour~=2 then t.bg_colour = {0x00FF00,0.5} end if t.fg_colour == nil then t.fg_colour = {0x00FF00,1} end if #t.fg_colour~=2 then t.fg_colour = {0x00FF00,1} end if t.alarm_colour == nil then t.alarm_colour = t.fg_colour end if #t.alarm_colour~=2 then t.alarm_colour = t.fg_colour end if t.mid_colour ~= nil then for i=1, #t.mid_colour do if #t.mid_colour[i]~=3 then print ("error in mid_color table") t.mid_colour[i]={1,0xFFFFFF,1} end end end if t.bg_led ~= nil and #t.bg_led~=2 then t.bg_led = t.bg_colour end if t.fg_led ~= nil and #t.fg_led~=2 then t.fg_led = t.fg_colour end if t.alarm_led~= nil and #t.alarm_led~=2 then t.alarm_led = t.fg_led end if t.led_effect~=nil then if t.bg_led == nil then t.bg_led = t.bg_colour end if t.fg_led == nil then t.fg_led = t.fg_colour end if t.alarm_led == nil then t.alarm_led = t.fg_led end end if t.alarm==nil then t.alarm = t.max end --0.8*t.max end if t.smooth == nil then t.smooth = false end if t.skew_x == nil then t.skew_x=0 else t.skew_x = math.pi*t.skew_x/180 end if t.skew_y == nil then t.skew_y=0 else t.skew_y = math.pi*t.skew_y/180 end if t.reflection_alpha==nil then t.reflection_alpha=0 end if t.reflection_length==nil then t.reflection_length=1 end if t.reflection_scale==nil then t.reflection_scale=1 end --end of default values local function rgb_to_r_g_b(col_a) return ((col_a[1] / 0x10000) % 0x100) / 255., ((col_a[1] / 0x100) % 0x100) / 255., (col_a[1] % 0x100) / 255., col_a[2] end --functions used to create patterns local function create_smooth_linear_gradient(x0,y0,x1,y1) local pat = cairo_pattern_create_linear (x0,y0,x1,y1) cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(t.fg_colour)) cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(t.alarm_colour)) if t.mid_colour ~=nil then for i=1, #t.mid_colour do cairo_pattern_add_color_stop_rgba (pat, t.mid_colour[i][1], rgb_to_r_g_b({t.mid_colour[i][2],t.mid_colour[i][3]})) end end return pat end local function create_smooth_radial_gradient(x0,y0,r0,x1,y1,r1) local pat = cairo_pattern_create_radial (x0,y0,r0,x1,y1,r1) cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(t.fg_colour)) cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(t.alarm_colour)) if t.mid_colour ~=nil then for i=1, #t.mid_colour do cairo_pattern_add_color_stop_rgba (pat, t.mid_colour[i][1], rgb_to_r_g_b({t.mid_colour[i][2],t.mid_colour[i][3]})) end end return pat end local function create_led_linear_gradient(x0,y0,x1,y1,col_alp,col_led) local pat = cairo_pattern_create_linear (x0,y0,x1,y1) ---delta, 0,delta+ t.width,0) cairo_pattern_add_color_stop_rgba (pat, 0.0, rgb_to_r_g_b(col_alp)) cairo_pattern_add_color_stop_rgba (pat, 0.5, rgb_to_r_g_b(col_led)) cairo_pattern_add_color_stop_rgba (pat, 1.0, rgb_to_r_g_b(col_alp)) return pat end local function create_led_radial_gradient(x0,y0,r0,x1,y1,r1,col_alp,col_led,mode) local pat = cairo_pattern_create_radial (x0,y0,r0,x1,y1,r1) if mode==3 then cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col_alp)) cairo_pattern_add_color_stop_rgba (pat, 0.5, rgb_to_r_g_b(col_led)) cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col_alp)) else cairo_pattern_add_color_stop_rgba (pat, 0, rgb_to_r_g_b(col_led)) cairo_pattern_add_color_stop_rgba (pat, 1, rgb_to_r_g_b(col_alp)) end return pat end local function draw_single_bar() --this fucntion is used for bars with a single block (blocks=1) but --the drawing is cut in 3 blocks : value/alarm/background --not zvzimzblr for circular bar local function create_pattern(col_alp,col_led,bg) local pat if not t.smooth then if t.led_effect=="e" then pat = create_led_linear_gradient (-delta, 0,delta+ t.width,0,col_alp,col_led) elseif t.led_effect=="a" then pat = create_led_linear_gradient (t.width/2, 0,t.width/2,-t.height,col_alp,col_led) elseif t.led_effect=="r" then pat = create_led_radial_gradient (t.width/2, -t.height/2, 0, t.width/2,-t.height/2,t.height/1.5,col_alp,col_led,2) else pat = cairo_pattern_create_rgba (rgb_to_r_g_b(col_alp)) end else if bg then pat = cairo_pattern_create_rgba (rgb_to_r_g_b(t.bg_colour)) else pat = create_smooth_linear_gradient(t.width/2, 0, t.width/2,-t.height) end end return pat end local y1=-t.height*pct/100 local y2,y3 if pct>(100*t.alarm/t.max) then y1 = -t.height*t.alarm/100 y2 = -t.height*pct/100 if t.smooth then y1=y2 end end if t.angle_bar==0 then --block for fg value local pat = create_pattern(t.fg_colour,t.fg_led,false) cairo_set_source(cr,pat) cairo_rectangle(cr,0,0,t.width,y1) cairo_fill(cr) cairo_pattern_destroy(pat) -- block for alarm value if not t.smooth and y2 ~=nil then pat = create_pattern(t.alarm_colour,t.alarm_led,false) cairo_set_source(cr,pat) cairo_rectangle(cr,0,y1,t.width,y2-y1) cairo_fill(cr) y3=y2 cairo_pattern_destroy(pat) else y2,y3=y1,y1 end -- block for bg value cairo_rectangle(cr,0,y2,t.width,-t.height-y3) pat = create_pattern(t.bg_colour,t.bg_led,true) cairo_set_source(cr,pat) cairo_pattern_destroy(pat) cairo_fill(cr) end end --end single bar local function draw_multi_bar() --function used for bars with 2 or more blocks for pt = 1,t.blocks do --set block y local y1 = -(pt-1)*(t.height+t.space) local light_on=false --set colors local col_alp = t.bg_colour local col_led = t.bg_led if pct>=(100/t.blocks) or pct>0 then --ligth on or not the block if pct>=(pcb*(pt-1)) then light_on = true col_alp = t.fg_colour col_led = t.fg_led if pct>=(100*t.alarm/t.max) and (pcb*pt)>(100*t.alarm/t.max) then col_alp = t.alarm_colour col_led = t.alarm_led end end end --set colors --have to try to create gradients outside the loop ? local pat if not t.smooth then if t.angle_bar==0 then if t.led_effect=="e" then pat = create_led_linear_gradient (-delta, 0,delta+ t.width,0,col_alp,col_led) elseif t.led_effect=="a" then pat = create_led_linear_gradient (t.width/2, -t.height/2+y1,t.width/2,0+t.height/2+y1,col_alp,col_led) elseif t.led_effect=="r" then pat = create_led_radial_gradient (t.width/2, y1, 0, t.width/2,y1,t.width/1.5,col_alp,col_led,2) else pat = cairo_pattern_create_rgba (rgb_to_r_g_b(col_alp)) end else if t.led_effect=="a" then pat = create_led_radial_gradient (0, 0, t.radius+(t.height+t.space)*(pt-1), 0, 0, t.radius+(t.height+t.space)*(pt), col_alp,col_led,3) else pat = cairo_pattern_create_rgba (rgb_to_r_g_b(col_alp)) end end else if light_on then if t.angle_bar==0 then pat = create_smooth_linear_gradient(t.width/2, t.height/2, t.width/2,-(t.blocks-0.5)*(t.height+t.space)) else pat = create_smooth_radial_gradient(0, 0, (t.height+t.space), 0,0,(t.blocks+1)*(t.height+t.space),2) end else pat = cairo_pattern_create_rgba (rgb_to_r_g_b(t.bg_colour)) end end cairo_set_source (cr, pat) cairo_pattern_destroy(pat) --draw a block if t.angle_bar==0 then cairo_move_to(cr,0,y1) cairo_line_to(cr,t.width,y1) else cairo_arc( cr,0,0, t.radius+(t.height+t.space)*(pt)-t.height/2, -t.angle_bar -math.pi/2 , t.angle_bar -math.pi/2) end cairo_stroke(cr) end end local function setup_bar_graph() --function used to retrieve the value to display and to set the cairo structure if t.blocks ~=1 then t.y=t.y-t.height/2 end local value = 0 if t.name ~="" then value = tonumber(conky_parse(string.format('${%s %s}', t.name, t.arg))) --$to_bytes doesn't work when value has a decimal point, --https://garage.maemo.org/plugins/ggit/browse.php/?p=monky;a=commitdiff;h=174c256c81a027a2ea406f5f37dc036fac0a524b;hp=d75e2db5ed3fc788fb8514121f67316ac3e5f29f --http://sourceforge.net/tracker/index.php?func=detail&aid=3000865&group_id=143975&atid=757310 --conky bug? --value = (conky_parse(string.format('${%s %s}', t.name, t.arg))) --if string.match(value,"%w") then -- value = conky_parse(string.format('${to_bytes %s}',value)) --end else value = tonumber(t.arg) end if value==nil then value =0 end pct = 100*value/t.max pcb = 100/t.blocks cairo_set_line_width (cr, t.height) cairo_set_line_cap (cr, cap) cairo_translate(cr,t.x,t.y) cairo_rotate(cr,t.angle) local matrix0 = cairo_matrix_t:create() tolua.takeownership(matrix0) cairo_matrix_init (matrix0, 1,t.skew_y,t.skew_x,1,0,0) cairo_transform(cr,matrix0) --call the drawing function for blocks if t.blocks==1 and t.angle_bar==0 then draw_single_bar() if t.reflection=="t" or t.reflection=="b" then cairo_translate(cr,0,-t.height) end else draw_multi_bar() end --dot for reminder --[[ if t.blocks ~=1 then cairo_set_source_rgba(cr,1,0,0,1) cairo_arc(cr,0,t.height/2,3,0,2*math.pi) cairo_fill(cr) else cairo_set_source_rgba(cr,1,0,0,1) cairo_arc(cr,0,0,3,0,2*math.pi) cairo_fill(cr) end]] --call the drawing function for reflection and prepare the mask used if t.reflection_alpha>0 and t.angle_bar==0 then local pat2 local matrix1 = cairo_matrix_t:create() tolua.takeownership(matrix1) if t.angle_bar==0 then pts={-delta/2,(t.height+t.space)/2,t.width+delta,-(t.height+t.space)*(t.blocks)} if t.reflection=="t" then cairo_matrix_init (matrix1,1,0,0,-t.reflection_scale,0,-(t.height+t.space)*(t.blocks-0.5)*2*(t.reflection_scale+1)/2) pat2 = cairo_pattern_create_linear (t.width/2,-(t.height+t.space)*(t.blocks),t.width/2,(t.height+t.space)/2) elseif t.reflection=="r" then cairo_matrix_init (matrix1,-t.reflection_scale,0,0,1,delta+2*t.width,0) pat2 = cairo_pattern_create_linear (delta/2+t.width,0,-delta/2,0) elseif t.reflection=="l" then cairo_matrix_init (matrix1,-t.reflection_scale,0,0,1,-delta,0) pat2 = cairo_pattern_create_linear (-delta/2,0,delta/2+t.width,-0) else --bottom cairo_matrix_init (matrix1,1,0,0,-1*t.reflection_scale,0,(t.height+t.space)*(t.reflection_scale+1)/2) pat2 = cairo_pattern_create_linear (t.width/2,(t.height+t.space)/2,t.width/2,-(t.height+t.space)*(t.blocks)) end end cairo_transform(cr,matrix1) if t.blocks==1 and t.angle_bar==0 then draw_single_bar() cairo_translate(cr,0,-t.height/2) else draw_multi_bar() end cairo_set_line_width(cr,0.01) cairo_pattern_add_color_stop_rgba (pat2, 0,0,0,0,1-t.reflection_alpha) cairo_pattern_add_color_stop_rgba (pat2, t.reflection_length,0,0,0,1) if t.angle_bar==0 then cairo_rectangle(cr,pts[1],pts[2],pts[3],pts[4]) end cairo_clip_preserve(cr) cairo_set_operator(cr,CAIRO_OPERATOR_CLEAR) cairo_stroke(cr) cairo_mask(cr,pat2) cairo_pattern_destroy(pat2) cairo_set_operator(cr,CAIRO_OPERATOR_OVER) end --reflection pct,pcb=nil end --setup_bar_graph() --start here ! setup_bar_graph() cairo_restore(cr) end
alors j'ai une bonne et une mauvaise nouvelle.
la bonne nouvelle c'est faisable sans soucis
la mauvaise, pour que sa puisse se faire il faut que les infos sur ton quatrièmes cœurs soit dans la dernière partie du tableau (la dernière section {})
il faut modifier cette partie ci
if tonumber(conky_parse('${updates}'))>3 then
for i in pairs(bars_settings) do
draw_multi_bar_graph(bars_settings[i])
end
en quelque chose comme ça
if tonumber(conky_parse('${updates}'))>3 then
NbCoeur = conky_parse("egrep -c '^processor' /proc/cpuinfo")
for i in ((pairs(bars_settings)-4)+NbCoeur) do
draw_multi_bar_graph(bars_settings[i])
end
a tester
Hors ligne
#1322 Le 01/02/2012, à 14:53
- Swiss_Knight
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Quand tu dis qu'il faut que la partie qui contient les infos sur le CPU 4 soit dans le dernier tableau... de quel tableau est-ce que tu parles ?
Est-ce que je dois déplacer le bloc que j'ai coller dans mon avant-dernier post, après celui qui concerne le réseau (--[ Graph for Network ]--)
dans les paramètres en haut du fichier ??
Même en faisant ça, j'obtiens cette erreur après :
Conky: llua_do_call: function conky_main_bars execution failed: /home/swissknight/.conky/bargraph_small.lua:254: attempt to perform arithmetic on a function value
xuniL
Hors ligne
#1323 Le 01/02/2012, à 14:56
- Didier-T
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Quand tu dis qu'il faut que la partie qui contient les infos sur le CPU 4 soit dans le dernier tableau... de quel tableau est-ce que tu parles ?
Est-ce que je dois déplacer le bloc que j'ai coller dans mon avant-dernier post, après celui qui concerne le réseau (--[ Graph for Network ]--)
dans les paramètres en haut du fichier ??Même en faisant ça, j'obtiens cette erreur après :
Conky: llua_do_call: function conky_main_bars execution failed: /home/swissknight/.conky/bargraph_small.lua:254: attempt to perform arithmetic on a function value
excuse moi j'ai oublié un détail dans le conky_parse
if tonumber(conky_parse('${updates}'))>3 then
NbCoeur = conky_parse("${exec egrep -c '^processor' /proc/cpuinfo}")
for i in ((pairs(bars_settings)-4)+NbCoeur) do
draw_multi_bar_graph(bars_settings[i])
end
pour le reste ce que tu as fait est bon.
en fait le but est de ne pas afficher le dernier graphique configuré.
Hors ligne
#1324 Le 01/02/2012, à 15:03
- Swiss_Knight
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Même message d'erreur avec la correction
Il n'aime apparemment pas les expressions arithmétiques dans le if ...
le message d'erreur portant sur la ligne 254 qui est la suivante :
for i in ((pairs(bars_settings)-4)+NbCoeur) do
Dernière modification par Swiss_Knight (Le 01/02/2012, à 15:06)
xuniL
Hors ligne
#1325 Le 01/02/2012, à 15:15
- Didier-T
Re : (4) Conky : Postez vos conkyrc ou certaines parties intéressantes
Même message d'erreur avec la correction
Il n'aime apparemment pas les expressions arithmétiques dans le if ...le message d'erreur portant sur la ligne 254 qui est la suivante :
for i in ((pairs(bars_settings)-4)+NbCoeur) do
Bon et bien si il n'aime pas écrit comme sa ont vas changer un peut
if tonumber(conky_parse('${updates}'))>3 then
local NbCoeur = conky_parse("${exec egrep -c '^processor' /proc/cpuinfo}")
local Nbgraph = pairs(bars_settings)
Nbgraph = Nbgraph-4
Nbgraph = Nbgraph+tonumber(NbCoeur)
for i in Nbgraph do
draw_multi_bar_graph(bars_settings[i])
end
Hors ligne