ファンスピード制御

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

関連記事

ファン制御はシステムに様々な恩恵をもたらします。CPU があまり使われていないときにファンを完全に停止することでシステムを静かにしたり電力を節約することが可能です。

警告: 負担が重いときにファンを完全に停止するとハードウェアに致命的なダメージを与える可能性があります。警告しましたよ。

概要

ノート: ノートパソコンを使っている場合はハードウェアに搭載されている冷却システムがどのように機能しているのかに注意してください。ノートパソコンによっては CPU と GPU の両方がシングルファンで同時に冷やされていたり、あるいはファンが2個存在していて、片方は CPU と GPU を同時に冷やしつつ、もう片方は CPU だけを冷やしていたりします。場合によっては、冷却アーキテクチャに互換性がないために Fancontrol スクリプトを利用できないことがあります (例: GPU と CPU で同じファンを使用している)。詳しくは こちら を参照してください。

デスクトップやノートパソコンのファンをコントロールする方法は複数存在します。必要に応じて選択してください:

  • Fancontrol (lm-sensors) - ファンの速度を設定するスクリプト (Bash で書かれています)。デスクトップやシングルファンのディスクリートグラフィックカードが載っていないノートパソコンに適しています。
  • NoteBook Fan Control (NBFC) - ノートパソコンのファンを制御するクロスプラットフォームのソリューション。C# で書かれており Mono ランタイムで動作します。Fancontrol でサポートされていない最新のノートパソコンに適しています。
  • Dell ノートパソコン - 一部の Dell のノートパソコンで使用できるファン制御デーモン。
  • ThinkPad ノートパソコン - 一部の ThinkPad ノートパソコンで使用できるファン設定。
  • Asus ノートパソコン - Fancontrol や手動制御で一部の Asus ノートパソコンを設定。

Fancontrol (lm-sensors)

lm_sensors に含まれている fancontrol を使うことで CPU やケースのファンの速度や音をコントロールできます。

新しいマザーボードの場合、サポートが Linux カーネルにまだ入っていない可能性があります。公式の lm-sensors デバイス表 を確認して、そのようなマザーボードの場合、実験的なドライバーが使えるかどうか見て下さい。

fancontrol に必要なモジュールをロードするのに lm_sensors.service を使うのは推奨されません。代わりに、モジュールを /etc/modules-load.d/load_these.conf に手動で記述してください。モジュールがロードされる順番によって hwmon に必要なシンボリックリンクが作成される順番が決まるからです。言い換えれば、lm_sensors.service を使用すると起動する度に何が起きるかわからなくなり、一貫性の観点からファンコントロールの設定ファイルが無意味になってしまいます。

/etc/conf.d/lm_sensors でモジュールを確認できます。モジュールが存在しない場合、root で sensors-detect を実行してください。modules-load.d ファイルでは1行毎に1つのモジュールを記述します。モジュールを指定すると再現可能な順番が作成されます。設定ファイルで絶対的なデバイス名を使用するという方法もあります [1]

lm-sensors

lm_sensors をセットアップしてください。

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

[...]

it8718-isa-0290
Adapter: ISA adapter
Vcc:         +1.14 V  (min =  +0.00 V, max =  +4.08 V)   
VTT:         +2.08 V  (min =  +0.00 V, max =  +4.08 V)   
+3.3V:       +3.33 V  (min =  +0.00 V, max =  +4.08 V)   
NB Vcore:    +0.03 V  (min =  +0.00 V, max =  +4.08 V)   
VDRAM:       +2.13 V  (min =  +0.00 V, max =  +4.08 V)   
fan1:        690 RPM  (min =   10 RPM)
temp1:       +37.5°C  (low  = +129.5°C, high = +129.5°C)  sensor = thermistor
temp2:       +25.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermal diode

出力に CPU ファンの RPM の値が表示されない場合、fan divisor を増やす必要があります。ファンの速度が表示され0よりも高い場合は、次のステップにスキップしてください。

fan_div の増加

sensors の出力の1行目は温度や電圧を調べるためにマザーボードによって使用されるチップセットです。

/etc/sensors.d/ にファイルを作成してください:

/etc/sensors.d/fan-speed-control.conf
chip "coretemp-isa-*"
set fanX_div 4

coretemp-isa- はチップセットの名前に、X は変更する CPU の番号に置き換えてください。

ファイルを保存して、root で実行:

# sensors -s

このコマンドは設定ファイルをリロードします。もう一度 sensors を実行して、RPM が正しく読み出されたか確認して下さい。読み出されない場合は、divisor を 8, 16, 32 と増やしていってください。

設定

ノート: 経験者はこのセクションをスキップして /etc/fancontrol を自分で書くことで、ファンが最大速度で回らないようにすることができます。

sensors を正しく設定できたら、pwmconfig を実行してテストを行い、速度のコントロールを設定します。pwmconfig の手順にしたがって基本速度をセットアップしてください。デフォルトの設定オプションで新しいファイル /etc/fancontrol が作成されるはずです。

調整

ノート: 環境によっては、スクリプトがエラーを報告することがあります。エラーは無視して問題ありません。問題は PWM が上下するまでスクリプトが待てないことです。

生成された設定をもっと細かく調整したい場合、以下が設定ファイルの例です:

INTERVAL=10
DEVPATH=hwmon0=devices/platform/coretemp.0 hwmon2=devices/platform/w83627ehf.656
DEVNAME=hwmon0=coretemp hwmon2=w83627dhg
FCTEMPS=hwmon0/device/pwm1=hwmon0/device/temp1_input
FCFANS= hwmon0/device/pwm1=hwmon0/device/fan1_input
MINTEMP=hwmon0/device/pwm1=20
MAXTEMP=hwmon0/device/pwm1=55
MINSTART=hwmon0/device/pwm1=150
MINSTOP=hwmon0/device/pwm1=105
  • INTERVAL: デーモンが CPU 温度を問い合せてファンの速度を調整する頻度。INTERVAL は秒数で指定します。

設定ファイルの残りの部分は設定オプションごとに (少なくとも) 2つの値に分けられます。それぞれの設定オプションではまずファンの速度を設定するのに書き出される PWM デバイスが指定されており、次の"フィールド"が実際に設定する値となっています。これによって複数のファンと温度の監視・コントロールが可能です。

  • FCTEMPS: CPU 温度を読み込むための温度インプットデバイス。上記の例では /sys/class/hwmon/hwmon0/device/temp1_input
  • FCFANS: (温度と同じように) /sys/class/hwmon/hwmon0/device/fan1_input で読み込むことができる、現在のファン速度。
  • MINTEMP: CPU ファンを止める温度 (°C)。効率的な CPU はアイドル状態のときファンを必要としません。安全だということが確認できる温度の範囲内で設定してください。この値を0に設定するのは推奨されません。ハードウェアが壊れてしまう可能性があります。
  • MAXTEMP: ファンを最大速度で回す温度 (°C)。CPU が壊れたりシャットダウンする温度から10か20ほど低い温度に設定するべきです (°C)。この値を MINTEMP に近づけるとファンがずっと高回転することになります。
  • MINSTOP: ファンが回転を停止する PWM の値。ファンごとに値を少し変えます。/sys/class/hwmon/hwmon0/device/pwm1 に異なる値を echo (0 から 255 の間) して CPU ファンを監視することで調整できます。CPU ファンが停止したら、その値を使って下さい。
  • MINSTART: ファンが回転をもう一度開始する PWM の値。大きな電圧が必要になるので普通は MINSTOP より高い値にします。

さらに設定ファイルが最新であることを fancontrol が検証するのに必要な2つの設定があります。設定名とイコール記号で始まって、スペースで区切られた hwmon-class-device=setting のグループが後ろに付く行です。設定のどこかに使用する hwmon クラスデバイスごとに設定を指定しないと、fancontrol は動作しません。

  • DEVPATH: 物理デバイスを設定。次のコマンドを実行することで確認できます:
readlink -f /sys/class/hwmon/[your-hwmon-device]/device | sed -e 's/^\/sys\///'
  • DEVNAME: デバイスの名前を設定。次を実行して下さい:
$ sed -e 's/[[:space:]=]/_/g' /sys/class/hwmon/[your-hwmon-device]/device/name
ヒント:
  • MAXPWMMINPWM オプションを使ってファンの速度の範囲を制限できます。詳しくは fancontrol のマニュアルページを見て下さい。
  • モジュールのロードのタイミングによって、再起動で DEVPATH だけでなく温度センサーのパスも変わることがあります (hwmon0/device/temp1_input が hwmon0/temp1_input になる)。これは大抵カーネルの更新時に起こります。システムログをチェックしてトラブルメーカーが誰なのか確認して下さい: # systemctl status fancontrol.service。そして設定ファイルを適切に修正して下さい。

fancontrol

ノート: カーネルのアップグレードをしたときに fancontrol を実行するとデバイスパスに関するエラーが表示されることがあります。sensors-detect を再度実行してシステムを再起動することで問題は解決します。

fancontrol を実行するには:

# /usr/bin/fancontrol

正しく設定できていればエラーが表示されずにシステムファンのコントロールが開始されます。このコマンドを実行した後、すぐにシステムファンが遅くなるのが聞こえるはずです。

fancontrol を起動時に自動的に動作させるには、fancontrol.service有効化してください。

非公式の GUI として fancontrol-guiAUR または fancontrol-kcmAURインストールして使うこともできます。

NBFC

NBFC はノートパソコンのためのクロスプラットフォームのファン制御ソリューションです。強力な設定システムを備えており、最新のノートパソコンを含めて様々なモデルのノートパソコンにあわせて調整できます。

インストール

NBFC は nbfcAUR または nbfc-gitAUR パッケージでインストールできます。インストールしたら nbfc.service を起動・有効化してください。

ヒント: 最新の設定プロファイルが含まれている開発版 (nbfc-gitAUR) を使うことを推奨します。nbfcAUR パッケージのプロファイルは古かったり最新のノートパソコンに対応していなかったりすることがあります。

設定

NBFC にはあらかじめプロファイルが付属しています。プロファイルは /opt/nbfc/Configs/ ディレクトリにインストールされます。プロファイルを使うときは、拡張子を付けずに正確なプロファイル名を使ってください (例えば some profile.xml なら "some profile" となります)。

NBFC が推奨するプロファイルが存在しないか確認:

$ nbfc config -r

プロファイルが存在した場合、プロファイルを使ってみてファンの速度がどのように管理されるか確認してみてください。例:

$ nbfc config -a "Asus Zenbook UX430UA"

推奨モデルが存在しない場合、NBFC の git リポジトリ/opt/nbfc/Configs/ を開いて同じメーカーから製造された類似機種が存在しないか確認してください。例えば Asus Zenbook UX430UQ の場合、Asus Zenbook UX430UA の設定は全く機能しませんが (ファンが常に停止した状態になります)、Asus Zenbook UX410UQ の設定は上手く機能します。

オプションを確認するには nbfc を実行してください。詳しい情報は 上流のページ を参照してください。

Dell ノートパソコン

i8kutilsAUR は Dell Inspiron や Latitude ノートパソコンでファンの速度を制御するデーモンです。dell_smm_hwmon ドライバー (旧名 i8k) による /proc/i8k インターフェイスが利用されます。ノートパソコンの機種によって結果は変わります。

インストール

ファンの速度を制御するメインのパッケージは i8kutilsAUR です。必要に応じて以下のパッケージもインストールしてください:

  • (--daemon オプションを使用して) i8kmon をバックグラウンドサービスとして実行するには tcl のインストールが必要です。
  • X11 デスクトップアプレットを実行するには tktcl も必要です。

設定

デフォルトでは i8kmon は CPU の温度やファンの速度を受動的に監視することしかしません。ファン速度の制御を有効にするには、--auto オプションを使用して実行するか、あるいは /etc/i8kutils/i8kmon.conf で永続的にオプションを有効にしてください:

set config(auto)       1

同じ設定ファイルでファンの速度が変化する温度を調整できます。使用できるファンの速度は3つだけです (high, low, off)。以下のようになっているセクションを見てください:

set config(0)  {{0 0}  -1  55  -1  55}
set config(1)  {{1 1}  45  75  45  75}
set config(2)  {{2 2}  65 128  65 128}

上記の例では CPU 温度が 55 °C に達したらファンを低速で回し始め、75 °C で高速に切り替えます。65 °C まで温度が落ちたら低速に戻り、45 °C になったらファンは完全に停止します。

BIOS によるファンスピード制御を無効化

i8kmon で制御できない場合は BIOS によるファンの速度コントロールをオフにする必要があります。ノートパソコンによっては smm ユーティリティを使ってオフにできます。このユーティリティは I/O ポートに直接書き込みを行ってプロセッサの System Management Mode を呼び出すため非常に危険です。自己責任で使ってください。

smm は手動でコンパイル・インストールする必要があります。64ビット環境では、gcc-multilib が必要です。i8kutils のソースにある smm.c ファイルを見つけてコンパイルしてください:

$ gcc -m32 -o smm smm.c

BIOS によるファンの速度制御を無効化するには、以下のコマンドを root で実行:

# ./smm 30a3

再度有効化するには:

# ./smm 31a3
ノート: 上記のコマンドは BIOS による他の電源管理機能も無効化してしまうことがあり、電源ボタンが押されたことを Linux から認識できなくなったりする可能性があります。

サービスとしてインストール

以下のようなユニットファイルを使うことで systemd サービスとして i8kmon を自動で起動できます:

/etc/systemd/system/i8kmon.service
[Unit]
Description=i8kmon

[Service]
#ExecStartPre=/usr/bin/smm 30a3  # uncomment to disable BIOS fan control
#ExecStopPost=/usr/bin/smm 31a3  # ... and re-enable it afterwards
ExecStart=/usr/bin/i8kmon -d
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

ThinkPad ノートパソコン

デフォルトでは、組み込みコントローラ (EC) がファンの速度を制御します。速度が遅すぎる、または音がうるさい場合、デーモンを使用することで制御を乗っ取ることができます。ただし危険性も伴います: あなたが責任を持って温度をコントロールしなければならなくなります。過度の高温はノートパソコンの寿命が縮まったり、致命的なダメージを与える可能性があります。安全上の理由からファンの制御はデフォルトで無効になっています。ファンの制御を有効にするには、カーネルパラメータfan_control=1 を追加してください。

現在 AUR からインストールすることができるファン制御デーモンは simpfand-gitAURthinkfanAUR です。

インストール

thinkfanAUR をインストールしてください。インストールしたら、パッケージに含まれているファイルを確認してください:

# pacman -Ql thinkfan

thinkfan パッケージは以下の内容の /usr/lib/modprobe.d/thinkpad_acpi.conf をインストールするため、ファン制御はデフォルトで有効になります:

options thinkpad_acpi fan_control=1

ファンのレベルを確認するには:

$ su
# modprobe thinkpad_acpi
# cat /proc/acpi/ibm/fan

デフォルトではファンレベルが "auto" になっているはずです。/proc/acpi/ibm/fan に設定したいレベルを echo することで手動でファンの速度を制御できます。thinkfan デーモンは自動的に設定を行います。

サンプル設定ファイルのどれか (例: /usr/share/doc/thinkfan/examples/thinkfan.conf.simple) を /etc/thinkfan.conf にコピーして、必要に応じて編集してください。このファイルではどのセンサーを読み込むのか指定したり、ファンを制御するのに使用するインターフェイスを指定します。/proc/acpi/ibm/fan が使用できない場合、汎用の hwmon センサーが使われるように以下のように指定する必要があります:

hwmon /sys/devices/virtual/thermal/thermal_zone0/temp

実行

thinkfan を手動で (root で) 実行して設定をテストできます:

# thinkfan -n

他のプログラムを実行してみて負担によってどのようにファンが変わるか確認してください。

適切に設定できたら、以下のコマンドで thinkfan コマンドを起動できます (root で実行):

# systemctl start thinkfan

もしくはシステムの起動時に自動的にロードするには:

# systemctl enable thinkfan

消滅した古いパッケージ

tpfandAUR[リンク切れ: アーカイブ: aur-mirror]tpfand-no-halAUR[リンク切れ: アーカイブ: aur-mirror] (HAL 不要版) はすでに開発が止まっており、インストールできません。AUR に存在していた GTK+ フロントエンドの tpfan-adminAUR[リンク切れ: アーカイブ: aur-mirror] パッケージは温度の監視や分岐点を視覚的に変更することができました。

tpfand が開発されなくなったことにより、tpfanco と呼ばれるフォークが存在していました (実行ファイルの名前は tpfand と同じです): tpfanco-svnAUR[リンク切れ: アーカイブ: aur-mirror]

tpfand の設定ファイルは /etc/tpfand.conf でした (tpfanco も同じファイルを使用します)。

さらに、AURtpfand-profilesAUR[リンク切れ: アーカイブ: aur-mirror] パッケージは様々な thinkpad モデルの最新のファンプロファイルを提供していました。

Asus ノートパソコン

このセクションでは Fancontrol (lm-sensors) の Asus ノートパソコンでのドライバー設定について説明します。

カーネルモジュールの概要

  • asus-nb-wmi は Linux カーネルに含まれているカーネルモジュールで、Asus 製ノートパソコンでは自動的にロードされます。制御できるのはシングルファンだけで、ファンがふたつある場合、制御することはできません。このモジュールをブラックリストに追加するとキーボードバックライトが動作しなくなります。
  • asus_fan は一部の古い Asus ノートパソコンのファンを制御できるカーネルモジュールです。最新のモデルでは機能しません。

設定ファイルでは sysfs ファイルのフルパスを使います (例: /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1)。hwmon1 という名前は再起動した後に他の番号に変わってしまう可能性があるためです。Fancontrol (lm-sensors)Bash で書かれているため、設定ファイルではフルパスを使うことが可能です。完全な /etc/fancontrol の設定例は ASUS N550JV#Fan control を参照してください。

asus-nb-wmi

asus-nb-wmi カーネルモジュールはカーネルに含まれているため特にパッケージのインストールは必要ありません。

以下が制御するコマンドです。ファンを制御できるかどうか確認してください:

# echo 255 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1           # Full fan speed (Value: 255)
# echo 0 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1             # Fan is stopped (Value: 0)
# echo 2 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[[:print:]]*/pwm1_enable     # Change fan mode to automatic
# echo 1 > /sys/devices/platform/asus-nb-wmi/hwmon/hwmon[[:print:]]*/pwm1_enable      # Change fan mode to manual

上記のコマンドでファンを制御できたら #pmwconfig で設定ファイルを生成に進んでください。

asus_fan

asus-fan-dkms-gitAUR をインストールしてください。カーネルモジュールをロード:

# modprobe asus_fan
ノート: 何らかの理由で上記のコマンドが失敗することがあります。大抵は initramfs を再生成してシステムを再起動すれば問題は解決します。

ファンを制御できるかどうか確認してください:

# echo 255 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1          # Full CPU fan speed (Value: 255)
# echo 0 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1            # CPU fan is stopped (Value: 0)
# echo 255 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1          # Full GFX fan speed (Value: 255)
# echo 0 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1            # GFX fan is stopped (Value: 0)
# echo 2 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1_enable     # Change CPU fan mode to automatic
# echo 1 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm1_enable     # Change CPU fan mode to manual
# echo 2 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm2_enable     # Change GFX fan mode to automatic
# echo 1 > /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/pwm2_enable     # Change GFX fan mode to manual
# cat /sys/devices/platform/asus_fan/hwmon/hwmon[[:print:]]*/temp1_input          # Display GFX temperature (will always be 0 when GFX is disabled/unused)

問題なく機能するようであれば、起動時にカーネルモジュールをロードするように設定すると良いでしょう:

/etc/modules-load.d/asus_fan.conf
# Load asus_fan module on boot:
asus_fan

#pmwconfig で設定ファイルを生成に進んでください。

pmwconfig で設定ファイルを生成

pwmconfig で設定ファイルを生成したときに There are no working fan sensors, all readings are 0 というエラーが表示される場合、コンソールを開いて以下のコマンドを実行してください:

# watch -n 1 "echo 2 > /sys/devices/platform/<kernel_module>/hwmon/hwmon[[:print:]]*/pwm1_enable"

asus_fan カーネルモジュールを使っていてファンが2個搭載されている場合、別のコンソールで以下のコマンドを実行してください:

# watch -n 1 "echo 2 > /sys/devices/platform/<kernel_module>/hwmon/hwmon[[:print:]]*/pwm2_enable"

最後に、別のコンソールで以下のコマンドを実行:

# pwmconfig

設定ファイルが生成されたら、watch コマンドを実行しているコンソールは止めてください。Fancontrol (lm-sensors) に進んでください。