[Arch Linux] ファンの回転速度を fancontrol で制御する

Linux
この記事は約7分で読めます。

※当サイトは広告収入で運営されているため、広告が表示される場合があります。

死蔵してた NEC Express5800/S70 type hf を引っ張りだして Arch Linux をインストールしました。オンボードでサウンドカードもついてるし、12000円の商品にしては中々のものです。

しかし Express5800 は腐ってもサーバなので冷却ファンの回転数が高く、音がすさまじいです。対策として騒音源であるリアの4cmファンを取り外し、他のファンをマザボードではなく fancontrol に制御させるよう設定しました。

ここでは fancontrol をどのように設定をしたのかメモを残します。

昨今のPCはマザーボードの BIOS からファンスピードを制御できることがほとんどですが、 BIOS の機能が制限されているサーバ用途のマシンでは有効な設定だと思います。

Fan speed control -Arch Linux

lm_sensors をインストールする

ハードウェアのセンサから情報をもらってくるプログラム lm_sensors をインストールします。

$ sudo pacman -S lm_sensors

温度センサの検知する

デバイスに搭載されている温度センサーを検知し、センサを読み込むための設定ファイルを作ります。

# sensors-detect

選択肢がたくさん出てきますが Enter キーを押していけばほとんどの場合は問題ありません。むしろそのほうが安全です。最後に /etc/conf.d/lm_sensors という設定ファイルが生成される。

動作確認

センサから情報を読み取れるか確認します。

$ sensors

出力結果は下記のようになります。

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0: +48.0°C (high = +82.0°C, crit = +102.0°C)
Core 0: +43.0°C (high = +82.0°C, crit = +102.0°C)
Core 1: +45.0°C (high = +82.0°C, crit = +102.0°C)
 
nct6776-isa-0a30
Adapter: ISA adapter
Vcore: +1.05 V (min = +0.25 V, max = +1.53 V)
in1: +1.22 V (min = +1.08 V, max = +1.32 V)
AVCC: +3.34 V (min = +2.98 V, max = +3.63 V)
+3.3V: +3.33 V (min = +2.98 V, max = +3.63 V)
in4: +1.02 V (min = +0.90 V, max = +1.10 V)
in5: +1.01 V (min = +0.90 V, max = +1.10 V)
in6: +0.72 V (min = +0.00 V, max = +0.00 V) ALARM
3VSB: +3.34 V (min = +2.98 V, max = +3.63 V)
Vbat: +3.25 V (min = +2.70 V, max = +3.63 V)
fan1: 1048 RPM (min = 0 RPM)
fan2: 2295 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
SYSTIN: +38.0°C (high = +65.0°C, hyst = +0.0°C) sensor = thermistor
CPUTIN: +123.5°C (high = +80.0°C, hyst = +75.0°C) ALARM sensor = CPU diode
AUXTIN: +42.5°C (high = +80.0°C, hyst = +75.0°C) sensor = thermistor
PECI Agent 0: +45.0°C (high = +80.0°C, hyst = +75.0°C)
(crit = +100.0°C)
PCH_CHIP_TEMP: +0.0°C
PCH_CPU_TEMP: +0.0°C
PCH_MCH_TEMP: +0.0°C
intrusion0: ALARM
intrusion1: ALARM
beep_enable: disabled

ファンの検出と設定

pwmconfig を実行し fancontrol の設定ファイル /etc/fancontrol を生成します。

# pwmconfig

選択肢にはマニュアルで設定するように y を選択したら搭載されているファンの出力テストが行われます。最後にファイルを保存することを忘れずに。

設定ファイルを編集・確認する

pwmconfig で自動生成されたファイルは /etc/fancontrol として保存されています。

初期設定だと MINSTART 0 の状態でも1000回転するように設定されています。調べた限り当機種(NEC Express5800/S70 type hf)のクーラーが完全に停止することはないので。

INTERVAL=10
DEVPATH=hwmon0=devices/platform/coretemp.0 hwmon1=devices/platform/nct6775.2608
DEVNAME=hwmon0=coretemp hwmon1=nct6776
FCTEMPS=hwmon1/pwm2=hwmon0/temp1_input hwmon1/pwm1=hwmon0/temp1_input
FCFANS=hwmon1/pwm2=hwmon1/fan2_input hwmon1/pwm1=hwmon1/fan1_input
MINTEMP=hwmon1/pwm2=45 hwmon1/pwm1=45
MAXTEMP=hwmon1/pwm2=69 hwmon1/pwm1=69
MINSTART=hwmon1/pwm2=0 hwmon1/pwm1=0
MINSTOP=hwmon1/pwm2=0 hwmon1/pwm1=0

6行目からが重要で MINTEMPMAXTEMP では最後の数値が何度でファンを回し始めたいか、何度で最大回転させたいかといじることができます。 例) MINTEMP=hwmon1/pwm2=45 赤文字をいじります。

ファン制御サービスを起動させる

Systemd でファンコン・サービスを制御します。

fancontrol を起動する。

# systemctl start fancontrol

fancontrol 停止する。

#  systemctl stop fancontrol

systemdfancontrol をブート時に起動させる設定。

# systemctl enable fancontrol

無効化させるには下記のコマンドを実行

# systemctl disable fancontrol

サスペンド時にファン制御サービスを再起動させる

マシンのサスペンドすると fancontrol が正常に作動しなくなります。レジューム時に再起動し再び上記で作成した設定ファイルを読み込みようにします。

/etc/systemd/system/root-resume.service として下記のスクリプトを保存。サービス名は既存のものと被らなければなんでも良いです。

[Unit]
Description=Local system resume actions
After=suspend.target
[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart fancontrol
[Install]
WantedBy=suspend.target

上記のサービスをマシンブート時に起動する設定をします。

# systemctl enable root-resume.service

おわり

参考サイト
re-run after suspend · Issue #1 · nicolai-rostov/asus-fancontrol · GitHub:

コメント

タイトルとURLをコピーしました