我的桌面屏幕上有这个 Conky 报告:
这是该文件的相关部分conky.conf
:
${color1}${font ConkySymbols:size=16}J${font} ${voffset -10}Memory» $hr${color}
${color1}${goto 35}RAM : ${color}$mem/$memmax ${alignr}$memperc% ${membar 4,100}
${color1}${goto 35}SWAP: ${color}$swap/$swapmax $alignr}$swapperc% ${swapbar 4,100}
但是当我运行时free -m
我得到了这个:
比 Conky 的报告 (6GB 对 8.3GB) 少了 2GB。
我也尝试在终端中运行该mem
命令,但该命令无法识别。
如何在终端中运行 Conky 用来查找已用/可用 RAM 统计信息的命令,以及为什么该命令存在差异free -m
?
编辑:
${color1}${goto 35}RAM: ${execi 10 free --si -m|awk '/^Mem/{printf "%.2f",$3/1024}'}/$memmax ${execi 10 free --si -m|awk '/^Mem/{printf "%.1f%%", 100*$3/$2}'} \
${execibar 10 free --si -m|awk '/^Mem/{print 100*$3/$2}'}
答案1
来自来源看来这是根据从字段中读取这些内容的位置info.mem
来计算的:info.memmax - memavail
/proc/meminfo
if (strncmp(buf, "MemTotal:", 9) == 0) {
sscanf(buf, "%*s %llu", &info.memmax);
...
} else if (strncmp(buf, "MemAvailable:", 13)
sscanf(buf, "%*s %llu", &memavail);
要从 conky调用free
,你可以使用,例如,
RAM: ${execi 10 free --si -m|awk '/^Mem/{printf "%.2fGiB\n",$3/1024}'}/$memmax \
${execi 10 free --si -m|awk '/^Mem/{printf "%.1f%%\n", 100*$3/$2}'} \
${execibar 10 free --si -m|awk '/^Mem/{print 100*$3/$2}'}
但是生成的条的大小由execibar
您必须在部分中设置的全局变量固定conky.config
:
default_bar_height = 4,
default_bar_width = 100,
is的输出free
被传递给它awk
,它查找行首并取出行中的Mem
第三个 ( ) 字并重新格式化它(参见)。您可以通过更改数字 2 来设置格式中的小数位数。$3
man sprintf
%.2f