web-dev-qa-db-ja.com

lxpanelの温度モニターに使用するセンサーの正しい位置は?

Lxpanelの温度モニター(Lubuntu 12.10を使用しています)がセンサーの1つを自動的に検出していますが、別のセンサーを提供したいと思います。

センサーの出力は次のとおりです。

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に設定したいと思います。「センサー」の文字列がありますが、それがどうなるかわかりません。

「Core 0」、「coretemp-isa-0000」、「/ sys/devices/platform/coretemp.0/temp2_input」を試しましたが、動作しないようです。

何かご意見は?

7
alexpotato

シンプルなソリューション

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)「温度モニター」設定で指定し、スラッシュで終了していることを確認します(私の例のように、最後に「/」で囲まれています)。
sample screenshot

完了、意図したとおりに動作するはずです。


詳細と代替ソリューション

今日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関数が使用されます。これは、Ubuntuの新しいバージョンでは使用されない古いacpiタイプセンサーです。 。それ以外の場合、パスに/sys/class/hwmonが含まれる場合はhwmon関数を使用し、最後に他のタイプの/sys/*である場合はsysfsタイプのセンサーを使用します。
それに基づいて、/sys/class/thermal/にあるセンサーを指定するのが最も簡単な方法であると結論付けることができます。たとえば、/sys/class/thermal/thermal_zone1です。 /sys/class/hwmon/を使用すると、使用する正確なtemp[i]_inputを指定する方法がなく、/sys/以外のディレクトリを使用する場合、正しいセンサーが選択されません。古いacpi/thermal_zoneを使用すると仮定しますが、これも理想的ではありません。 trip_pointstemperatureの2つのファイルを使用して、ホームフォルダーに偽のセンサーディレクトリを作成するスクリプトを作成できます。 trip_pointsは次のようになり、重要ではありません。

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

temperatureは、現在の温度を読み取るためのもので、次のようになります。

temperature: 49 C  

最後に、使用する実際のセンサーからこれらのファイルを更新し、N秒ごとに実行するようにスケジュールするスクリプトが必要になります。このソリューションでは、/sys/class/hwmon/hwmon1種類のセンサーを使用し、LXpanelサーマルインジケーターで使用する値を手動で読み取ることができます。この方法を使用して、このサーマルインジケーターに他の種類のインジケーターを表示することもできますが、代わりに別のインジケーターを使用することを考えると、これは労力の無駄のようです。必要に応じて、後で実行するためにサンプルスクリプトで更新します\自分で作成します。

1
Ethuil UI

私は同様の問題を抱えています(私のデフォルトのセンサーは常に40.0°Cを示しています)、私は元のlxpanelの温度モニターでこのセンサーを変更することはできません。しかし、別の解決策があります:lm-sensors LXDE lxpanelプラグイン。

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

コンパイルが簡単で(lubuntu 16.04ではdebianのインストール手順も使用しました)、使い方も簡単です:

sensors-lxpanel-plugin

0
federk