lm sensors (日本語) - ArchWiki

# lm sensors (日本語)

関連記事

- hddtemp
- monitorix

lm_sensors (Linux monitoring sensors) は温度、電圧、ファンを監視するフリーでオープンソースなツールとドライバです。 このドキュメントでは lm_sensors のインストール・設定の方法と、CPU 温度やマザーボードの温度、ファンスピードを監視する方法を説明します。

## 使い方

### インストール

lm_sensors を公式リポジトリからインストールします。

### lm_sensors の設定

検出とカーネルモジュールのリストを作成するために sensors-detect を使用します。

    # sensors-detect

上のコマンドを実行すると、`sensors` デーモンが起動時に自動的にカーネルモジュールを読み込むためのファイル `/etc/conf.d/lm_sensors` が作成されます。どのハードウェアを検索したいかどうか質問されるでしょう。デフォルトが "安全" な答えに設定されているので大抵の場合、全ての質問に `Enter` を押すだけでかまいません。

一連の検出が終わったら検出の結果が提示されます。例:

    # sensors-detect

    Now follows a summary of the probes I have just done.
    Just press ENTER to continue:
    Driver `it87':
      * ISA bus, address 0x290
         Chip `ITE IT8718F Super IO Sensors' (confidence: 9)
    Driver `coretemp':
      * Chip `Intel Core family thermal sensor' (confidence: 9)

もしあなたがデーモンを使う気でいるなら、`/etc/conf.d/lm_sensors` を作成するかどうか聞かれた時に YES と答えてください。

起動時に自動的にカーネルモジュールを読み込むには、次を実行する必要があります:

    systemctl enable lm_sensors.service

また、デーモンを使う代わりに、モジュールを `/etc/modules-load.d/lm_sensors.conf` の `MODULES` 配列に追加することもできます:

    coretemp
    it87
    acpi-cpufreq

### lm_sensors をテストする

セットアップをテストするには、手動で、もしくは systemd のサービスファイルを利用し、カーネルモジュールを読み込む必要があります。両方使用してはいけません。

例: 手動で読み込む方法

    # modprobe it87
    # modprobe coretemp

例: スクリプトを利用する方法

    # systemctl enable lm_sensors
    # systemctl start lm_sensors

sensors を実行するとこのようなものが表示されるはずです。

    $ sensors

    coretemp-isa-0000
    Adapter: ISA adapter
    Core 0:      +30.0°C  (high = +76.0°C, crit = +100.0°C)

    coretemp-isa-0001
    Adapter: ISA adapter
    Core 1:      +30.0°C  (high = +76.0°C, crit = +100.0°C)

    coretemp-isa-0002
    Adapter: ISA adapter
    Core 2:      +32.0°C  (high = +76.0°C, crit = +100.0°C)

    coretemp-isa-0003
    Adapter: ISA adapter
    Core 3:      +30.0°C  (high = +76.0°C, crit = +100.0°C)

    it8718-isa-0290
    Adapter: ISA adapter
    in0:         +1.17 V  (min =  +0.00 V, max =  +4.08 V)
    in1:         +1.31 V  (min =  +1.28 V, max =  +1.68 V)
    in2:         +3.28 V  (min =  +2.78 V, max =  +3.78 V)
    in3:         +2.88 V  (min =  +2.67 V, max =  +3.26 V)
    in4:         +2.98 V  (min =  +2.50 V, max =  +3.49 V)
    in5:         +1.34 V  (min =  +0.58 V, max =  +1.34 V)   ALARM
    in6:         +2.02 V  (min =  +1.04 V, max =  +1.36 V)   ALARM
    in7:         +2.83 V  (min =  +2.67 V, max =  +3.26 V)
    Vbat:        +3.28 V
    fan1:       1500 RPM  (min = 3245 RPM)  ALARM
    fan2:          0 RPM  (min = 3245 RPM)  ALARM
    fan3:          0 RPM  (min = 3245 RPM)  ALARM
    temp1:       +18.0°C  (low  = +127.0°C, high = +64.0°C)  sensor = thermal diode
    temp2:       +32.0°C  (low  = +127.0°C, high = +64.0°C)  sensor = thermistor
    temp3:       +38.0°C  (low  = +127.0°C, high = +64.0°C)  sensor = thermistor
    cpu0_vid:   +2.050 V

    acpitz-virtual-0
    Adapter: Virtual device
    temp1:       +18.0°C  (crit = +64.0°C)

### SPD の値をメモリーモジュールから読み込む (任意)

SPD タイミングの値をあなたのメモリーモジュールから読み込むには、i2c-tools を公式リポジトリからインストールします。 i2c-tools をインストールしたら、`eeprom` カーネルモジュールを読み込む必要があります。

    # modprobe eeprom

