-1

sensors所以我开始使用命令来获取 CPU 核心温度。

在conky里面,我写了

$Core 0 Temp:$alignr${execi 1 sensors | grep 'Core 0' | awk {'print $3'}} $alignr${execibar 1 sensors | grep 'Core 0' | awk {'print $3'}}

每一秒我都sensors | grep 'Core 0' | awk {'print $3'}在两个地方运行完全相同的命令以获得完全相同的输出。有没有办法将输出保存在变量中并使用该变量代替命令。

4

1 回答 1

0

conky没有用户变量。你可以做的是从 conky 调用 lua 来为你做这件事。lua语言通常默认内置在conky中,所以你只需要将一些代码放在一个文件中,将文件包含在conky设置文件中,然后调用该函数即可。例如,这些 shell 命令将创建一个测试:

cat >/tmp/.conkyrc <<\!
conky.config = {
    lua_load = '/tmp/myfunction.lua',
    minimum_height = 400,
    minimum_width = 600,
    use_xft = true,
    font = 'Times:size=20',
};
conky.text = [[
 set ${lua myfunction t ${execi 1 sensors | awk '/^Core 0/{print 0+$3}'}}°C
 get ${lua myfunction t}°C ${lua_bar myfunction t}
]]
!
cat >/tmp/myfunction.lua <<\!
vars = {}
function conky_myfunction(varname, arg)
 if(arg~=nil)then vars[varname] = conky_parse(arg) end
 return vars[varname]
end
!
conky -c /tmp/.conkyrc -o 

myfunction.lua文件中,我们声明了一个函数myfunction()(需要添加前缀conky_,以便我们可以从 conky 调用它)。它需要 2 个参数、一个变量的名称和一个 conky 表达式。它调用conky_parse()以评估表达式,并将值保存在 table 中vars,以调用者提供的名称命名。然后它将结果值返回给调用者。如果没有给出表达式,它将返回先前的值。

在luaconky.text开头的行中,使用变量的任意名称set调用lua ,以及用于计算、保存和返回的传感器表达式。开始的行调用只是获取值。myfunctiontexecigetmyfunction

lua_bar与 类似exec_bar,但调用了一个 lua 函数,请参见man conky. 但是,它需要一个没有接受的前导的数字+exec_bar所以我将 更改awk为返回它,并将其添加°C到 conky 文本中。

于 2021-02-27T10:56:50.513 回答