如何在 Linux 中为 diskio 创建自定义 conky 栏?

如何在 Linux 中为 diskio 创建自定义 conky 栏?

我在 Ubuntu 16.10 (x86-64)、内核 4.8.0-59-generic、Cinnamon 3.0.7 中使用 conky 1.10.3 (conky-all)。

如何为 diskio 创建一个栏(实际上,一个用于 diskio_read,另一个用于 diskio_write)?
Conky 有 diskio (给出一个数字)和 disiograph - 没有酒吧。

我尝试过,但找不到一种方法来使用类似的东西${execbar $diskio}

我还搞乱了一个 lua 脚本,即 wlourf 的 BARGRAPH WIDGET v2.1,http://u-scripts.blogspot.com/2010/07/bargraph-widget.html但是,虽然使用

{
    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}}

}

有效,如果我输入“diskio”而不是“cpu”,我会得到一个空栏(而 conky 的磁盘记录仪清楚地显示磁盘 IO)。

答案1

name="diskio_read"使用diskio_write给定的 lua 条形图小部件时的主要问题是这两个函数返回数字,2.33KiB而不是简单的整数,如12345.该小部件仅使用 lua 函数tonumber()来转换返回值,这在这些字符串上失败。

另一个问题是,您当然需要设置max=一些合适的值(例如 100000000),因为磁盘 io 不会像 cpu 那样缩放到 100%。

如果您不使用任何其他 conky 功能,则可以通过重置请求值的全局变量来解决第一个问题人类可读:

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

或者,您可以编辑小部件文件,bargraph.lua在函数中setup_bar_graph()更改行:

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

类似的东西

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

并在 function 之前添加您自己的 tonumber 函数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

答案2

我如何添加自己的变量来创建 Bar ?

像这样

${execi 5 nvidia-smi | grep -Eo '...%.+?W' | awk '{print $1}' | cut -c1-2}

它显示了 GPU-FanSpeed 的 NumericValue(不带 %)

相关内容