Como posso criar uma barra de conky customizada para o diskio no Linux?

1

Estou usando o conky 1.10.3 (conky-all) no Ubuntu 16.10 (x86-64), kernel 4.8.0-59-generic, Canela 3.0.7.

Como posso criar uma barra para o diskio (na verdade, um para diskio_read e outro para diskio_write)

Conky tem diskio (que dá um número) e diskiograph - sem barras.

Eu tentei, mas não consegui encontrar um jeito, para usar algo como ${execbar $diskio} .

Também mexi um pouco com um roteiro lua, a saber, BARGRAPH WIDGET v2.1 by wlourf, link mas, embora usando

{
    name="cpu",
    --arg="%S",
    max=100,
    angle=90,
    alarm=50,
    bg_colour={0x00ff00,0.25},
    fg_colour={0x00ff00,1},
    alarm_colour={0xff0000,1},
    x=0,y=610,
    blocks=1,
    height=250,width=25,
    smooth=true,
    mid_colour={{0.5,0xffff00,1}}

}

funciona, se eu colocar "diskio" em vez de "cpu" eu recebo uma barra vazia (enquanto o diskograph do conky mostra claramente o disco IO).

    
por GregStef 04.12.2017 / 20:12

1 resposta

1

O principal problema ao usar name="diskio_read" e diskio_write com o dado widget do gráfico de barras lua é que essas duas funções retornam números como 2.33KiB em vez de inteiros simples como 12345 . O widget usa apenas a função lua tonumber() para converter os valores retornados, e isso falha nessas sequências.

O outro problema é que, é claro, você precisa definir max= para algum valor adequado (por exemplo, 100000000), já que o disco io não é dimensionado para 100%, como o cpu.

Você pode contornar o primeiro problema, se você não estiver usando nenhum outro recurso conky, redefinindo a variável global que solicita que os valores sejam humanos legíveis :

conky.config = {
  format_human_readable = false,
  ...

Como alternativa, você pode editar o arquivo de widget, bargraph.lua , na função setup_bar_graph() , alterar a linha:

value = tonumber(conky_parse(string.format('${%s %s}', t.name, t.arg)))

para algo como

local result = conky_parse(string.format('${%s %s}', t.name, t.arg))
value = tonumber(result)
if value==nil then value = my_tonumber(result) end

e adicione sua própria função tonumber antes da função conky_main_bars() .

-- https://unix.stackexchange.com/a/409006/119298
function my_tonumber(n)
  local capture = {string.match(n,"^(%d+\.?%d*)([KMGTPB])")}
  if #capture<=0 then return 0 end
  local v = tonumber(capture[1])
  if #capture==1 then return v end
  if capture[2]=="K" then return v*1024 end
  if capture[2]=="M" then return v*1024*1024 end
  if capture[2]=="G" then return v*1024*1024*1024 end
  if capture[2]=="T" then return v*1024*1024*1024*1024 end
  return v
end
    
por 05.12.2017 / 19:33

Tags