Ubuntuでファンを制御する

静音化に取り組んでるサブ機だけど、静かなるほど他の音が気になる。静音化のジレンマだねぇ。と、感慨にふけっている場合ではなく、かすかに聞こえるCPUファンの音が気になり始めた。これはひとつファン静音化抵抗をはさむか、と思ったら4ピンのファンだった。どうせPWM制御だったらソフトウェアでできるはず・・・

って、もうCool’n’Quietで行われているんだけど、ファンの回転数がちょっと高くて、1400rpmあたりを前後している。これで33℃くらい。もうちょっと温かくていいから、ファン回転数を下げられないか・・・ それより、そもそもUbuntuでファンの回転数をもっと詳細に見られるようにすべきなんじゃないか。

ということで、KsensorsというGUIでPCの諸々の情報を監視できるパッケージをSynapticで入れてみた。これを入れるとlm-sensorsというコマンドラインのPC情報監視ツールおよびそれに関連する諸々のライブラリ等がインストールされる。でも、インストールするだけではなぜかKsensorsはメニューに現れない(再起動したとしても)。

そこでググって見たところ、Ubuntu Forumにファンのソフトウェア制御も含めた親切な解説があった。この説明をベースにいろいろとやってみて、うまく行った(と思われる)ものを書きとめておく。

まず、$ sudo sensors-detectを実行して、PC情報を取得するセンサーデバイスを特定する。と言ってもただひたすら「y」と答えていくだけ。最後の「/etc/modprobe.d/local に設定を追加する」と聞いてくるので、ここも「y」。ここで再起動すると良さそう。

再起動した後たぶんここで$ sudo sensorsとすると、各センサー情報が表示されるはず。うまく行かないマザーボードもあるらしく、ここで何も表示されないとかなりはまると思う。幸いここは直にファン回転数、温度等正常に表示されたのでひと安心。

安心したのもつかの間、/etc/sensors.conf が無い。/etc/sensors3.conf ならある。なんだか分からないけどとりあえずコピーする。$ sudo cp /etc/sensors3.conf /etc/sensors.conf

次はいよいよファン回転数のソフトウェア制御。$ sudo pwmconfigを実行して、sensorsコマンドで表示されたファンセンサーデバイスとCPU温度の紐付けを行う。ちなみに、このツールはなぜかファンの回転停止を半自動的に求めようとするんだけど失敗する。これはマザーボード上でもファン回転数を制御しようとしていてそれが影響しているのか、PWMのファンには相性が悪いのか分からない。まあ、とりあえず/etc/fancontrol が作られているはずなので、これを調整していく。

その前に、$ sudo fancontrolを実行してソフトウェア制御が可能か試してみる。うまくいったんだけど、回転数はまだ若干高い。CPU温度が35℃あたりで1200rpm。CPU温度がもっと上がれば回転数もそれなりに上がってくれるので動作はちゃんとしているっぽい。そこでconfigファイルの調整。

ここは色々と試行錯誤したけど、/etc/fancontrolの調整後の内容がこちら。INTERVAL=5
FCTEMPS=hwmon1/device/pwm3=hwmon1/device/temp2_input hwmon1/device/pwm1=hwmon1/device/temp2_input
FCFANS=hwmon1/device/pwm3=hwmon1/device/fan1_input hwmon1/device/pwm1=hwmon1/device/fan1_input
MINTEMP=hwmon1/device/pwm3=30 hwmon1/device/pwm1=30
MAXTEMP=hwmon1/device/pwm3=50 hwmon1/device/pwm1=50
MINSTART=hwmon1/device/pwm3=50 hwmon1/device/pwm1=50
MINSTOP=hwmon1/device/pwm3=120 hwmon1/device/pwm1=120
MINPWM=hwmon1/device/pwm3=0 hwmon1/device/pwm1=0
MAXPWM=hwmon1/device/pwm3=255 hwmon1/device/pwm1=255
INTERVALを 5 に設定して5秒間隔で制御を行うようにして、MINSTARTを 50、MINSTOPを 120 に設定。これでアイドル時は大体CPU温度は35℃でファン回転数は1100rpm。これくらいだとファンの音は全く聞こえない。CPU温度が37℃になって1200rpmを超えるとわずかながら音が聞こえるけど、それはCPUに負荷が掛かっているのが感じられて逆にいいかも。ちなみに36℃あたりを閾値に設定したのは体温と同じくらいだからという、ただそれだけ。全くもって根拠レス。Athlon X2 4050eってどのくらいの温度で皆さん使ってるのでしょう?

さて、これで無事ファン回転数のソフトウェア制御に成功したわけだけど、これだけ調子良く設定できたらやっぱり自動起動させたい。そこで解説に戻って、etc/init.d/fancontrolファイルをroot権限で作って、#!/bin/sh
#
# Fancontrol start script.
#

set -e

# Defaults
DAEMON=/usr/sbin/fancontrol
PIDFILE=/var/run/fancontrol.pid
PATH=/sbin:/bin:/usr/sbin:/usr/bin

test -f $DAEMON || exit 0

. /lib/lsb/init-functions

case "$1" in
start)
log_begin_msg "Starting fancontrol daemon..."
start-stop-daemon --start -o -q -m -b -p $PIDFILE -x $DAEMON
log_end_msg $?
;;
stop)
log_begin_msg "Stopping fancontrol daemon..."
start-stop-daemon --stop -o -q -p $PIDFILE
log_end_msg $?
;;
force-reload|restart)
sh $0 stop
sh $0 start
;;
*)
log_success_msg "Usage: /etc/init.d/fancontrol {start|stop|restart|force-reload}"
log_success_msg " start - starts system-wide fancontrol service"
log_success_msg " stop - stops system-wide fancontrol service"
log_success_msg " restart, force-reload - starts a new system-wide fancontrol service"
exit 1
;;
esac

exit 0
をコピペする。その後は$ sudo update-rc.d fancontrol defaults 99 01とスタートアップスクリプトを設定する。あ、そういえば、$ sudo chmod 0755 /etc/init.d/fancontrolこんなことや、$ sudo ln -s /etc/init.d/fancontrol /etc/rc3.d/S99fancontrolこんなこともしたかも。

ちなみに、Ksensorsは以前メニューには現れず、仕方ないのでメニューエディタで「アプリケーション」-「システムツール」にKsensorsを追加した。ちなみに追加したコマンドはgksu ksensors確かこれだけだと起動してくれなかったから /etc/sudoers に%admin ALL=(ALL) NOPASSWD: /usr/bin/ksensorsを追加した。そしてこれを自動起動させるには「システム」-「設定」-「セッション」の「追加」でgksu ksensorsコマンドを追加する。

これで完了。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です