lxpanel 中温度监测器的传感器位置正确吗?

lxpanel 中温度监测器的传感器位置正确吗?

lxpanel 中的温度监视器(我使用的是 Lubuntu 12.10)正在自动检测我的一个传感器,但我想给它提供一个备用传感器。

以下是传感器的输出:

Adapter: Virtual device
temp1:        +26.8°C  (crit = +100.0°C)
temp2:         +0.0°C  (crit = +100.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Core 0:       +58.0°C  (high = +80.0°C, crit = +90.0°C)
Core 2:       +55.0°C  (high = +80.0°C, crit = +90.0°C)

看起来温度监视器正在自动拾取温度 1,但我想将其设置为核心 0 或核心 2。它有一个“传感器”字符串,但我不确定那是什么。

我尝试过“Core 0”、“coretemp-isa-0000”和“/sys/devices/platform/coretemp.0/temp2_input”,但似乎都没有用。

有什么想法吗?

答案1

简单的解决方案

1)运行此命令列出可用的 thermal_zone 设备的类型:
ls -1 /sys/class/thermal/thermal_zone*/type | xargs -I % sh -c "echo % ; cat %"
您应该获得类似如下的输出:

/sys/class/thermal/thermal_zone0/type
acpitz
/sys/class/thermal/thermal_zone1/type
acpitz
/sys/class/thermal/thermal_zone2/type
x86_pkg_temp

2) 找出您需要的那个,对于 CPU,它的类型应该类似于x86_pkg_temp。在我的例子中,如果我想使用,x86_pkg_temp我会选择/sys/class/thermal/thermal_zone2/

3)在“温度监测器”设置中指定它,确保它以斜线终止(末尾用“/”括起来,就像我的例子一样):
示例屏幕截图

完成后,它现在应该可以按预期工作了。


更多细节和替代解决方案

今天开始使用 LUbuntu 桌面,发现自己也遇到了同样的问题。
在四处寻找并破解了的开源代码后,我找到了一些解决方案。首先,选项中的参数“传感器”将其位置称为目录。查看源时,它可以在自动模式下检测 3 种类型的传感器目录,并/plugins/thermal/thermal.c在 和 中查找它们,/proc/acpi/thermal_zone/查找这些的函数如下: /sys/class/thermal//sys/class/hwmon/hwmon[i]/

static void
check_sensors( thermal *th )
{
    // FIXME: scan in opposite order
    find_sensors(th, PROC_THERMAL_DIRECTORY, NULL, proc_get_temperature, proc_get_critical);
    find_sensors(th, SYSFS_THERMAL_DIRECTORY, SYSFS_THERMAL_SUBDIR_PREFIX, sysfs_get_temperature, sysfs_get_critical);
    if (th->numsensors == 0)
        find_hwmon_sensors(th);
    g_info("thermal: Found %d sensors", th->numsensors);
}  

现在,看看设置配置时发生的情况,我们看到:

if(th->sensor == NULL) th->auto_sensor = TRUE;
    if(th->auto_sensor) check_sensors(th);
    else if (strncmp(th->sensor, "/sys/", 5) != 0)
        add_sensor(th, th->sensor, th->sensor, proc_get_temperature, proc_get_critical);
    else if (strncmp(th->sensor, "/sys/class/hwmon/", 17) != 0)
        add_sensor(th, th->sensor, th->sensor, sysfs_get_temperature, sysfs_get_critical);
    else
        add_sensor(th, th->sensor, th->sensor, hwmon_get_temperature, hwmon_get_critical);

据我了解,th->sensor设置为您在选项中的“传感器”输入字段中指定的值。
首先检查是否auto_sensor设置,如果未设置,它将进行一系列其他检查。
分解这部分,如果您的传感器路径不包含/sys/在其中,它将使用proc_get函数,这是过时的 acpi 类型传感器,在新版本的 Ubuntu 中未使用。否则,如果您的路径包含/sys/class/hwmon它将使用hwmon函数,最后如果它是其他类型的/sys/*,它将使用sysfs类型的传感器。
基于此,我们可以得出结论,最简单的方法是指定位于的传感器/sys/class/thermal/,例如/sys/class/thermal/thermal_zone1。如果我们使用/sys/class/hwmon/,它无论如何都不会选择正确的传感器,因为无法指定temp[i]_input要使用的确切传感器,如果我们使用非/sys/目录,它会假设我们使用过时的acpi/thermal_zone,这也不理想。您可以创建脚本,该脚本将在您的主文件夹中创建包含 2 个文件的假传感器目录,trip_pointstemperature行程点看起来就像这样,而且没什么大不了的:

critical (S5): 110 C
passive: 105 C: tc1=2 tc2=10 tsp=100 devices=0xdf72e380
active[0]: 48 C: devices=0xc157fec0  

温度将会读取当前温度并且看起来应该像这样:

temperature: 49 C  

最后,您需要编写脚本来从您想要使用的实际传感器更新这些文件,并安排它每 N 秒运行一次。此解决方案将允许使用/sys/class/hwmon/hwmon1传感器并手动读取 LXpanel 热指示器要使用的值。您也可以使用此方法让此热指示器显示其他类型的指示器,但这似乎是在浪费精力,因为您可以改用其他指示器。如果需要,我将使用示例脚本进行更新,以便稍后执行此操作\我会为自己制作一个。

答案2

我有类似的问题(我的默认传感器总是显示 40.0°C),我无法在原始 lxpanel 的温度监视器中更改此传感器。但还有另一种解决方案:lm-sensors LXDE lxpanel 插件。

https://github.com/danamlund/sensors-lxpanel-plugin

它编译起来很简单(在 lubuntu 16.04 中我也使用了 debian 安装说明)并且使用起来很简单:

传感器-lxpanel-插件

相关内容