最後に、あなたのメモリー情報を `decode-dimms` で見る事ができます。

以下はあるマシンの出力の一部です:

    $ decode-dimms

    # decode-dimms version 5733 (2009-06-09 13:13:41 +0200)

    Memory Serial Presence Detect Decoder
    By Philip Edelbrock, Christian Zuckschwerdt, Burkart Lingner,
    Jean Delvare, Trent Piepho and others

    Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/0-0050
    Guessing DIMM is in                             bank 1

    ---=== SPD EEPROM Information ===---
    EEPROM CRC of bytes 0-116                       OK (0x583F)
    # of bytes written to SDRAM EEPROM              176
    Total number of bytes in EEPROM                 512
    Fundamental Memory type                         DDR3 SDRAM
    Module Type                                     UDIMM

    ---=== Memory Characteristics ===---
    Fine time base                                  2.500 ps
    Medium time base                                0.125 ns
    Maximum module speed                            1066MHz (PC3-8533)
    Size                                            2048 MB
    Banks x Rows x Columns x Bits                   8 x 14 x 10 x 64
    Ranks                                           2
    SDRAM Device Width                              8 bits
    tCL-tRCD-tRP-tRAS                               7-7-7-33
    Supported CAS Latencies (tCL)                   8T, 7T, 6T, 5T

    ---=== Timing Parameters ===---
    Minimum Write Recovery time (tWR)               15.000 ns
    Minimum Row Active to Row Active Delay (tRRD)   7.500 ns
    Minimum Active to Auto-Refresh Delay (tRC)      49.500 ns
    Minimum Recovery Delay (tRFC)                   110.000 ns
    Minimum Write to Read CMD Delay (tWTR)          7.500 ns
    Minimum Read to Pre-charge CMD Delay (tRTP)     7.500 ns
    Minimum Four Activate Window Delay (tFAW)       30.000 ns

    ---=== Optional Features ===---
    Operable voltages                               1.5V
    RZQ/6 supported?                                Yes
    RZQ/7 supported?                                Yes
    DLL-Off Mode supported?                         No
    Operating temperature range                     0-85C
    Refresh Rate in extended temp range             1X
    Auto Self-Refresh?                              Yes
    On-Die Thermal Sensor readout?                  No
    Partial Array Self-Refresh?                     No
    Thermal Sensor Accuracy                         Not implemented
    SDRAM Device Type                               Standard Monolithic

    ---=== Physical Characteristics ===---
    Module Height (mm)                              15
    Module Thickness (mm)                           1 front, 1 back
    Module Width (mm)                               133.5
    Module Reference Card                           B

    ---=== Manufacturer Data ===---
    Module Manufacturer                             Invalid
    Manufacturing Location Code                     0x02
    Part Number                                     OCZ3G1600LV2G

    ...

## センサーデータの利用

### グラフィカルフロントエンド

センサーデータのフロントエンドが多数あります。

- xsensors - lm_sensors の X11 インターフェースです。
- xfce4-sensors-plugin - lm_sensors を Xfce パネルへ追加するためのプラグインです。
- conky - Conky は高度で設定を行うことができる torsmo ベースの X 向けシステムモニターです。
- kdeutils-superkaramba - Superkaramba は KDE デスクトップのためのウィジェット作成をできるようにするツールです。

詳しくは kde-look.org の karamba セクション を見てください。例えばセンサーデータのための karamba フロントエンドがあります。

- sensors-applet - GNOME パネルにハードウェアセンサーからの情報、CPU 温度・ファンスピード・電圧などを表示するためのアプレットです。

### sensord

sensord (lm_sensors パッケージの中に入っています) と呼ばれるオプショナルデーモンが存在し、ラウンドロビンデータベース (rrd) にデータを記録して後で視覚化することができます。詳細は sensord の man ページを読んでください。

## Tips and Tricks

### 値の調整

場合によって、表示されるデータが間違っていたり出力をリネームしたいということがあるでしょう。以下のようなユースケースが考えられます:

- オフセットが間違っているために温度の値が間違っている (つまり実際の温度よりも20 °C 高く報告される)。
- センサーの出力をリネームしたい。
- 表示されるコアの順番が間違っている。

上記は全て `/etc/sensors.d/foo` を作成して `/etc/sensors3.conf` にあるパッケージの設定を上書きすることで調整できます。'foo' はマザーボードのブランド名に置き換えることを推奨しますが命名は任意です。

Note: `/etc/sensors3.conf` を直接編集しないでください。パッケージのアップデートによって上書きされてしまいます。

#### 例 1. 温度のオフセットを調整

