試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

w83627ehf系チップ搭載マザーボードでCPUファンの回転数を制御する(Linux 2.6.35時点・後半)

w83627ehf系チップ搭載マザーボードでCPUファンの回転数を制御する(Linux 2.6.35時点・前半)」の続き。

実際

手元の環境(A785GMH/128MでAthlon II X3 445を使用・CPUファンはリテール)ではBIOS設定で低温時のファン回転レベルを最低にしていても、CPUの低温時に

$ cat /sys/devices/platform/w83627ehf.*/pwm2_stop_output
26

まだ回転数を下げる余地があることが分かった(下限が「1」のところが「26」になっている)ため、この値を

$ sudo sh -c "echo 1 > $(ls -d /sys/devices/platform/w83627ehf.*)/pwm2_stop_output"

のように書き換えたところ、1600-1700RPM程度だったファンの回転数が1100RPM前後まで下がるようになった。この後でCPUに負荷をかけてみたところ、しばらくして温度が上がってきたところでファンの回転数が自動的に上がり、その後負荷を下げると時間の経過とともに回転数は1100RPM前後まで下がってくる(低温時/高温時の両方で動作に問題がない)のを確認できた。
OS起動時に自動的にこの回転数指定を有効にするにはディストリごとのOS起動時の自動実行スクリプト(/etc/rc.localなど)に

sh -c "echo 1 > $(ls -d /sys/devices/platform/w83627ehf.*)/pwm2_stop_output"

のように書き込むとよい。
休止状態を用いる場合は復帰後に回転数が元に戻ってしまうため、上記処理が復帰後に自動的に実行されるようにする必要があるが、hibernate-scriptで/etc/hibernate/common.confにOnResumeの記述としてコマンドを記述してもうまくいかなかった(「OnResume 01」でなるべく後にしてもダメだった)ので、値の書き込み処理を記述したスクリプト(管理者権限で動かす)とhibernate-scriptの実行を含んだスクリプト(一般ユーザ権限で動かす)の2つを用意して後者のスクリプトから前者のスクリプトが実行される形にした。一般ユーザが実際に実行するのは後者のスクリプトとなる。
[任意]ファイル名: setup-cpufan.sh

#! /bin/sh
echo 1 > $(ls -d /sys/devices/platform/w83627ehf.*)/pwm2_stop_output

[任意]ファイル名: hibernate-wrapper.sh

#! /bin/sh
sudo /usr/sbin/hibernate

# 必要に応じてここに色々な処理やsleepによるタイミング調整を記述する
# 例:「sleep 5」

sudo [setup-cpufan.shの場所]

このようにする場合、値の書き込みスクリプトhibernateコマンドの場所に対してsudoの設定で

[ユーザ名] ALL=(root) NOPASSWD: /usr/sbin/hibernate
[ユーザ名] ALL=(root) NOPASSWD: [setup-cpufan.shの場所]

パスワード無しで実行できるようにしておくと便利。
hibernate-scriptの実行後に続けてスクリプトの実行を記述するとタイミングの関係でうまく動かないことがあるので、その場合はsleepコマンド(引数の秒数は数秒間の指定でよい)をhibernateと値の書き込みスクリプトの実行との間に挟むか、他に復帰後に自動実行したい処理がある場合はそれが先に実行されるように記述するなどして調整する。

関連記事:

使用したバージョン: