Ubuntu Weekly Recipe

第183回ハードウェアから温度情報などを取得する

気温の上がる夏[1]は、コンピューターの筐体内の温度も高くなりがちです。そこで今回は、温度監視のトピックをお届けします。

Linux Hardware Monitoringプロジェクト

LinuxにはLm_sensors(Linux hardware Monitoring)というプロジェクトがあります。このプロジェクトは、コンピューターを構成する部品のうち、マザーボードやCPU、グラッフィックカードに搭載されているセンサーから各種情報を取得することを目的としています。取得することのできる情報は温度に限らず、稼働電圧、ファンの回転数なども含まれます。

Ubuntuに導入するには、UbuntuソフトウェアセンターやSynapticパッケージマネジャーでパッケージ「lm-sensors」をインストールしてください。

センサーに対応するカーネルモジュールの特定

lm-sensorsは、各種情報を取得するために各ハードウェアにアクセスします。この際、それぞれのハードウェアに応じたドライバーが有効となっている必要があります。Linuxの場合はドライバーがカーネルモジュールの形で実装されています。パッケージ「lm-sensors」をインストールした直後にするべきことは、お使いのハードウェアに対応するカーネルモジュールの特定です。

特定はコマンド操作で行います。Ubuntuのメニューから端末(gnome-terminal)を開き、以下のコマンドを実行します。

$ gksudo sensors-detect;

パスワードを入力すると、端末上にてハードウェアとカーネルモジュールを検出するプロセスが始まります。

$ gksudo sensors-detect;
# sensors-detect revision 5861 (2010-09-21 17:21:05 +0200)
# System: Gigabyte Technology Co., Ltd. X58A-UD5

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

それぞれの検出セクションでYES/noの選択を迫られます。そのままエンターキーを押すと大文字で表示されている選択肢が選ばれます。

...
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
AMD Family 11h thermal sensors...                           No
Intel digital thermal sensor...                             Success!
    (driver `coretemp')
Intel AMB FB-DIMM thermal sensor...                         No
VIA C7 thermal sensor...                                    No
VIA Nano thermal sensor...                                  No
...

ハードウェアとそれに対応するカーネルモジュールが検出されていきます。なお、新しいマザーボードやグラフィックカードの場合は、対応するドライバーがまだ開発されておらず、特定に失敗することもあります。

カーネルモジュールの自動有効設定

検出プロセスをひと通り終えると、ハードウェアに対応するカーネルモジュールの一覧が表示されます。

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

Driver `adt7475':
  * Bus `NVIDIA i2c adapter '
    Busdriver `nvidia', I2C address 0x2e
    Chip `Analog Devices ADT7473' (confidence: 5)

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

To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
adt7475
coretemp
it87
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!

Do you want to add these lines automatically to /etc/modules? (yes/NO)
...

上の例では、マザーボードのセンサーに対して「it87⁠⁠、NVIDIA社のグラッフィックカードのセンサーに対して「adt7475⁠⁠、CPUのセンサーに対して「coretemp」の各カーネルモジュールが特定されています。lm-sensorsが情報を取得するためには、これらカーネルモジュールが有効化されている必要があります。

カーネルモジュールの作法として、ファイル「/etc/modules」に記述されているカーネルモジュールはシステム起動時に自動で有効化されというものがあり、出力の最後でこのファイルへの追記をするかしないかの選択を迫られます。追記をする場合はyesを入力してエンターキーを押してください。そのままエンターキーを押すとNOが選択されてしまいますが、この場合はテキストエディタを使って自分でファイル「/etc/modules」を編集する必要がありますので、yesを選択しておくほうが簡単でしょう。

ファイル「/etc/modules」への記述が終わったら、次回以降の起動から必要なカーネルモジュールが自動で有効化されるようになりますので、システムの再起動をしてください。

情報の表示

さて、情報を表示してみましょう。同じく端末で以下のコマンドを実行してください。

$ sensors;
coretemp-isa-0000
Adapter: ISA adapter
Core 0:      +47.0℃  (high = +80.0℃, crit = +100.0℃)  

coretemp-isa-0001
Adapter: ISA adapter
Core 1:      +48.0℃  (high = +80.0℃, crit = +100.0℃)  

coretemp-isa-0002
Adapter: ISA adapter
Core 2:      +48.0℃  (high = +80.0℃, crit = +100.0℃)  

coretemp-isa-0003
Adapter: ISA adapter
Core 3:      +49.0℃  (high = +80.0℃, crit = +100.0℃)  

it8720-isa-0290
Adapter: ISA adapter
in0:         +0.91 V  (min =  +0.00 V, max =  +4.08 V)   
in1:         +1.52 V  (min =  +0.00 V, max =  +4.08 V)   
in2:         +3.31 V  (min =  +0.00 V, max =  +4.08 V)   
+5V:         +2.99 V  (min =  +0.00 V, max =  +4.08 V)   
in4:         +0.35 V  (min =  +0.00 V, max =  +4.08 V)   
in5:         +3.18 V  (min =  +0.00 V, max =  +4.08 V)   
in6:         +0.40 V  (min =  +0.00 V, max =  +4.08 V)   
5VSB:        +3.06 V  (min =  +0.00 V, max =  +4.08 V)   
Vbat:        +3.25 V
fan1:       1360 RPM  (min =   10 RPM)
fan2:       1278 RPM  (min =    0 RPM)
fan3:       1061 RPM  (min =    0 RPM)
fan4:          0 RPM  (min =    0 RPM)
temp1:       +40.0℃  (low  = +127.0℃, high = +127.0℃)  sensor = thermistor
temp2:       +43.0℃  (low  = +127.0℃, high = +70.0℃)  sensor = thermal diode
temp3:       +50.0℃  (low  = +127.0℃, high = +127.0℃)  sensor = thermistor

温度に関しては、Core 0~3で4コアCPUの、temp1~3でマザーボードの情報が取得できています。temp1~3がマザーボードのどの箇所にあるセンサーを参照しているのかは、マザーボードのマニュアルを読んで推定する必要があります。

ハードディスクの場合

ハードディスクも温度センサーを持っています。ハードディスクには故障情報を取得するためのS.M.A.R.T.(Self-Monitoring, Analysis and Reporting Technology)という仕組みが実装されており、そのひとつとして温度情報も取得することができます。

この情報を利用する場合は、パッケージ「hddtemp」をインストールしてください。インストールを開始すると以下の画面が表示されます。これは、システム起動時にhddtempを自動起動するかどうかの設定となりますので、チェックボックスにチェックを入れて進んでください。

図1 パッケージ「hddtemp」インストール時に表示される設定画面
図1 パッケージ「hddtemp」インストール時に表示される設定画面

インストールが終了したら、システムを再起動して下さい。

ハードディスクの温度を表示するには、端末上で以下のコマンドを実行します。⁠/dev/sda」の値は、システムに搭載しているハードディスクに合わせ、適宜変更してください。

$ gksudo hddtemp /dev/sda;
/dev/sda: WDC WD800JD-55MSA1: 33℃

デスクトップ環境への表示

ここまでで、温度情報を取得するための設定が終了しました。これらの情報を表示するのに端末だけでは少々不便ですので、デスクトップ環境に表示するソフトウェアを設定してみましょう。

Unityの場合

実はUbuntu 11.04からUbuntu標準のデスクトップ環境となったUnityには、温度表示のための仕組みがまだ設けられていません。そのため、AWN(Avant Window Navigator)といった、単独で起動するソフトウェアを用意する必要があります。

図2 AWNはいわゆる「ドック」という形状のインターフェースを提供するソフトウェア
図2 AWNはいわゆる「ドック」という形状のインターフェースを提供するソフトウェア

現在、Unityのindicatorの仕組みを利用して温度表示をするソフトウェアが開発中で、PPAからベータ版を試すことができます。今後、Unity環境に関しては改善が進むと思います。

GNOME2デスクトップ環境の場合

UbuntuはUnityを採用する前まで、GNOME2の提供する旧来のデスクトップ環境(表示上は「Ubuntuクラシック」となっている)を利用していました。筆者が常用しているUbuntu Studioは11.04でもこのデスクトップ環境を利用しており[2]⁠、パネルに表示するGNOME Sensors Appletを使い続けることができます。これは、パッケージ「sensors-applet」をインストールし、パネルに追加することで利用できます。

図3 画面上部のGNOMEパネルに表示されているのがGNOME Sensors Applet。表示項目は自由に設定でき、筆者は左からCPU0、ルートパーティションの入ったハードディスク、グラフィックカードそれぞれの温度を表示している
図3 画面上部のGNOMEパネルに表示されているのがGNOME Sensors Applet。表示項目は自由に設定でき、筆者は左からCPU0、ルートパーティションの入ったハードディスク、グラフィックカードそれぞれの温度を表示している

KDE4の場合

KDE4の場合は、標準でインストールされるパッケージ「plasma-widgets-workspace」に温度表示ウィジェットが含まれています。パネルに「ハードウェアの温度」ウィジェットを追加し、表示項目を設定してください。

図4 システムモニタからも、ハードウェアの温度を表示できる
図4 システムモニタからも、ハードウェアの温度を表示できる

Xfce4デスクトップ環境の場合

Xfce4の場合は、パッケージ「xfce4-sensors-plugin」でインストールされる「センサプラグイン」をパネルに追加することで、温度表示することができます。

図5 センサプラグイン
図5 センサプラグイン

おすすめ記事

記事・ニュース一覧