Modul pro Conky zobrazující lokální disky, připojené oddíly (lvm a crypt) – není nastaven na sledování raid polí.
Skript modulu stačí vložit na konec již uveřejněného základního nastavení LUA skriptu a do tabulky ‚modul‘ zadat název modulu. Název modulu naleznete za nápovědou v proměnné:
local name = "disky"
Skript modulu:
function modul_disky() ------------------------------------------------------------ -- VLKODLAK -- 2015 ver 0.2 ------------------------------------------------------------ -- informace o připojených oddílech lokálních disků -- --########################################################## -- -- pro svou činnost potřebuje: funkce --[[ kurzor() 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 = { ["disky"] = nil, } interval = { ["disky"] = 5, } klik_menu = { ["disky"] = 0, } --]] -- -- 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 --]] -- -- pro svou činnost potřebuje: nainstalované aplikace --[[ lsblk --poskytuje informace o oddílech a vrstvách zařízení udisk --poskytuje informace o zařízení --]] ------------------------------------------------------------ --proměnná pro identifikaci modulu local name = "disky" ---------------------------------------- --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)]) ---------------------------------------- --tabulka pro nastavení modulu disky_tab = { ["tl"] = {},--podtabulka pro tlačítka ["reload"] = 1,--stav načtení dat ["delka"] = 0, ["pozice_y"] = nil,--pozice 'y' pro modul } --smyčka pro nastavení pozice modulu for a = 1,#modul.name do local text = tostring(modul.name[a]) if string.match(text, "(%S*)") == tostring(name) then disky_tab.pozice_y = a break end--if string.match(text, "(%S)") == tostring(name) then end--for a = 1,#modul.name do elseif tonumber(update[tostring(name)]) <= updates then --průchod skriptem pro kontrolu počtu zařízení --nastavení intervalu update[tostring(name)] = updates + tonumber(interval[tostring(name)]) ---------------------------------------- --počet existujících zařízení local data = io.popen("ls /sys/block | grep -c sd") local pocet_zarizeni = data:read("*l") data:close() ---------------------------------------- --celkový počet oddílů a připojených oddílů v systému local pocet_oddil = 0 local pocet_mount = 0 local data = io.popen("lsblk -o KNAME,MOUNTPOINT") while true do local line = data:read("*l") if line == nil then break end z,k,vyber = string.find(line, "(%S*)") if vyber ~= nil and vyber ~= "KNAME" then if string.match(vyber,"(%S%S)") == "sd" and string.match(vyber,"%S+(%d+)") ~= nil then pocet_oddil = pocet_oddil + 1 z,k,vyber = string.find(line, "%S+%s+([%S%s]*)") if vyber ~= "" then pocet_mount = pocet_mount + 1 end end if string.match(vyber,"(%S%S)") == "dm" then pocet_oddil = pocet_oddil + 1 z,k,vyber = string.find(line, "%S+%s+([%S%s]*)") if vyber ~= "" then pocet_mount = pocet_mount + 1 end end end--if vyber ~= nil and vyber ~= "KNAME" then end--while true do data:close() ---------------------------------------- --kontrola if tonumber(pocet_mount) ~= tonumber(oddil_info.m) then disky_tab.reload = 2 end if tonumber(pocet_zarizeni) ~= #disk or tonumber(pocet_oddil) ~= tonumber(oddil_info.o) then disky_tab.reload = 1 end ---------------------------------------- --samostatný update informací o smart a teplotě for d = 1, #disk do if disk[tonumber(d)].smart ~= "not available" and disk[tonumber(d)].smart_upd <= updates then --nastaveni samostatneho update disk[tonumber(d)].smart_upd = updates + 300 local data = io.popen("udisks --show-info /dev/"..disk[tonumber(d)].device) while true do local line = data:read("*l") if line == nil then break end --overall assessment: Good z,k,vyber = string.find(line,"overall%sassessment%p%s+([%S%s]*)") if vyber ~= nil then disk[tonumber(d)].smart_stav = vyber end --airflow-temperature-celsius z,k,vyber = string.find(line,"airflow[%S]*%s+%d+|%s?%d+|%s?%d+%s+%S+%s+(%d+)") if vyber ~= nil then disk[tonumber(d)].smart_teplota = vyber end end--while true do data:close()--uzavřeni souboru end--disk[tonumber(d)].smart ~= "not available" and disk[tonumber(d)].smart_upd <= updates end--for d = 1, #disk do end--if tonumber(update[tostring(name)]) == nil then ---------------------------------------- --samostatná podmínka pro zařízení a oddíly ---------------------------------------- if disky_tab.reload == 1 then--průchod skriptem jen při změně počtu zařízení --nastavení intervalu update[tostring(name)] = updates + tonumber(interval[tostring(name)]) ---------------------------------------- --definování tabulky pro data disk = {} --hlavní tabulka o zařízení mount = {} --tabulka pro počet připojených oddílů na zařízení ---------------------------------------- --seznam dostupného hardwaru začínajícího na 'sd' local hw = 1 for line in io.lines("/proc/diskstats") do z,k,vyber = string.find(line,"(%w%w%w)") if vyber ~= nil and string.match(vyber,'sd.') ~= nil then --podtabulky pro každý disk disk[tonumber(hw)] = {} disk[tonumber(hw)].device = vyber mount[tonumber(hw)] = 0 --konstrukce pro vynechání opakujících se názvů if tonumber(hw - 1) == 0 then hw = hw + 1 else if tostring(vyber) == tostring(disk[tonumber(hw - 1)].device) then table.remove (disk, tonumber(hw)) hw = hw else hw = hw + 1 end--if tostring(vyber) == tostring(disk[tonumber(hw - 1)].device) then end--if tonumber(hw - 1) == 0 then end--if vyber ~= nil and string.match(vyber,'sd.') ~= nil then end--for line in io.lines("/proc/diskstats") do ---------------------------------------- --smyčka pro uložení informací z aplikace 'udisk' a vytvoření --podtabulky pro tlačítka zařízení for d = 1,#disk do --základní info aplikací 'udisk' local dev = disk[tonumber(d)].device os.execute("udisks --show-info /dev/"..dev.." > /tmp/conky_"..dev.."") --podtabulka pro tlačítka disky_tab.tl[tonumber(d)] = 0 end--for d = 1,#disk do ---------------------------------------- --načtení uložených informací o hardwaru for d = 1,#disk do local dev = disk[tonumber(d)].device for line in io.lines("/tmp/conky_"..dev) do z,k,vyber = string.find(line,"removable%p%s*(%d)")--removable: 0 if vyber ~= nil then disk[tonumber(d)].rm = vyber end z,k,vyber = string.find(line,"type%p%s*(%S*)")--type: udf if vyber ~= nil then disk[tonumber(d)].typ = vyber end z,k,vyber = string.find(line,"scheme%p%s+(%S*)")--scheme: gpt if vyber ~= nil then disk[tonumber(d)].scheme = vyber end z,k,vyber = string.find(line,"count%p%s+(%d+)")--count: 5 if vyber ~= nil then disk[tonumber(d)].count = vyber end z,k,vyber = string.find(line,"vendor%p%s+(%S*)")--vendor: ATA if vyber ~= nil then disk[tonumber(d)].vendor = vyber end z,k,vyber = string.find(line,"model%p%s+([%S%s]*)")--model: ST500S142 if vyber ~= nil then disk[tonumber(d)].model = vyber end z,k,vyber = string.find(line,"revision%p%s+(%S*)")--revision: if vyber ~= nil then disk[tonumber(d)].revision = vyber end z,k,vyber = string.find(line,"serial%p%s+(%S*)")--serial: if vyber ~= nil then disk[tonumber(d)].serial = vyber end z,k,vyber = string.find(line,"WWN%p%s+(%S*)")--WWN: if vyber ~= nil then disk[tonumber(d)].wwn = vyber end z,k,vyber = string.find(line,"interface%p%s+(%S*)")--interface: ata if vyber ~= nil then disk[tonumber(d)].interface = vyber end z,k,vyber = string.find(line,"if%sspeed%p%s+(%S*)")--if speed: (unknown) if vyber ~= nil then disk[tonumber(d)].speed = vyber end z,k,vyber = string.find(line,"ATA%sSMART%p%s+([%S%s]*)")--ATA SMART: Updated at if vyber ~= nil then disk[tonumber(d)].smart = vyber end --pokud jsou dostupné SMART informace if disk[tonumber(d)].smart ~= "not available" then --nastavení samostatného update (300 = 5 minut) disk[tonumber(d)].smart_upd = updates + 300 z,k,vyber = string.find(line,"overall%sassessment%p%s+([%S%s]*)") if vyber ~= nil then disk[tonumber(d)].smart_stav = vyber end --airflow-temperature-celsius z,k,vyber = string.find(line,"airflow[%S]*%s+%d+|%s?%d+|%s?%d+%s+%S+%s+(%d+)") if vyber ~= nil then disk[tonumber(d)].smart_teplota = vyber end end--if disk[tonumber(d)].smart ~= "not available" then end--for line in io.lines("/tmp/conky_"..dev) do end--for d = 1,#disk do ---------------------------------------- --tabulka pro celkový počet oddílů a připojených oddílů oddil_info = {["o"] = 0,["m"] = 0,} ---------------------------------------- --načtení informací o oddílech for d = 1,#disk do --podtabulka pro jednotlivé oddíly disk[tonumber(d)].oddil = {} local dev = disk[tonumber(d)].device local o = 0 --fyzický oddíl disk[tonumber(d)].oddil_pocet = 0 local data = io.popen("lsblk -o KNAME,RM,TYPE,SIZE,RO,MOUNTPOINT /dev/"..dev) while true do local line = data:read("*l") if line == nil then break end z,k,vyber = string.find(line, "(%S*)[%S%s]*") if vyber ~= nil and vyber ~= tostring(dev) and vyber ~= "KNAME" then --pro celkový počet oddílů - kontrola oddil_info.o = tonumber(oddil_info.o) + 1 o = o + 1 disk[tonumber(d)].oddil[tonumber(o)] = {} disk[tonumber(d)].oddil[tonumber(o)].name = vyber z,k,vyber = string.find(line, "%S+%s+(%d)") -- 0 disk[tonumber(d)].oddil[tonumber(o)].rm = vyber z,k,vyber = string.find(line, "%S+%s+%d%s(%S+)") -- crypt/lvm disk[tonumber(d)].oddil[tonumber(o)].typ = vyber z,k,vyber = string.find(line, "%S+%s+%d%s%S+%s+(%S+)") -- xxG disk[tonumber(d)].oddil[tonumber(o)].size = vyber z,k,vyber = string.find(line, "%S+%s+%d%s%S+%s+%S+%s+%d%s([%S%s]*)") -- adresář if vyber ~= "" then disk[tonumber(d)].oddil[tonumber(o)].mount = vyber mount[tonumber(d)] = tonumber(mount[tonumber(d)]) + 1 --pro celkový počet připojených oddílů oddil_info.m = tonumber(oddil_info.m) + 1 end disk[tonumber(d)].oddil_pocet = tonumber(disk[tonumber(d)].oddil_pocet) + 1 end--if vyber ~= nil and vyber ~= tostring(dev) and vyber ~= "KNAME" then end--while true do data:close() end--for d = 1,#disk do disky_tab.reload = 0 end--if disky_tab.reload == 1 then ---------------------------------------- --samostatná podmínka pro oddíly ---------------------------------------- if disky_tab.reload == 2 then--průchod při změně připojených oddílů --nastavení intervalu update[tostring(name)] = updates + tonumber(interval[tostring(name)]) ---------------------------------------- --tabulka pro celkový počet oddílů a připojených oddílů oddil_info = {["o"] = 0,["m"] = 0,} ---------------------------------------- --načtení informací o oddílech for d = 1,#disk do --podtabulka pro jednotlivé oddíly disk[tonumber(d)].oddil = {} local dev = disk[tonumber(d)].device local o = 0 --fyzický oddíl disk[tonumber(d)].oddil_pocet = 0 local data = io.popen("lsblk -o KNAME,RM,TYPE,SIZE,RO,MOUNTPOINT /dev/"..dev) while true do local line = data:read("*l") if line == nil then break end z,k,vyber = string.find(line, "(%S*)[%S%s]*") if vyber ~= nil and vyber ~= tostring(dev) and vyber ~= "KNAME" then --pro celkový počet oddílů - kontrola oddil_info.o = tonumber(oddil_info.o) + 1 o = o + 1 disk[tonumber(d)].oddil[tonumber(o)] = {} disk[tonumber(d)].oddil[tonumber(o)].name = vyber z,k,vyber = string.find(line, "%S+%s+(%d)") -- 0 disk[tonumber(d)].oddil[tonumber(o)].rm = vyber z,k,vyber = string.find(line, "%S+%s+%d%s(%S+)") -- crypt/lvm disk[tonumber(d)].oddil[tonumber(o)].typ = vyber z,k,vyber = string.find(line, "%S+%s+%d%s%S+%s+(%S+)") -- xxG disk[tonumber(d)].oddil[tonumber(o)].size = vyber z,k,vyber = string.find(line, "%S+%s+%d%s%S+%s+%S+%s+%d%s([%S%s]*)") -- adresář if vyber ~= "" then disk[tonumber(d)].oddil[tonumber(o)].mount = vyber mount[tonumber(d)] = tonumber(mount[tonumber(d)]) + 1 --pro celkový počet připojených oddílů oddil_info.m = tonumber(oddil_info.m) + 1 end disk[tonumber(d)].oddil_pocet = tonumber(disk[tonumber(d)].oddil_pocet) + 1 end--if vyber ~= nil and vyber ~= tostring(dev) and vyber ~= "KNAME" then end--while true do data:close() end--for d = 1,#disk do disky_tab.reload = 0 end--if disky_tab.reload == 2 then ---------------------------------------- --vypis dat modulu ---------------------------------------- local x = 0 local y = modul.pozice[tonumber(disky_tab.pozice_y)] --nastavení fontu cairo_select_font_face (cr, "Mono", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); ---------------------------------------- --vykreslení pozadí pro menu if pozadi_menu == 1 then pozadi(y-12,15) end ---------------------------------------- --konstrukce pro klikutí na menu local menu = "DISKY" local delka = tonumber(string.len(menu)*7) --linie - první část cairo_select_font_face (cr, "Mono", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size (cr, 12.0); cairo_set_source_rgba (cr, 1,0.7,0,1); local linie1 = (rozmer_panelu_x - delka)/2 - 5 cairo_rectangle (cr, x,y-5,linie1,1);cairo_fill (cr); --pozice kurzoru/kliknuti if mx>=x+linie1+5 and mx<=x+linie1+5+delka+3 and my<=y and my>=y-12 then cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); if mx == kx and my == ky and klik_menu[tostring(name)] == 0 then klik_menu[tostring(name)] = 1 elseif mx == kx and my == ky and klik_menu[tostring(name)] == 1 then klik_menu[tostring(name)] = 0 end--kliknuti else cairo_set_source_rgba (cr, 1,0.7,0,1); end--pozice kurzoru cairo_move_to (cr, x+linie1+5, y);cairo_show_text (cr, menu);--text menu --linie - druha cast cairo_set_source_rgba (cr, 1,0.7,0,1); local linie2 = rozmer_panelu_x - (linie1+5+delka+7) cairo_rectangle (cr, x+linie1+5+delka+7,y-5,linie2,1);cairo_fill (cr); ---------------------------------------- --otevřený panel y = y + 3 if klik_menu[tostring(name)] == 1 then cairo_select_font_face (cr, "Mono", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); for d = 1,#disk do if pozadi_panel == 1 then pozadi(y+2,15) end --sda/sdb atd. y = y + 15 cairo_set_font_size (cr, 10.0); cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+5,y-1);cairo_show_text (cr, disk[tonumber(d)].device); --model zařízení - kliknutelný text local text = tostring(disk[tonumber(d)].vendor.." "..disk[tonumber(d)].model) local delka = tonumber(string.len(text)*6.75) cairo_set_font_size (cr, 11.0); cairo_set_source_rgba (cr, 1,0.7,0,1); --kurzor (změna barvy textu / kliknutí = informace) if mx>=x+30 and mx<=x+30+delka and my<=y and my>=y-10 then cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); if mx == kx and my == ky and disky_tab.tl[tonumber(d)] == 0 then disky_tab.tl[tonumber(d)] = 1 elseif mx == kx and my == ky and disky_tab.tl[tonumber(d)] == 1 then disky_tab.tl[tonumber(d)] = 0 end--kliknuti else cairo_set_source_rgba (cr, 1,0.7,0,1); end--pozice kurzoru cairo_move_to (cr, x+30,y-1);cairo_show_text (cr, text); --zápis / čtení / teplota cairo_set_font_size (cr, 9.0); cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+210,y-1);cairo_show_text (cr, "R: "); cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); local text = conky_parse("${diskio_read /dev/"..disk[tonumber(d)].device.."}") cairo_show_text (cr, string.match(text,"([%d%p]*%w)")); cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+260,y-1);cairo_show_text (cr, "W: "); cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); local text = conky_parse("${diskio_write /dev/"..disk[tonumber(d)].device.."}") cairo_show_text (cr, string.match(text,"([%d%p]*%w)")); if disk[tonumber(d)].smart ~= "not available" then cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); cairo_move_to (cr, x+320,y-1); cairo_show_text (cr, disk[tonumber(d)].smart_teplota); cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_show_text (cr,"°C"); end--if disk[tonumber(d)].smart ~= "not available" then ---------------------------------------- --ostatní informace o zařízení if disky_tab.tl[tonumber(d)] == 1 then --pozadí pro dodatečné informace if pozadi_panel == 1 then local poz = y + 2 local vyska = 60 --základ pro 4 řádky informací local info = tonumber(disk[tonumber(d)].oddil_pocet) vyska = vyska + (tonumber(info) * 12) + 4 + 4 pozadi(poz,vyska)--volání funkce pro vykreslení pozadí end--if pozadi_panel == 1 then cairo_set_font_size (cr, 10.0); --smart y = y + 15 cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+30,y);cairo_show_text (cr, "SMART:"); cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); cairo_move_to (cr, x+70,y); if disk[tonumber(d)].smart ~= "not available" then cairo_show_text (cr, disk[tonumber(d)].smart_stav); else cairo_show_text (cr, "n/a"); end--if disk[tonumber(d)].smart ~= "not available" then --informace o zařízení y = y + 15 cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+30,y);cairo_show_text (cr, "SN: "); cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); cairo_show_text (cr, disk[tonumber(d)].serial); cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+180,y);cairo_show_text (cr, "REV: "); cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); cairo_move_to (cr, x+220,y);cairo_show_text (cr, disk[tonumber(d)].revision); y = y + 15 cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+30,y);cairo_show_text (cr, "Rozhraní: "); cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); cairo_show_text (cr, disk[tonumber(d)].interface); if disk[tonumber(d)].interface == "usb" then if tonumber(string.match(disk[tonumber(d)].speed, "(%d%d)")) > 48 then cairo_show_text (cr, "3"); else cairo_show_text (cr, "2"); end-- end--if disk[tonumber(d)].interface == "usb" then cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+180,y);cairo_show_text (cr, "Výměnný: "); cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); if tonumber(disk[tonumber(d)].rm) == 1 then cairo_show_text (cr, "ano"); else cairo_show_text (cr, "ne"); end--if tonumber(disk[tonumber(d)].rm) == 1 then y = y + 15 cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+30,y);cairo_show_text (cr, "Tabulka oddílů: "); cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); if disk[tonumber(d)].scheme == "" then cairo_show_text (cr, disk[tonumber(d)].typ); else cairo_show_text (cr, disk[tonumber(d)].scheme); end--if disk[tonumber(d)].scheme ~= nil then cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+180,y);cairo_show_text (cr, "Počet oddílů: "); cairo_set_source_rgba (cr, 0.9,0.9,0.9,1); cairo_show_text (cr, disk[tonumber(d)].count); --oddělující čára cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_rectangle (cr, x+30,y+4,rozmer_panelu_x-40,0.5);cairo_fill (cr); y = y + 4 --všechny oddíly a vrstvy na disku if tonumber(disk[tonumber(d)].oddil_pocet) > 0 then for o = 1,tonumber(disk[tonumber(d)].oddil_pocet) do y = y + 12 cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+30,y); cairo_show_text (cr, disk[tonumber(d)].oddil[tonumber(o)].name); cairo_move_to (cr, x+70,y); cairo_show_text (cr, disk[tonumber(d)].oddil[tonumber(o)].typ); cairo_move_to (cr, x+110,y); cairo_show_text (cr, disk[tonumber(d)].oddil[tonumber(o)].size); cairo_move_to (cr, x+150,y); local text = disk[tonumber(d)].oddil[tonumber(o)].mount if text ~= nil then local delka = string.len(text) if delka > 29 then text = string.match(text, "(%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S)") cairo_show_text (cr, text.."..."); else cairo_show_text (cr, text); end end--if text ~= nil then end--for o = 1,tonumber(disk[tonumber(d)].oddil_pocet) do end--if disk[tonumber(d)].oddil_pocet ~= nil then --oddělující čára cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_rectangle (cr, x+30,y+4,rozmer_panelu_x-40,0.5);cairo_fill (cr); y = y + 4 end--if disky_tab.tl[tonumber(d)] == 1 then ---------------------------------------- --pozadí pro bar a info o připojeném oddílu --pro '/' a '/home' if tonumber(mount[tonumber(d)]) > 0 then for o = 1,tonumber(disk[tonumber(d)].oddil_pocet) do local mnt = disk[tonumber(d)].oddil[tonumber(o)].mount if mnt == "/" or mnt == "/home" then --pozadí if pozadi_panel == 1 then pozadi(y+2,30) end --název oddílu cairo_set_font_size (cr, 9.0); cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+30,y+12); cairo_show_text (cr, disk[tonumber(d)].oddil[tonumber(o)].name); --zobrazení pokud se jedná o crypt/lvm vrstu local text = disk[tonumber(d)].oddil[tonumber(o)].name if string.match(text, "(%S%S)") == "dm" then cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+60,y+12); cairo_show_text (cr, disk[tonumber(d)].oddil[tonumber(o)].typ); end--if string.match(text, "(%S%S)") == "dm" then --přípojný bod oddílu cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+90,y+12); cairo_show_text (cr, disk[tonumber(d)].oddil[tonumber(o)].mount); --nastavení baru y = y + 15 conky_indikace = conky_parse("${fs_used_perc "..mnt.."}") odsazeni = 30 --odsazení baru od okraje oproti textu (0 = žádné odsazení) pbar = {0.5,0.4,0.3,0.8} --barva pozadí baru ibar = {0.6,0.1,0.1,0.5} --barva indikátoru v baru sbar = rozmer_panelu_x - odsazeni - 10 vbar = 14 --výška baru --volání funkce pro vykresleni baru bar(conky_indikace,odsazeni,x,y,pbar,ibar,sbar,vbar) --text v baru cairo_set_font_size (cr, 10.0); cairo_set_source_rgba (cr, 1,1,1,1); cairo_move_to (cr, x+35,y+11); local text = string.match(conky_parse("${fs_size "..mnt.."}"),"([%d%p]*%w)") cairo_show_text (cr, text); cairo_move_to (cr, x+90,y+11); cairo_show_text (cr, conky_parse("${fs_type "..mnt.."}")); cairo_move_to (cr, x+150,y+11); local text = string.match(conky_parse("${fs_used "..mnt.."}"),"([%d%p]*%w)") cairo_show_text (cr, "U: "..text); cairo_move_to (cr, x+235,y+11); local text = string.match(conky_parse("${fs_free "..mnt.."}"),"([%d%p]*%w)") cairo_show_text (cr, "F: "..text); cairo_move_to (cr, x+318,y+11); cairo_show_text (cr, conky_parse("${fs_free_perc "..mnt.."}").."%"); --pozice pro další bar y = y + 15 end--if mnt == "/" or mnt == "/home" then end--for o = 1,tonumber(disk[tonumber(d)].oddil_pocet) do end--if tonumber(mount[tonumber(d)]) > 0 then --pozadí pro bar a info o připojeném oddílu --pro další systémové oddíly if tonumber(mount[tonumber(d)]) > 0 then for o = 1,tonumber(disk[tonumber(d)].oddil_pocet) do local mnt = disk[tonumber(d)].oddil[tonumber(o)].mount if mnt == "/boot" or mnt == "/boot/efi" or mnt == "/var" or mnt == "/usr" then --pozadí if pozadi_panel == 1 then pozadi(y+2,30) end --název oddílu cairo_set_font_size (cr, 9.0); cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+30,y+12); cairo_show_text (cr, disk[tonumber(d)].oddil[tonumber(o)].name); --zobrazení pokud se jedná o crypt/lvm vrstu local text = disk[tonumber(d)].oddil[tonumber(o)].name if string.match(text, "(%S%S)") == "dm" then cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+60,y+12); cairo_show_text (cr, disk[tonumber(d)].oddil[tonumber(o)].typ); end--if string.match(text, "(%S%S)") == "dm" then --přípojný bod oddílu cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+90,y+12); cairo_show_text (cr, disk[tonumber(d)].oddil[tonumber(o)].mount); --nastavení baru y = y + 15 conky_indikace = conky_parse("${fs_used_perc "..mnt.."}") odsazeni = 30 --odsazení baru od okraje oproti textu (0 = žádné odsazení) pbar = {0.5,0.4,0.3,0.8} --barva pozadí baru ibar = {0.6,0.1,0.1,0.5} --barva indikátoru v baru sbar = rozmer_panelu_x - odsazeni - 10 vbar = 14 --výška baru --volání funkce pro vykresleni baru bar(conky_indikace,odsazeni,x,y,pbar,ibar,sbar,vbar) --text v baru cairo_set_font_size (cr, 10.0); cairo_set_source_rgba (cr, 1,1,1,1); cairo_move_to (cr, x+35,y+11); local text = string.match(conky_parse("${fs_size "..mnt.."}"),"([%d%p]*%w)") cairo_show_text (cr, text); cairo_move_to (cr, x+90,y+11); cairo_show_text (cr, conky_parse("${fs_type "..mnt.."}")); cairo_move_to (cr, x+150,y+11); local text = string.match(conky_parse("${fs_used "..mnt.."}"),"([%d%p]*%w)") cairo_show_text (cr, "U: "..text); cairo_move_to (cr, x+235,y+11); local text = string.match(conky_parse("${fs_free "..mnt.."}"),"([%d%p]*%w)") cairo_show_text (cr, "F: "..text); cairo_move_to (cr, x+318,y+11); cairo_show_text (cr, conky_parse("${fs_free_perc "..mnt.."}").."%"); --pozice pro další bar y = y + 15 end--if mnt == "/boot" or mnt == "/boot/efi" or mnt == "/var" or mnt == "/usr" then end--for o = 1,tonumber(disk[tonumber(d)].oddil_pocet) do end--if tonumber(mount[tonumber(d)]) > 0 then --pozadí pro bar a info o připojeném oddílu --pro ostatní oddíly if tonumber(mount[tonumber(d)]) > 0 then for o = 1,tonumber(disk[tonumber(d)].oddil_pocet) do local mnt = disk[tonumber(d)].oddil[tonumber(o)].mount if mnt ~= nil and string.match(mnt, "(%S%S%S%S%S%S%S)") == "/media/" then --pozadí if pozadi_panel == 1 then pozadi(y+2,30) end --název oddílu cairo_set_font_size (cr, 9.0); cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+30,y+12); cairo_show_text (cr, disk[tonumber(d)].oddil[tonumber(o)].name); --zobrazení pokud se jedná o crypt/lvm vrstu local text = disk[tonumber(d)].oddil[tonumber(o)].name if string.match(text, "(%S%S)") == "dm" then cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+60,y+12); cairo_show_text (cr, disk[tonumber(d)].oddil[tonumber(o)].typ); end--if string.match(text, "(%S%S)") == "dm" then --přípojný bod oddílu cairo_set_source_rgba (cr, 0.7,0.7,0.7,1); cairo_move_to (cr, x+90,y+12); cairo_show_text (cr, disk[tonumber(d)].oddil[tonumber(o)].mount); --nastavení baru y = y + 15 conky_indikace = conky_parse("${fs_used_perc "..mnt.."}") odsazeni = 30 --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.1,0.6,0.5} --barva indikátoru v baru sbar = rozmer_panelu_x - odsazeni - 10 vbar = 14 --výška baru --volání funkce pro vykresleni baru bar(conky_indikace,odsazeni,x,y,pbar,ibar,sbar,vbar) --text v baru cairo_set_font_size (cr, 10.0); cairo_set_source_rgba (cr, 1,1,1,1); cairo_move_to (cr, x+35,y+11); local text = string.match(conky_parse("${fs_size "..mnt.."}"),"([%d%p]*%w)") cairo_show_text (cr, text); cairo_move_to (cr, x+90,y+11); cairo_show_text (cr, conky_parse("${fs_type "..mnt.."}")); cairo_move_to (cr, x+150,y+11); local text = string.match(conky_parse("${fs_used "..mnt.."}"),"([%d%p]*%w)") cairo_show_text (cr, "U: "..text); cairo_move_to (cr, x+235,y+11); local text = string.match(conky_parse("${fs_free "..mnt.."}"),"([%d%p]*%w)") cairo_show_text (cr, "F: "..text); cairo_move_to (cr, x+318,y+11); cairo_show_text (cr, conky_parse("${fs_free_perc "..mnt.."}").."%"); --pozice pro další bar y = y + 15 end--if mnt ~= nil and string.match(mnt, "(%S%S%S%S%S%S%S)") == "/media/" then end--for o = 1,tonumber(disk[tonumber(d)].oddil_pocet) do end--if tonumber(mount[tonumber(d)]) > 0 then end--for d = 1,#disk do ---------------------------------------- --úprava pozadí pod názvem zařízení (kosmetická úprava) if pozadi_panel == 1 then pozadi(y+2,1) end end--if klik_menu[tostring(name)] == 1 then ---------------------------------------- --pozice pro další modul if klik_menu[tostring(name)] == 1 then next_y = y + 17 else next_y = y + 14 end--if klik_menu[tostring(name)] == 1 then modul.pozice[tonumber(disky_tab.pozice_y)+1] = next_y return modul end--function modul_disky() --############################################################