Правильное расположение датчика для использования для контроля температуры в 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)

Похоже, что температурный монитор автоматически выбирает temp1, но я бы хотел установить его на Core 0 или Core 2. У него есть строка для "Sensor", но я не уверен, что это будет.

Я пробовал "Core 0", "coretemp-isa-0000" и "/sys/devices/platform/coretemp.0/temp2_input", но ни один из них не работает.

Какие-нибудь мысли?

2 ответа

Решение

Простое решение

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) Узнайте, какой вам нужен, для процессора он должен иметь тип, аналогичный x86_pkg_temp, В моем примере, если я хочу использовать x86_pkg_temp Я выберу /sys/class/thermal/thermal_zone2/,

3) Укажите его в настройках "Температурного монитора", убедитесь, что он заканчивается косой чертой (заключенный в "/" в конце, как в моем примере):

Готово, оно должно работать как задумано сейчас.


Подробнее и альтернативное решение

Начал использовать рабочий стол LUbuntu сегодня и обнаружил, что смотрю на ту же проблему.
После осмотра и взлома открытого исходного кода /plugins/thermal/thermal.c Я нашел несколько решений. Прежде всего, параметр "Датчик" в настройках относится к расположению его как каталога. Просматривая источники, он может обнаружить 3 типа сенсорных каталогов в автоматическом режиме и ищет их в /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);
}  

Теперь посмотрим, что происходит, когда вы устанавливаете config, мы видим это:

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, trip_points будут выглядеть так и не будут иметь большого значения:

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. Вы также можете использовать этот метод, чтобы этот тепловой индикатор отображал другие виды индикаторов, но это кажется пустой тратой усилий, учитывая, что вместо этого вы можете просто использовать другой индикатор. Я обновлю пример сценария, чтобы сделать это позже, если потребуется, я сделаю его для себя.

У меня похожая проблема (мой датчик по умолчанию всегда показывает 40.0°C), и я не могу изменить этот датчик в оригинальном мониторе температуры lxpanel. Но есть и другое решение: lm-sensor LXDE, плагин lxpanel.

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

Его легко скомпилировать (в lubuntu 16.04 я также использовал инструкции по установке Debian) и просто использовать:

Другие вопросы по тегам