lm_sensors
lm_sensors (Linux monitoring sensors) は温度・電圧・ファンを監視するためのツールやドライバーを提供するフリーなオープンソースアプリケーションです。このドキュメントでは lm_sensors をインストール・設定・使用する方法を説明します。
目次
- 1 インストール
- 2 設定
- 3 sensors の実行
- 4 センサーデータの利用
- 5 ヒントとテクニック
- 6 トラブルシューティング
- 6.1 K10Temp モジュール
- 6.2 Asus B450M-A/A320M-K/A320M-K-BR マザーボード
- 6.3 AM4 ソケットを備えた Asus B450/X399/X470 マザーボード
- 6.4 Asus H97/Z97/Z170/Z370i/X570/B550 マザーボード
- 6.5 Asrock Deskmini H470
- 6.6 Gigabyte B250/Z370/B450M/B560M/B660M/Z690 マザーボード
- 6.7 Gigabyte GA-J1900N-D3V
- 6.8 MAG B650 TOMAHAWK WIFI (MS-7D75)
- 6.9 Asrock B650M Pro RS
- 6.10 sensors-detect を実行した後にノートパソコンのディスプレイに問題が発生する
インストール
公式リポジトリから lm_sensors パッケージをインストールしてください。
設定
root で sensors-detect を使用して、カーネルモジュールのリストを検出して生成します。
# sensors-detect
さまざまなハードウェアを調査するよう求められます。"安全な" 回答がデフォルトであるため、すべての質問に対して Enter
を押していれば、通常は問題が発生しません。これにより、起動時にカーネルモジュールを自動的にロードするために lm_sensors.service
によって使用される /etc/conf.d/lm_sensors
設定ファイルが作成されます。
検知が完了したら、調査結果が表示されます。
例:
# 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
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 ...
センサーデータの利用
グラフィカルフロントエンド
センサーのデータを表示するための様々なフロントエンドが存在します:
- psensor — 温度やファン速度などのハードウェアセンサーを監視するための GTK アプリケーション。マザーボードと CPU (lm-sensors を使用)、Nvidia GPU (XNVCtrl を使用)、およびハードディスク (hddtemp または libashismart を使用) を監視します。
- xsensors — lm_sensors の X11 インターフェイス
- Netdata — Web ベースのシステムモニター (netdata)。
- CoolerControl — 冷却装置を監視および制御するプログラム。
デスクトップ環境で使えるフロントエンド:
- Freon (GNOME Shell extension) — GNOME シェルで CPU 温度、ディスク温度、ビデオカード温度、電圧、ファン RPM を表示するための拡張機能。
- GNOME Sensors Applet — CPU 温度、ファン速度、電圧測定値などのハードウェアセンサーからの測定値を表示する GNOME パネル用のアプレット。
- lm-sensors (LXPanel plugin) — lm-sensorsを通じて LXDE の温度/電圧/ファン速度を監視します。
- MATE Sensors Applet — MATE パネルにハードウェアセンサーからの測定値を表示します。
- Sensors (Xfce4 panel plugin) — Xfce パネル用のハードウェアセンサープラグイン。
- Thermal Monitor (Plasma 5 applet) — KDE CPU、GPU、およびその他の利用可能な温度センサーを監視するための Plasma アプレット。
sensord
sensord と呼ばれるオプションのデーモンが (lm_sensors パッケージに含まれています) データをラウンドロビンデータベース (rrd) に記録し、後でグラフィカルに視覚化できます。詳細については、sensord(8) のマニュアル ページを参照してください。
ヒントとテクニック
値の調整
ときとして、表示されるデータが間違っていたり出力をリネームしたいという場合があります。例:
- オフセットが間違っているために温度の値が間違っている (実際の温度よりも 20 °C も高く報告されるなど)
- 特定のセンサーの出力をリネームしたい。
- 表示されるコアの順番が間違っている。
上記は全て /etc/sensors.d/foo
を作成して /etc/sensors3.conf
のパッケージ設定を上書きすることで調整できます。'foo' はマザーボードのブランド名に置き換えることを推奨しますが特に命名に決まりはありません。
例 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
S.M.A.R.T. ドライブの温度
カーネル 5.6 以降 drivetemp
モジュールは hwmon を通じて SATA/SAS 温度を報告しますが、sensors-detect
は自動的に検出しませんしたがって、モジュールは 手動ロード でなければなりません。
# modprobe drivetemp
sensors
の出力に次のようなエントリが表示されるはずです。
sensors
drivetemp-scsi-1-0 Adapter: SCSI adapter temp1: +33.0°C drivetemp-scsi-2-0 Adapter: SCSI adapter temp1: +32.0°C (low = +0.0°C, high = +70.0°C) (crit low = +0.0°C, crit = +70.0°C) (lowest = +29.0°C, highest = +41.0°C)
起動時にモジュールをロードできるようになりました。あるいは、/etc/conf.d/lm-sensors
の HWMON_MODULES
行に手動で追加します。sensors-detect
がこのファイルに再び書き込むことを許可される場合、このファイルは自動的に追加されないことに注意してください。
永続的なデバイス名
多くのソフトウェアはセンサーデバイスが /sys/class/hwmon/hwmonX
に配置されることを期待していますが、多くの場合、hwmon インターフェイスを提供するデバイスが 1 〜 2 つ以上あるシステムではそうではありません。ソフトウェアはおそらく hwmon?/name
を解析するか、lmsensors ライブラリを使用する必要がありますが、残念ながら多くの場合、そうではありません。一部のソフトウェア (例: Monitorix またはその特定のモジュール、つまり amdgpu) は、別の場所に永続的な名前が必要です。
したがって、次の種類の udev ルールが役立つ可能性があります。すべてのソフトウェアがこれらを使用できるわけではありません (たとえば、KDE システムモニター - 悲しいことに、多くのシステムでこれらのソフトウェアはほとんど役に立ちません) 多くの場合、udev ルールで hwmon サブシステムと適切な名前をマッチさせるだけで十分です、ルールの書き方については、Udevページを見てください。
/sys
階層では名前を変更したりシンボリックリンクを作成したりすることはできません。SYMLINK+=
ステートメントも機能しません。したがって、RUN+=
ステートメントを使用する必要があります (この例のように、シンボリックリンクは /dev
の下にある必要はありません。)
/etc/udev/rules.d/99-persistent-hwmon-names.rules
# my motherboard sensor chip: ACTION=="add", SUBSYSTEM=="hwmon", ATTRS{name}=="nct6687", RUN+="/bin/sh -c 'ln -s /sys$devpath /dev/nct6678'" # an USB device providing sensors: ACTION=="add", SUBSYSTEM=="hwmon", ATTRS{name}=="corsaircpro", RUN+="/bin/sh -c 'ln -s /sys$devpath /dev/corsaircpro'" # my GPU: ACTION=="add", SUBSYSTEM=="hwmon", ATTRS{vendor}=="0x1002", ATTRS{device}=="0x73bf", RUN+="/bin/sh -c 'ln -s /sys$devpath /dev/rx6900xt'"
トラブルシューティング
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
これでモジュールがブート時にロードされるようになります。
Asus B450M-A/A320M-K/A320M-K-BR マザーボード
これらのマザーボードは IT8655E チップを使用していますが、2020 年 11 月現在、it87 カーネル ドライバーではサポートされていません [1] ただし、カーネルドライバーのアップストリームバージョン [2] ではサポートされています。DKMS バリアントは it87-dkms-gitAUR に含まれています。
AM4 ソケットを備えた Asus B450/X399/X470 マザーボード
最近の Asus マザーボードの一部は ITE IT8665E チップを使用しており、温度、ファン、電圧センサーにアクセスするには asus-wmi-sensors
モジュールが必要な場合があります。これは 5.17 以降のメインラインカーネルの一部です。asus-wmi-sensors
カーネルモジュール をロードして下さい。これには UEFI インターフェイスを使用し、一部のボードでは BIOS アップデートが必要な場合があります [3]
あるいは、it87
モジュールはチップから値を直接読み取り、it87-dkms-gitAUR をインストールして、it87
カーネルモジュール をロードします。
Asus H97/Z97/Z170/Z370i/X570/B550 マザーボード
最近の Asus マザーボードの一部では、ファンと電圧センサーにアクセスするには、nct6775
カーネルモジュール をロードする必要がある場合があります。
次の カーネルパラメータ を追加する必要がある場合もあります。
acpi_enforce_resources=lax
詳細については、https://bugzilla.kernel.org/show_bug.cgi?id=204807 を参照してください。
注意: カーネル 5.16 [4] 以降、上記の カーネルパラメータ はほとんどのボードで必要なくなりましたので、避ける必要があります。
Asrock Deskmini H470
Deskmini H470 の STX ボードは NCT6683 チップを使用しており、温度、ファン、電圧センサーにアクセスするには、nct6683
モジュールのロードが必要です。
nct6683
モジュールの適切な値を得るには、モジュール設定ファイルを作成します:
/etc/modprobe.d/nct6683.conf
options nct6683 force=1
Gigabyte B250/Z370/B450M/B560M/B660M/Z690 マザーボード
一部の Gigabyte マザーボードでは、ITE IT8686E、ITE8689 (B560 および B660M 用)、または ITE8689E (Z690 用) チップを使用していますが、2019 年 5 月の時点では、it87 カーネルドライバーではサポートされていません [5] ただし、カーネルドライバーのアップストリームバージョン [6] ではサポートされています。DKMS バリアントは it87-dkms-gitAUR に含まれています。lm_sensors#Asus H97/Z97/Z170/Z370i/X570/B550 マザーボード と同様に、モジュールをインストールする前に カーネルパラメータ が必要です:
acpi_enforce_resources=lax
さらに、モジュールをロードするときに次のようにチップの ID を指定します:
# modprobe it87 force_id=0x8686 もしくは # modprobe it87 force_id=0x8689 # for B560 # modprobe it87 force_id=0x8628 # for Z690
または、次の 2 つのファイルを作成することで、ブートプロセス中に モジュールをロード することもできます。
/etc/modules-load.d/it87.conf
it87
Z690 用
/etc/modprobe.d/it87.conf
options it87 force_id=0x8628
他の場合
/etc/modprobe.d/it87.conf
options it87 ignore_resource_conflict=1
モジュールがロードされたら、センサー ツールを使用してチップをプローブできます。 fancontrol を使用してケースファンの速度ステップを制御することもできるようになりました。
オプションで zenpower3-dkmsAUR をインストールすると、マザーボードの冷却システムをより細かく調整できる場合があります。ただし、デフォルトの k10temp モジュールは無効になります。
Gigabyte GA-J1900N-D3V
(電圧やマザーボードの温度、ファンの速度を測定するために) ITE IT8620E チップを使用するマザーボードですが、2014年10月6日現在、lm_sensors は ITE IT8620E をサポートしていません [7] [8]。lm_sensors の開発者はハードウェアの監視部分については IT8728F と互換性があることを報告しています。ただし、2016年8月現在では [9] に 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 を使ってケースファンの速度を制御することも可能です。
MAG B650 TOMAHAWK WIFI (MS-7D75)
このマザーボードは、ファン、電圧、温度の読み取りに Nuvoton NCT6687-R チップを使用しています。これらの値にアクセスするには、カーネルモジュール nct6687d-dkms-gitAUR が必要です。
インストールしたらモジュールをロードできます
$ modprobe nct6687
そしてセンサーの出力を確認します
$ sensors
Asrock B650M Pro RS
このマザーボードは、ファン、電圧、温度の読み取りに Nuvoton NCT6796D-S を使用しています。チップのこの正確なバリアントは異なる ID を持っているため、モジュール構成ファイルがなければ検出されません。
/etc/modprobe.d/nct6775.conf
options nct6775 force_id=0xd801
sensors-detect を実行した後にノートパソコンのディスプレイに問題が発生する
lm-sensors がセンサーを調べるときにディスプレイの Vcom 値を変えてしまうのが原因です。フォーラムに解決法が載っています: https://bbs.archlinux.org/viewtopic.php?id=193048 。ただし、フォーラムに書かれているコマンドを安易に実行する前によく中身を読んでください。