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