lm_sensors

提供: ArchWiki
移動先: 案内検索

lm_sensors (Linux monitoring sensors) は温度・電圧・ファンを監視するためのツールやドライバーを提供するフリーなオープンソースアプリケーションです。このドキュメントでは lm_sensors をインストール・設定・使用する方法を説明します。

インストール

公式リポジトリから lm_sensors パッケージをインストールしてください。

ノート: GitHub リポジトリ に詳しいドキュメントが存在します。将来的にはドキュメントもインストールされるようになります。FS#48354 を参照。

lm_sensors の設定

sensors-detect を実行してカーネルモジュールのリストを検知・作成してください:

# sensors-detect

様々なハードウェアを調査するための質問がされますが、デフォルトの答えは無難なものに設定されており、全ての質問に Enter を押すだけで普通は大丈夫です。コマンドの実行が完了すると設定ファイルの /etc/conf.d/lm_sensors が作成され、起動時に lm_sensors.service によって自動的にカーネルモジュールがロードされます。

検知が完了したら、調査結果が表示されます。例:

# sensors-detect
This program will help you determine which kernel modules you need
to load to use lm_sensors most effectively. It is generally safe
and recommended to accept the default answers to all questions,
unless you know what you're doing.

Some south bridges, CPUs or memory controllers contain embedded sensors.
Do you want to scan for them? This is totally safe. (YES/no): 
Module cpuid loaded successfully.
Silicon Integrated Systems SIS5595...                       No
VIA VT82C686 Integrated Sensors...                          No
VIA VT8231 Integrated Sensors...                            No
AMD K8 thermal sensors...                                   No
AMD Family 10h thermal sensors...                           No

...

Now follows a summary of the probes I have just done.
Just press ENTER to continue: 

Driver `coretemp':
  * Chip `Intel digital thermal sensor' (confidence: 9)

Driver `lm90':
  * Bus `SMBus nForce2 adapter at 4d00'
    Busdriver `i2c_nforce2', I2C address 0x4c
    Chip `Winbond W83L771AWG/ASG' (confidence: 6)

Do you want to overwrite /etc/conf.d/lm_sensors? (YES/no): 
ln -s '/usr/lib/systemd/system/lm_sensors.service' '/etc/systemd/system/multi-user.target.wants/lm_sensors.service'
Unloading i2c-dev... OK
Unloading cpuid... OK
ノート: /etc/conf.d/lm_sensors の生成について YES と答えると systemd サービスが自動的に有効になります。また、サービスが自動的に起動します。

sensors の実行

sensors の実行例:

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

w83l771-i2c-0-4c
Adapter: SMBus nForce2 adapter at 4d00
temp1:        +28.0°C  (low  = -40.0°C, high = +70.0°C)
                       (crit = +85.0°C, hyst = +75.0°C)
temp2:        +37.4°C  (low  = -40.0°C, high = +70.0°C)
                       (crit = +110.0°C, hyst = +100.0°C)

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

メモリモジュールから SPD のタイミング値を読み込むには i2c-tools パッケージをインストールしてください。インストールしたら eeprom カーネルモジュールをロードしてください:

# modprobe eeprom

最後に decode-dimms でメモリ情報を確認してください。

以下は出力の例です:

# decode-dimms
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     

...

センサーデータの利用

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

センサーのデータを表示するための様々なフロントエンドが存在します:

  • conky - Conky は高度な設定ができる torsmo ベースの X 用のシステムモニターです。
  • xsensors - lm_sensors の X11 インターフェイス。
  • psensorAUR - ハードウェアセンサーを監視するための GTK+ アプリケーション。温度やファンの速度、マザーボードや CPU (lm-sensors を使用)、NVIDIA 製の GPU (XNVCtrl を使用)、ハードディスク (hddtemp や libatasmart を使用) を監視します。

デスクトップ環境で使えるフロントエンド:

sensord

ラウンドロビンデータベース (rrd) にデータを保存してグラフィカルに表示することができる sensord というデーモンも存在します (lm_sensors パッケージに含まれています)。詳しくは sensord の man ページを見てください。

Tips and tricks

値の調整

ときとして、表示されるデータが間違っていたり出力をリネームしたいという場合があります。例:

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

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

ノート: /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 を搭載した HP Z600 ワークステーションの実例です。物理コアの順番が間違っています: 0, 1, 9, 10 が2番目の CPU でも繰り返されてしまっています。0, 1, 2, 3, 4, 5, 6, 7 と連続した順番でコアの温度を表示してほしいと大抵のユーザーは思うでしょう。

$ 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)
...

物理チップに対してどのようなオプションが利用できるか 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/HP_Z600
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 を実行すると調整された値が表示されるようになります:

$ 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)
...

lm_sensors の自動デプロイ

複数のマシンに lm_sensors をデプロイしたい場合、以下のどちらかの方法で出来ます:

1. 質問に対してデフォルトの答えを設定:

# sensors-detect --auto

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

 # yes | sensors-detect

トラブルシューティング

K10Temp モジュール

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

全てのプロセッサにはセンサーが搭載されていますが、Socket F や AM2+ のプロセッサでは、センサーの返す値がおかしいことがあります (erratum 319)。これらの CPU では force=1 モジュールパラメータを指定しないかぎりドライバーはロードされません。
技術上の問題のため、ドライバーが認識できるのはマザーボードのソケットタイプだけです。プロセッサの実際の機能はわかりません。AM2+ マザーボードで AM3 プロセッサを使っている場合は force=1 パラメータを設定しても大丈夫です。

影響を受けるマシンではモジュールは "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.31 における変更によって sensors が動作しなくなることがあります。こちらの FAQ エントリ に詳しい解説とエラー例が載っています。大抵の場合、別のモジュール (例: ACPI モジュール) を使うことでハードウェアの情報を得ることができます。ユーティリティや監視プログラム (例: /usr/bin/sensors) は情報の出処を選択することができます。可能であれば、別のモジュールを使うのが推奨される解決方法です。

警告: 以下の設定は危険でありハードウェアにダメージを与える可能性があります。2.6.31 で行われた変更はバグではありません。詳しくは上記の FAQ エントリを見てください。

2.6.31 以前の状態に戻したい場合は、以下のカーネルパラメータを追加してください:

acpi_enforce_resources=lax

Gigabyte GA-J1900N-D3V

(電圧やマザーボードの温度、ファンの速度を測定するために) ITE IT8620E チップを使用するマザーボードですが、2014年10月6日現在、lm_sensors は ITE IT8620E をサポートしていません [1] [2]。lm_sensors の開発者はハードウェアの監視部分については IT8728F と互換性があることを報告しています。ただし、2016年8月現在では [3] に IT8620E がサポートされていると載っています。

modprobe を使うことで動的にモジュールをロードできます:

$ modprobe it87 force_id=0x8728

もしくは、以下の2つのファイルを作成することで起動時にモジュールをロードすることもできます:

/etc/modules-load.d/it87.conf
it87
/etc/modprobe.d/it87.conf
options it87 force_id=0x8603

モジュールがロードされたら sensors ツールで情報を読み取ることができます。

また、fancontrol を使ってケースファンの速度を制御することも可能です。

sensors-detect を実行した後にノートパソコンのディスプレイに問題が発生する

lm-sensors がセンサーを調べるときにディスプレイの Vcom 値を変えてしまうのが原因です。フォーラムに解決法が載っています: https://bbs.archlinux.org/viewtopic.php?id=193048 。ただし、フォーラムに書かれているコマンドを安易に実行する前によく中身を読んでください。