以下は Zotac ION-ITX-A-U マザーボードの実際の例です。coretemp の 20 °C ずれており (高すぎる) Intel の仕様にあわせて低く調整します。

    $ sensors

    coretemp-isa-0000
    Adapter: ISA adapter
    Core 0:       +57.0°C  (crit = +125.0°C)
    Core 1:       +55.0°C  (crit = +125.0°C)
    ...

物理チップに対してどのようなオプションが利用できるか `sensors` に `-u` スイッチをつけて調べてください (raw モード):

    $ sensors -u

    coretemp-isa-0000
    Adapter: ISA adapter
    Core 0:
      temp2_input: 57.000
      temp2_crit: 125.000
      temp2_crit_alarm: 0.000
    Core 1:
      temp3_input: 55.000
      temp3_crit: 125.000
      temp3_crit_alarm: 0.000
    ...

デフォルトの値を上書きするために以下のファイルを作成:

    /etc/sensors.d/Zotac-IONITX-A-U

    chip "coretemp-isa-0000"
      label temp2 "Core 0"
      compute temp2 @-20,@-20

      label temp3 "Core 1"
      compute temp3 @-20,@-20

`sensors` を実行すると調整された値が表示されるようになります:

    $ sensors

    coretemp-isa-0000
    Adapter: ISA adapter
    Core 0:       +37.0°C  (crit = +105.0°C)
    Core 1:       +35.0°C  (crit = +105.0°C)
    ...

#### 例 2. ラベルの名前の変更

以下は Asus A7M266 での実際の例です。温度のラベル 'temp1' と 'temp2' にもっとちゃんとした名前を付けます:

    $ sensors

    as99127f-i2c-0-2d
    Adapter: SMBus Via Pro adapter at e800
    ...
    temp1:        +35.0°C  (high =  +0.0°C, hyst = -128.0°C)
    temp2:        +47.5°C  (high = +100.0°C, hyst = +75.0°C)
    ...

デフォルトの値を上書きするために以下のファイルを作成:

    /etc/sensors.d/Asus_A7M266

    chip "as99127f-*"
      label temp1 "Mobo Temp"
      label temp2 "CPU0 Temp"

`sensors` を実行すると調整された値が表示されるようになります:

    $ sensors

    as99127f-i2c-0-2d
    Adapter: SMBus Via Pro adapter at e800
    ...
    Mobo Temp:        +35.0°C  (high =  +0.0°C, hyst = -128.0°C)
    CPU0 Temp:        +47.5°C  (high = +100.0°C, hyst = +75.0°C)
    ...

#### 例 3. マルチ CPU 環境でコアの番号を再定義する

稀に、マルチ CPU マザーボードでは実際の物理コアのナンバリングが間違っていることがあります。 Xeon を2個搭載した HP Z600 ワークステーションの例を示します:

    $ sensors

    coretemp-isa-0000
    Adapter: ISA adapter
    Core 0:       +65.0°C  (high = +85.0°C, crit = +95.0°C)
    Core 1:       +65.0°C  (high = +85.0°C, crit = +95.0°C)
    Core 9:       +66.0°C  (high = +85.0°C, crit = +95.0°C)
    Core 10:      +66.0°C  (high = +85.0°C, crit = +95.0°C)

    coretemp-isa-0004
    Adapter: ISA adapter
    Core 0:       +54.0°C  (high = +85.0°C, crit = +95.0°C)
    Core 1:       +56.0°C  (high = +85.0°C, crit = +95.0°C)
    Core 9:       +60.0°C  (high = +85.0°C, crit = +95.0°C)
    Core 10:      +61.0°C  (high = +85.0°C, crit = +95.0°C)

    smsc47b397-isa-0480
    Adapter: ISA adapter
    fan1:        1730 RPM
    fan2:        1746 RPM
    fan3:        1224 RPM
    fan4:        2825 RPM
    temp1:        +46.0°C
    temp2:        +37.0°C
    temp3:        +23.0°C
    temp4:       -128.0°C

