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() --############################################################