Už je to nějaký pátek, kdy jsem postřehl existenci vysokoúrovňového jazyka LUA. Byť jsem po roce 2000 v C a C++ již nic nenapsal, zkusil jsem provětrat mozkové zavity, především kvůli Conky, který si s LUA skriptovacím jazykem vcelku rozumí.
Nutno předem podotknout, že následující skript (pokud jej použijete) funguje jen s LUA verzí 5.1. Tuto verzi máte v systému, pokud jste instalovaly balík ‚conky-all‘. U novější verze byly z LUA odstraněny funkce ‚setfenv‘ a ‚getfenv‘, které jsem použil pro spouštění „modulů“.
Dále budete potřebovat nainstalované aplikace a knihovny:
xdotool, wget, udisks2, libcairo2, libimlib2
Pořadí modulů ve skriptu lze jednoduše měnit, ale pozor na první modul. Ten by měl zůstat ‚system‘ a také nesmí být mezi jednotlivými moduly „mezera“.
Skript momentálně obsahuje 5 modulů: systém, procesy, disky, network a počasí (mám v plánu ještě RSS a logy systému).
obrázek modulů: (pokud položka nějakého modulu změní barvu při najetí kurzorem, je možné na ni kliknout)

Z obrázku je i patrná zátěž cpu při provozu tohoto skriptu.
Nastavení conky.rc:
# Conky
########
update_interval 1
format_human_readable yes
text_buffer_size 16384
# Window
#########
own_window yes
own_window_type normal
own_window_transparent yes
own_window_argb_visual yes
own_window_hints sticky,below,skip_taskbar,skip_pager,undecorated
# Graphics
###########
double_buffer yes
draw_borders no
draw_graph_borders no
# Layout
#########
#gap_x 5
gap_y 5
alignment top_right
minimum_size 350 740
# Text
#######
draw_outline no
draw_shades no
xftfont sans:size=8
use_xft yes
xftalpha 1
default_color fff
color1 grey
color2 white
# Lua
######
own_window_title klik_panel_conky
lua_load /home/vlk/conky/klik_conky.lua
lua_draw_hook_pre main
template1 ${lua_parse cpugraf1}
template2 ${lua_parse cpugraf2}
template9 ${lua_parse wget}
TEXT
${template1}${cpugraph cpu1 35,166 FFFF00 FF0000 s}${template2}${cpugraph cpu2 35,166 FFFF00 FF0000 s}
${font Mono:size=8}${color white}${goto 10}${voffset -48}Core 1 ${freq_g 1} GHz ${hwmon 2 temp 2}°C Core 2 ${freq_g 2} GHz ${hwmon 2 temp 3}°C
${font Mono:size=12}${if_match ${cpu cpu1} <= 9}${goto 83}${cpu cpu1}$else${goto 78}${cpu cpu1}${endif}${goto 108}%${if_match ${cpu cpu2} <= 9}${goto 258}${cpu cpu2}$else${goto 253}${cpu cpu2}${endif}${goto 283}%
### konec nastavení cpu grafu ###
${template9}
V samotném LUA skriptu je na začátku i malá nápověda. Omlouvám se aktivním programátorům. Vím, že mnohé konstrukce v tomto primitivním skriptu lze řešit elegantněji.
Následuje základní nastavení celého skriptu. Jednotlivé moduly budu uveřejňovat postupně, neboť na dalších pracuji. Ty poté stačí jen zkopírovat na konec tohoto nastavení a do tabulky ‚modul‘ zadat název modulu.
U modulu ‚system‘ je potřeba nastavit, zda-li má být zobrazen cpu graf(funguje jen u dvoujádrového cpu), nebo cpu bar.
require 'cairo'
require 'imlib2'
------------------------------------------------------------
--hodnoty pro nastavení funkce kurzor()
conky_title = "klik_panel_conky"
kurzor_start = 1
--hodnoty pro nastavení funkce pozadi()
pozadi_menu = 1
pozadi_panel = 1
pozadi_barva = {0.3,0.3,0.3,0.9}
--hodnoty pro nastavení panelu
rozmer_panelu_x = 350
rozmer_panelu_y = 740
--hodnoty pro vykreslení cpu grafu ve spolupráci s modulem system
cpu_graf = {nil,nil} --tabulka pro pozici grafu
cpu_graf_start = 1 --hodnota pro zobrazení grafu (1 = graf)
--hodnoty pro modul počasí
--(absolutní cesty k adresářům s potřebnými daty)
pocasi_obr = "/home/vlk/conky/ikony_pocasi/" --adresář s obrázky
pocasi_soubor = "/home/vlk/conky/conky_pocasi" --umístění a název souboru s daty
pocasi_hodnoty = nil --data s předpovědí
pocasi_url = "www.in-pocasi.cz" --adresa pro stahování dat
--tabulka pro stahování pomocí funkce conky_wget()
wget = {}
------------------------------------------------------------
--globální tabulka pro pořadí jednotlivých modulů
--(pokud je použito grafu pro vykreslení zatížení cpu,
--je nutné ponechat modul 'system' jako první)
modul = {["name"] = {},["pozice"] = {},}
--seznam modulů
-- system, procesy, disky, network, pocasi
modul.name[1] = "system"
modul.name[2] = ""
modul.name[3] = ""
modul.name[4] = ""
modul.name[5] = ""
------------------------------------------------------------
--globální tabulky pro nastavení modulů
update = {
["system"] = nil,
["procesy"] = nil,
["disky"] = nil,
["network"] = nil,
["pocasi"] = nil,
}
interval = {
["system"] = 300, --hodnotu je možné měnit
["procesy"] = 3, --hodnotu je možné měnit
["disky"] = 5, --hodnotu je možné měnit
["network"] = 4, --hodnotu je možné měnit
["pocasi"] = 10, --hodnotu je možné měnit
}
klik_menu = {
["procesy"] = 0, --hodnotu je možné měnit(1= otevřené menu)
["disky"] = 0, --hodnotu je možné měnit(1= otevřené menu)
["network"] = 0, --hodnotu je možné měnit(1= otevřené menu)
["pocasi"] = 1, --hodnotu je možné měnit(1= otevřené menu)
}
--############################################################
--############################################################
--############################################################
function conky_main()
--pokud okno Conky neexistuje, dojde k ukončení skriptu
if conky_window == nil then return end
--nastavení Cairo knihovny pro vykreslování
local create_surface = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
cr = cairo_create(create_surface)
-----------------------------------------------------------
--proměnná pro nastavení intervalu obnovy dat v modulech
updates = tonumber(conky_parse('${updates}'))
--funkce pro podporu myši
kurzor()
-----------------------------------------------------------
--spouštění modulů (funkcí) podle pořadí v globální tabulce "modul"
for m = 1,#modul.name do
--název modulu musí být delší jak 3 znaky
if string.len(modul.name[m]) > 3 then
--podmínka pro pozici prvního modulu - nastaví souřadnici Y
if tonumber(m) == 1 then modul.pozice[m] = 20 end
--spouštění funkcí
local name = "modul_"..tostring(modul.name[m]).."()"
local func = loadstring(name)
if func then
setfenv(func, getfenv())
func()
end--if func then
end--if string.len(modul.name[m]) > 3 then
end--for m = 1,#modul.name do
-----------------------------------------------------------
--ukončení vykreslování Cairo knihovny
cairo_destroy(cr)
cairo_surface_destroy(create_surface)
cr = nil
end--function conky_main()
--############################################################
function kurzor()
------------------------------------------------------------
-- VLKODLAK
-- 2015 ver 0.5
------------------------------------------------------------
-- poskytuje souřadnice kurzoru, pokud je kurzor v okně Conky
-- a zaznamenává souřadnice kliknutí myší
--
-- funkce vrací hodnoty - mx,my,kx,ky
--
--##########################################################
--
-- pro svou činnost potřebuje: globální proměnné (před hlavní funkcí - conky_main())
--[[
conky_title = --název okna aplikace 'Conky', který musí být jedinečný
--v celém tomto skriptu a musí se shodovat s názvem
--zadaným v conky.rc v položce 'own_window_title'
kurzor_start = 1 --slouží pro jedno spuštění aplikace 'xdotool'
--]]
--
-- pro svou činnost potřebuje: nainstalované aplikace
--[[
xdotool --poskytuje informace o kurzoru
xwin --poskytuje informace o aktivním okně
--]]
------------------------------------------------------------
--soubor pro data se souřadnicemi kliknutí
tmpkurzor = "/tmp/xdotool"
--první průchod - ukončení již spuštěné aplikace xdotool
if kurzor_start == 1 then
os.execute("killall xdotool") --ukončení všech xdotool
--spuštění xdotool s odchytáváním pozice/kliknutí kurzoru myši
os.execute("xdotool search --name '"..conky_title.."' behave %@ mouse-click getmouselocation 2> /dev/null >> "..tmpkurzor.." &")
--naplnění tabulky "xwin" - souřadnice a id Conky okna
local data = io.popen("xwininfo -int -name '"..conky_title.."'")
xwindata = data:read("*a")
data:close()
z,k,appx = string.find(xwindata,"Absolute%s%S*%sX%p%s*(%d*)")
z,k,appy = string.find(xwindata,"Absolute%s%S*%sY%p%s*(%d*)")
z,k,appid = string.find(xwindata,"xwininfo%p%s%w*%s%S*%s(%d*)%s")
xwin = {appx,appy,appid}
--nastavení globální proměnné pro přeskočení prvního průchodu v dalším cyklu
kurzor_start = nil
end--if kurzor_start == 1 then
----------------------------------------
--zjištění pozice kurzoru a okna aplikací xdotool
local data = io.popen("xdotool getmouselocation 2> /dev/null")
xdo = data:read("*a")
data:close()
z,k,xdo_x = string.find(xdo,"x%p(%d*)%s")
z,k,xdo_y = string.find(xdo,"y%p(%d*)%s")
z,k,xdoid = string.find(xdo,"window%p(%d*)")
--pokud se bude ID okna Conky shodovat...
if tonumber(xwin[3]) == tonumber(xdoid) then
-- ...uloží se hodnoty kurzoru myši
mx = (tonumber(xdo_x or 0)) - tonumber(xwin[1])
my = (tonumber(xdo_y or 0)) - tonumber(xwin[2])
-- ...načtou se hodnoty kliknuti
local data = io.open (tmpkurzor)
kliknuti = data:read("*a")
data:close()
--nahrazení hodnot, pokud je soubor prázdný
if kliknuti == nil then kliknuti = "x:0 y:0 " end
--uložení hodnot kliknutí
z,k,klik_x = string.find(kliknuti,"x%p(%d*)%s")
z,k,klik_y = string.find(kliknuti,"y%p(%d*)%s")
kx = (tonumber(klik_x or 0)) - tonumber(xwin[1])
ky = (tonumber(klik_y or 0)) - tonumber(xwin[2])
--vymazání souboru kliknutí
local data = io.open(tmpkurzor,"w")
data:write("")
data:close()
else--if tonumber(xwin[3]) == tonumber(xdoid) then
--nulové hodnoty, pokud se ID okna Conky neshoduje
mx,my,kx,ky = 0,0,0,0
end--if tonumber(xwin[3]) == tonumber(xdoid) then
return mx,my,kx,ky
end--function kurzor()
--############################################################
function pozadi(poz,vyska)
local r,g,b,a = pozadi_barva[1],pozadi_barva[2],pozadi_barva[3],pozadi_barva[4]
local delka = rozmer_panelu_x
local x = 0
local y = poz
cairo_set_source_rgba (cr, r,g,b,a);
cairo_rectangle (cr, x,y,delka,vyska);
cairo_fill (cr);
end--function pozadi()
--############################################################
function conky_cpugraf1()
------------------------------------------------------------
-- VLKODLAK 2015 ver 0.1
------------------------------------------------------------
--obsahuje pozici z modulu 'system' pro zobrazení grafu CPU1
------------------------------------------------------------
if cpu_graf[1] == nil then
vystup = " "
else
vystup = "${goto "..tonumber(cpu_graf[1]).."}${voffset "..tonumber(cpu_graf[2]).."}"
end
return vystup
end--function conky_cpugraf1()
--############################################################
function conky_cpugraf2()
------------------------------------------------------------
-- VLKODLAK 2015 ver 0.1
------------------------------------------------------------
--obsahuje pozici z modulu 'system' pro zobrazení grafu CPU2
------------------------------------------------------------
if cpu_graf[1] == nil then
vystup = " "
else
vystup = "${goto "..tonumber(cpu_graf[1] + 173).."}"
end
return vystup
end--function conky_cpugraf2()
--############################################################
function conky_wget()
------------------------------------------------------------
-- VLKODLAK 2014 ver 0.2
------------------------------------------------------------
-- stáhne požadovaný soubor pomoci Conky ${texeci }
------------------------------------------------------------
-- pro správnou funkci potřebuje globální tabulku
-- wget = {}
------------------------------------------------------------
-- nastavení v conky.rc
--
-- template9 ${lua_parse wget}
-- TEXT
-- ${template9}
------------------------------------------------------------
--stahování pro modul_pocasi
if wget.pocasi == nil then return "" else return tostring(wget.pocasi) end
end--function conky_wget()
--############################################################
function bar(conky_indikace,odsazeni,x,y,pbar,ibar,sbar,vbar)
------------------------------------------------------------
-- VLKODLAK
-- 2015 ver 0.1
------------------------------------------------------------
-- zobrazí bar pro požadovanou položku
------------------------------------------------------------
ukazatel = conky_indikace
--počáteční pozice baru
startx = x + odsazeni
starty = y
--rozměry baru
delka = sbar --bar length
vyska = vbar --bar height
--barva pozadí (rgba)
pr,pg,pb,pa = pbar[1],pbar[2],pbar[3],pbar[4]
--barva indikátoru (rgba)
ir,ig,ib,ia = ibar[1],ibar[2],ibar[3],ibar[4]
--tvorba baru - výpočet pro indikátor
indikator = (100-tonumber(ukazatel))*(tonumber(delka)/100)
--pozadí
cairo_set_source_rgba (cr, pr,pg,pb,pa);
cairo_rectangle (cr, startx, starty, delka, vyska);
cairo_fill (cr);
--indikátor
cairo_set_source_rgba (cr, ir,ig,ib,ia);
cairo_rectangle (cr, startx, starty, delka-indikator, vyska);
cairo_fill (cr);
end--function bar(conky_indikace,odsazeni,x,y,pbar,ibar,sbar,vbar)
--############################################################
function modul_system()
------------------------------------------------------------
-- VLKODLAK
-- 2015 ver 0.2
------------------------------------------------------------
-- modul zobrazuje několik informací o systému a určuje pozici
-- pro vykreslení cpugrafu, který má nastavení v conky.rc
--
--##########################################################
--
-- pro svou činnost potřebuje: funkce
--[[
pozadi(poz,vyska)
bar(conky_indikace,odsazeni,x,y,pbar,ibar,sbar,vbar)
--]]
--
-- pro svou činnost potřebuje: globální tabulky (před hlavní funkcí - conky_main())
--[[
update = {
["system"] = nil,
}
interval = {
["system"] = 300,
}
--]]
--
-- pro svou činnost potřebuje: globální proměnné (před hlavní funkcí - conky_main())
--[[
pozadi_menu --nastavuje pozadí pro menu
pozadi_panel --nastavuje pozadí pro panel
pozadi_barva --nastavuje barvu pozadí
rozmer_panelu_x --rozměr panelu v pixelech, musí se shodovat s nastavením
--hodnoty 'minimum_size' v conky.rc
cpu_graf = {nil,nil} --tabulka pro uložení pozice cpu grafu
cpu_graf_start = 1 --pro zobrazení cpu grafu == 1 / baru ~= 1
-- pro zobrazení cpu baru místo cpu grafu, nastavit proměnnou
'cpu_graf_start' na jinou hodnotu , než '1' a spouštět Conky
s konfigurací bez následujících hodnot
template1 ${lua_parse cpugraf1}
template2 ${lua_parse cpugraf2}
TEXT
${template1}${cpugraph cpu1 35,166 FFFF00 FF0000 s}${template2}${cpugraph cpu2 35,166 FFFF00 FF0000 s}
${font Mono:size=8}${color white}${goto 10}${voffset -48}Core 1 ${freq_g 1} GHz ${hwmon 2 temp 2}°C Core 2 ${freq_g 2} GHz ${hwmon 2 temp 3}°C
${font Mono:size=12}${if_match ${cpu cpu1} <= 9}${goto 83}${cpu cpu1}$else${goto 78}${cpu cpu1}${endif}${goto 108}%${if_match ${cpu cpu2} <= 9}${goto 258}${cpu cpu2}$else${goto 253}${cpu cpu2}${endif}${goto 283}%
--]]
------------------------------------------------------------
--proměnná pro identifikaci modulu
local name = "system"
----------------------------------------
--podmínky pro interval dat modulu
----------------------------------------
if tonumber(update[tostring(name)]) == nil then --první průchod skriptem
--nastavení intervalu
update[tostring(name)] = updates + tonumber(interval[tostring(name)])
----------------------------------------
--definování tabulky pro nastavení modulu
system_tab = {
["cpu"] = nil,
["cpu_nr"] = 0,
["kernel"] = nil,
["arch"] = nil,
["pozice_y"] = nil,
}
----------------------------------------
--smyčka pro zjištění pozice modulu
for a = 1,#modul.name do
local text = tostring(modul.name[a]) --jména z globální tabulky
if string.match(text, "(%S*)") == tostring(name) then
system_tab.pozice_y = a --tabulka nyní obsahuje číslo spouštěného modulu
break
end--if string.match(text, "(%S)") == tostring(name) then
end--for a = 1,#modul.name do
----------------------------------------
--model cpu a počet jader ze souboru
local data = io.open ("/proc/cpuinfo", "r")
while true do
local model = data:read("*l")
if model == nil then break end
z,k,name = string.find(model,"model%sname%s*%p%s([%S%s]*)")
if name ~= nil then
system_tab.cpu = name
system_tab.cpu_nr = tonumber(system_tab.cpu_nr) + 1
end--if name ~= nil then
end--while true do
data:close()
----------------------------------------
--pokud se jedná o dvoujádrové cpu, lze zobrazit cpugraf
if system_tab.cpu_nr == 2 then
cpu_graf[1] = 5
cpu_graf[2] = 65
end--if system_cpu_nr == 2 then
----------------------------------------
--kernel a architektura
system_tab.kernel = conky_parse("${kernel}")
system_tab.arch = conky_parse("${machine}")
elseif tonumber(update[tostring(name)]) <= updates then --ostatní průchody skriptem
--nastavení intervalu
update[tostring(name)] = updates + tonumber(interval[tostring(name)])
--obnova informací o kernelu (aktualizace)
system_tab.kernel = conky_parse("${kernel}")
end--if tonumber(update[tostring(name)]) == nil then
----------------------------------------
--výpis dat modulu
----------------------------------------
local x = 0
local y = modul.pozice[tonumber(system_tab.pozice_y)]
--nastavení fontu
cairo_select_font_face (cr, "Mono", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
----------------------------------------
--volání funkce pro vykreslení pozadí
if pozadi_panel == 1 and cpu_graf_start == 1 then
local poz = y - 15
local vyska = 140
pozadi(poz,vyska) --volání funkce pro vykreslení pozadí
elseif pozadi_panel == 1 and cpu_graf_start ~= 1 then
local poz = y - 15
local vyska = 70 + (tonumber(system_tab.cpu_nr) * 15) + 35
pozadi(poz,vyska) --volání funkce pro vykreslení pozadí
end--if pozadi_panel = 1 and cpu_graf_start == 1 then
----------------------------------------
--čas,den,datum
y = y + 5
cairo_set_font_size (cr, 16.0); --velikost textu
cairo_set_source_rgba (cr, 1,0.7,0,1); --barva textu
cairo_move_to (cr, x+5, y);cairo_show_text (cr, conky_parse("${time %H:%M}"));
local den = conky_parse("${time %A}")
local delka = tonumber(string.len(den)*7.5)
local pozice = (rozmer_panelu_x - delka) /2
cairo_set_font_size (cr, 14.0); --velikost textu
cairo_set_source_rgba (cr, 1,0.7,0,1); --barva textu
cairo_move_to (cr, pozice, y);cairo_show_text (cr, den);
local datum = conky_parse("${time %e.%B}")
local delka = tonumber(string.len(datum)*7.5)
local pozice = (rozmer_panelu_x) - (delka)
cairo_set_font_size (cr, 14.0); --velikost textu
cairo_set_source_rgba (cr, 1,0.7,0,1); --barva textu
cairo_move_to (cr, pozice, y);cairo_show_text (cr, datum);
----------------------------------------
--čas běhu systému
y = y + 15
cairo_set_font_size (cr, 10.0);
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_move_to (cr, x+5, y);cairo_show_text (cr, "Systém běží: ");
cairo_set_source_rgba (cr, 1,1,1,1);
cairo_show_text (cr, conky_parse("${uptime}"));
----------------------------------------
--jádro a architektura
local text1 = tonumber(string.len(system_tab.kernel)*6.5)
local text2 = tonumber(string.len(system_tab.arch)*6.5)
local delka = text1 + text2
local pozice = rozmer_panelu_x - delka
cairo_set_font_size (cr, 10.0);
cairo_move_to (cr, pozice, y);
cairo_set_source_rgba (cr, 1,1,1,1);cairo_show_text (cr, system_tab.kernel);
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);cairo_show_text (cr, " "..system_tab.arch);
----------------------------------------
--napájení a baterie
y = y + 15
local nahradit_text = {
["off-line"] = "odpojeno",
["on-line"] = "zapojeno",
["discharging"] = "vybíjení",
["charging"] = "nabíjení",
["charged"] = "nabita",
["unknown"] = "n/a",
}
cairo_set_font_size (cr, 10.0);
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_move_to (cr, x+5, y);cairo_show_text (cr, "AC: ");
local adapter = conky_parse("${acpiacadapter}")
if string.match(adapter, "(%S+)") == "on-line" then
cairo_set_source_rgba (cr, 0,1,0,1);
elseif string.match(adapter, "(%S+)") == "off-line" then
cairo_set_source_rgba (cr, 1,0,0,1);
end--if string.match(adapter, "(%S+)") == "on-line" then
adapter = string.gsub (adapter, "%S+", nahradit_text)
cairo_show_text (cr, adapter);
local text = "Baterie: "
local delka = tonumber(string.len(text)*5.5)
local pozice = rozmer_panelu_x/2 - delka
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_move_to (cr, pozice, y);cairo_show_text (cr, text);
local baterie = conky_parse("${battery}")
if string.match(baterie, "(%S+)") == "discharging" then
cairo_set_source_rgba (cr, 1,0,0,1);
elseif string.match(baterie, "(%S+)") == "charging" then
cairo_set_source_rgba (cr, 0,1,0,1);
elseif string.match(baterie, "(%S+)") == "unknown" then
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
elseif string.match(baterie, "(%S+)") == "charged" then
cairo_set_source_rgba (cr, 0,1,0,1);
end--if string.match(baterie, "(%S+)") == "discharging" then
baterie = string.gsub (baterie, "%S+", nahradit_text)
cairo_show_text (cr, baterie);
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_move_to (cr, rozmer_panelu_x - 75, y)
cairo_show_text (cr, conky_parse("${battery_time}"));
----------------------------------------
--procesor
y = y + 15
local text = tonumber(string.len(system_tab.cpu)*6)
local pozice = (rozmer_panelu_x/2) - (text/2)
cairo_set_font_size (cr, 10.0);
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_move_to (cr, pozice, y);
cairo_show_text (cr, system_tab.cpu);
----------------------------------------
--určení pozice grafu/baru a textu
if cpu_graf_start == 1 and system_tab.cpu_nr == 2 then
y = y + 42
elseif cpu_graf_start ~= 1 then
y = y + 8
--nastavení formátu textu
cairo_set_font_size (cr, 10.0);
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
--smyčka pro vykreslení baru a textu
for a = 1,tonumber(system_tab.cpu_nr) do
conky_indikace = conky_parse("${cpu cpu"..tonumber(a).."}")
odsazeni = 60 --odsazení baru od okraje oproti textu (0 = žádné odsazení)
pbar = {0.5,0.4,0.3,0.8} --barva pozadí baru
ibar = {0.1,0.2,0.6,0.5} --barva indikátoru v baru
sbar = rozmer_panelu_x - odsazeni - 10
vbar = 12 --výška baru
--vykresleni baru
bar(conky_indikace,odsazeni,x,y,pbar,ibar,sbar,vbar)
--text pro bar
cairo_set_source_rgba (cr, 0.9,0.9,0.9,1);
cairo_move_to (cr, x+15, y+vbar-2);cairo_show_text (cr, "Core "..tonumber(a));
local frekvence = conky_parse("${freq_g "..tonumber(a).."}")
cairo_move_to (cr, x+85, y+vbar-2);cairo_show_text (cr, frekvence);
cairo_move_to (cr, x+115, y+vbar-2);cairo_show_text (cr, "GHz");
local delka = tonumber(string.len(conky_indikace)*6)
cairo_move_to (cr, rozmer_panelu_x-delka-125, y+vbar-2);
cairo_show_text (cr, conky_indikace);
cairo_move_to (cr, rozmer_panelu_x-122, y+vbar-2);
cairo_show_text (cr, "%");
local teplota = conky_parse("${hwmon 2 temp "..tonumber(a+1).."}")
local delka = tonumber(string.len(teplota)*6)
cairo_move_to (cr, rozmer_panelu_x-delka-30, y+vbar-2);
cairo_show_text (cr, teplota);
cairo_move_to (cr, rozmer_panelu_x-28, y+vbar-2);
cairo_show_text (cr, "°C");
y = y + 15
end--for a = 1,tonumber(system_tab.cpu_nr) do
end--if cpu_graf_start == 1 and system_cpu_nr == 2 then
----------------------------------------
--celkové info o procesech
y = y + 12
cairo_set_font_size (cr, 10.0);
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_move_to (cr, x+5, y);
cairo_show_text (cr, "Procesů: ");
cairo_set_source_rgba (cr, 1,1,1,1);
cairo_show_text (cr, conky_parse("${processes}"));
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_move_to (cr, x+95, y);
cairo_show_text (cr, "Běží: ");
cairo_set_source_rgba (cr, 1,1,1,1);
cairo_show_text (cr, conky_parse("${running_processes}"));
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_move_to (cr, x+155, y);
cairo_show_text (cr, "CPU I/O: ");
cairo_set_source_rgba (cr, 1,1,1,1);
cairo_show_text (cr, conky_parse("${top_io name 1}"));
----------------------------------------
--ram a swap
y = y + 15
cairo_set_font_size (cr, 10.0);
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_move_to (cr, x+5, y);
cairo_show_text (cr, "RAM: ");
local use_mem = conky_parse("${mem}")
z,k,use = string.find(use_mem,"([%d%p]*%w)")
cairo_set_source_rgba (cr, 1,1,1,1);
cairo_show_text (cr, use);
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_show_text (cr, " / ");
local total_mem = conky_parse("${memmax}")
z,k,total = string.find(total_mem,"([%d%p]*%w)")
cairo_show_text (cr, total);
local proc_mem = conky_parse("${memperc}")
cairo_move_to (cr, x+130, y);
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);cairo_show_text (cr, "U:");
cairo_move_to (cr, x+145, y);
cairo_set_source_rgba (cr, 1,1,1,1);cairo_show_text (cr, proc_mem);
cairo_move_to (cr, x+155, y);
cairo_set_source_rgba (cr, 1,1,1,1);cairo_show_text (cr, " %");
cairo_set_font_size (cr, 10.0);
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_move_to (cr, x+180, y);
cairo_show_text (cr, "SWAP: ");
local use_swap = conky_parse("${swap}")
z,k,use = string.find(use_swap,"([%d%p]*%w)")
cairo_set_source_rgba (cr, 1,1,1,1);
cairo_show_text (cr, use);
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);
cairo_show_text (cr, " / ");
local total_swap = conky_parse("${swapmax}")
z,k,total = string.find(total_swap,"([%d%p]*%w)")
cairo_show_text (cr, total);
local proc_swap = conky_parse("${swapperc}")
cairo_move_to (cr, x+300, y);
cairo_set_source_rgba (cr, 0.8,0.8,0.8,1);cairo_show_text (cr, "U:");
if string.match(proc_swap,"%S+%s%S+") == "No swap" then
cairo_move_to (cr, x+315, y);
cairo_set_source_rgba (cr, 1,1,1,1);cairo_show_text (cr, "0");
else
cairo_move_to (cr, x+315, y);
cairo_set_source_rgba (cr, 1,1,1,1);cairo_show_text (cr, proc_swap);
end--if string.match(proc_swap,"%S+%s%S+") == "No swap" then
cairo_move_to (cr, x+325, y);
cairo_set_source_rgba (cr, 1,1,1,1);cairo_show_text (cr, " %");
----------------------------------------
--pozice pro další modul
next_y = y + 20
modul.pozice[tonumber(system_tab.pozice_y)+1] = next_y
return modul
end--function modul_system()
--############################################################