コアの番号が 0,1,9,10 となっていて、2番目の CPU でも同じ番号が繰り返されていることに注意してください。多くのユーザーは 0,1,2,3,4,5,6,7 といった順番でコアの温度を表示してほしいでしょう。２段階でこの問題を解決します。物理チップに対してどのようなオプションが利用できるか `sensors` に `-u` スイッチをつけて調べてください:

    $ sensors -u coretemp-isa-0000

    coretemp-isa-0000
    Adapter: ISA adapter
    Core 0:
      temp2_input: 61.000
      temp2_max: 85.000
      temp2_crit: 95.000
      temp2_crit_alarm: 0.000
    Core 1:
      temp3_input: 61.000
      temp3_max: 85.000
      temp3_crit: 95.000
      temp3_crit_alarm: 0.000
    Core 9:
      temp11_input: 62.000
      temp11_max: 85.000
      temp11_crit: 95.000
    Core 10:
      temp12_input: 63.000
      temp12_max: 85.000
      temp12_crit: 95.000

    $ sensors -u coretemp-isa-0004

    coretemp-isa-0004
    Adapter: ISA adapter
    Core 0:
      temp2_input: 53.000
      temp2_max: 85.000
      temp2_crit: 95.000
      temp2_crit_alarm: 0.000
    Core 1:
      temp3_input: 54.000
      temp3_max: 85.000
      temp3_crit: 95.000
      temp3_crit_alarm: 0.000
    Core 9:
      temp11_input: 59.000
      temp11_max: 85.000
      temp11_crit: 95.000
    Core 10:
      temp12_input: 59.000
      temp12_max: 85.000
      temp12_crit: 95.000

結果を元に、新しい定義を`/etc/sensors.d/cores.conf`に作成します:

    /etc/sensors.d/cores.conf

    chip "coretemp-isa-0000"

        label temp2 "Core 0"
        label temp3 "Core 1"
        label temp11 "Core 2"
        label temp12 "Core 3"

    chip "coretemp-isa-0004"

        label temp2 "Core 4"
        label temp3 "Core 5"
        label temp11 "Core 6"
        label temp12 "Core 7"

問題は解決しました。これらのステップが完了した結果を示します:

    $ sensors

    coretemp-isa-0000
    Adapter: ISA adapter
    Core0:        +64.0°C  (high = +85.0°C, crit = +95.0°C)
    Core1:        +63.0°C  (high = +85.0°C, crit = +95.0°C)
    Core2:        +65.0°C  (high = +85.0°C, crit = +95.0°C)
    Core3:        +66.0°C  (high = +85.0°C, crit = +95.0°C)

    coretemp-isa-0004
    Adapter: ISA adapter
    Core4:        +53.0°C  (high = +85.0°C, crit = +95.0°C)
    Core5:        +54.0°C  (high = +85.0°C, crit = +95.0°C)
    Core6:        +59.0°C  (high = +85.0°C, crit = +95.0°C)
    Core7:        +60.0°C  (high = +85.0°C, crit = +95.0°C)

    smsc47b397-isa-0480
    Adapter: ISA adapter
    fan1:        1734 RPM
    fan2:        1726 RPM
    fan3:        1222 RPM
    fan4:        2827 RPM
    temp1:        +45.0°C
    temp2:        +37.0°C
    temp3:        +23.0°C
    temp4:       -128.0°C

### 自動で lm_sensors を配置

複数のマシンに lm-sensors を配置したい場合、以下のどちらかで利用できます:

1. 質問に対してデフォルトで承認:

    # sensors-detect --auto

2. デフォルトを上書きして全ての質問に YES で答える:

     # yes | sensors-detect

## トラブルシューティング

### K10Temp モジュール

K10 プロセッサでは温度センサーで問題が起こることがあります。カーネルドキュメントより (`linux-<version>/Documentation/hwmon/k10temp`):

  All these processors have a sensor, but on those for Socket F or AM2+, the sensor may return inconsistent values (erratum 319). The driver will refuse to load on these revisions unless users specify the `force=1` module parameter.

  Due to technical reasons, the driver can detect only the mainboard's socket type, not the processor's actual capabilities. Therefore, users of an AM3 processor on an AM2+ mainboard, can safely use the `force=1` parameter.

影響があるマシンではモジュールは "unreliable CPU thermal sensor; monitoring disabled" と報告します。強制的に使用するには:

    # rmmod k10temp
    # modprobe k10temp force=1

センサーが問題なく確かなことを確認して下さい。大丈夫のようなら、`/etc/modprobe.d/k10temp.conf` を編集して次を追加:

    options k10temp force=1

これでモジュールがブート時にロードされるようになります。

### Linux 2.6.31 から Sensors が動きません

2.6.21 の変更でいくつかの sensors が動かないようになりました。詳しい説明とエラーの例が この FAQ エントリ にあります。これを修復するには、次のカーネルパラメータを追加してください:

    acpi_enforce_resources=lax

Warning: 場合によって、この設定が危険なこともあります。詳しくは FAQ を見て下さい。

大抵は問題のハードウェアについて他のモジュールを使って (例: ACPI モジュール) 情報にアクセスできます。多くのユーティリティとモニタ (例: `/usr/bin/sensors`) は複数のソースから情報を収集します。可能であれば、それが推奨される方法です。

Categories:

- Status monitoring and notification (日本語)
- CPU (日本語)