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_points
和temperature
。
行程点看起来就像这样,而且没什么大不了的:
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 安装说明)并且使用起来很简单: