ファンスピード制御
関連記事
lm_sensors に含まれている fancontrol を使うことで CPU やケースのファンの速度や音をコントロールできます。この記事ではユーティリティの設定とセットアップについて扱います。
Dell のノートパソコンでは、i8kutils が使えます。
目次
センサードライバー
新しいマザーボードの場合、サポートが 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 と増やしていってください。
設定
sensors を正しく設定できたら、pwmconfig
を実行してテストを行い、速度のコントロールを設定します。pwmconfig
の手順にしたがって基本速度をセットアップしてください。デフォルトの設定オプションで新しいファイル /etc/fancontrol
が作成されるはずです。
調整
生成された設定をもっと細かく調整したい場合、以下が設定ファイルの例です:
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/hwmon-device/device | sed -e 's/^\/sys\///'
DEVNAME
: デバイスの名前を設定。次を実行して下さい:
$ sed -e 's/[[:space:]=]/_/g' /sys/class/hwmon/hwmon-device/device/name
fancontrol
fancontrol を実行するには:
# /usr/bin/fancontrol
正しく設定できていればエラーが表示されずにシステムファンのコントロールが開始されます。このコマンドを実行した後、すぐにシステムファンが遅くなるのが聞こえるはずです。
fancontrol を起動時に自動的に動作させるには、fancontrol.service
を有効化してください。
i8kutils
i8kutilsAUR は Dell Inspiron や Latitude ノートパソコンでファンの速度を制御する手段を提供します。dell_smm_hwmon
ドライバー (旧名 i8k
) による /proc/i8k
インターフェイスが利用されます。ノートパソコンの機種によって結果は変わります。
依存パッケージ
(--daemon
オプションを使用して) i8kmon
をバックグラウンドサービスとして実行するには tcl のインストールが必要です。X11 デスクトップアプレットを実行するには tk も必要です。
設定
デフォルトでは 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
サービスとしてインストール
以下のようなユニットファイルを使うことで 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