ubuntu16.04でCPUファン制御ができずにノートPCがよく熱暴走していました.
lm_sensorsやacpiなどなど試してみてダメだった方の役に立てば幸いです.
1. ファンのスピードを変える
必要なファイルがあるか確認します.
0〜11の数字が出てくればオッケーです.
$ cat /sys/class/thermal/cooling_device0/cur_state
0が最低速度,11が最高速度になります.
数字を11に変えて,ファンのスピードが変わるか確認してください.
ここで変わらなければこの方法はできません..
$ sudo vim /sys/class/thermal/cooling_device0/cur_state
vimは必要であればgeditやemacsなどに変えてください.
2. 実行ファイルを作る
実行スクリプトを作って好きなときに実行できるようにしましょう.
まず,ホームにbinフォルダを作ってPATHを通します.
$ mkdir ~/bin
$ echo export PATH='$HOME/bin:$PATH' >> ~/.profile
$ source ~/.profile
続いて実行スクリプトを作ります.
$ vim ~/bin/fan.sh
#!/bin/sh
if [ -n "$1" ]
then
sudo sh -c "echo '$1' > /sys/class/thermal/cooling_device0/cur_state"
else
printf "level: "
read level
sudo sh -c "echo '$level' > /sys/class/thermal/cooling_device0/cur_state"
fi
実行権限を与えます.
$ cd ~/bin
$ sudo chmod +x fan.sh
PATHがきちんと通っていれば任意の場所で実行可能です.
$ fan.sh 10
とにかく熱暴走したくない!という方は高負荷なときに8や9など適度な数字に変えて実行するのが最も単純です.
3. CPU温度に合わせて速度を変える
$ vim ~/bin/fan_control.sh
#!/bin/sh
while true ;do
temp=$(sudo cat /sys/class/thermal/thermal_zone0/temp)
#echo $temp
if [ $temp -gt 60000 ] ; then
sudo sh -c "echo 10 > /sys/class/thermal/cooling_device0/cur_state"
elif [ $temp -gt 55000 ] ; then
sudo sh -c "echo 8 > /sys/class/thermal/cooling_device0/cur_state"
elif [ $temp -gt 50000 ] ; then
sudo sh -c "echo 7 > /sys/class/thermal/cooling_device0/cur_state"
elif [ $temp -gt 45000 ] ; then
sudo sh -c "echo 6 > /sys/class/thermal/cooling_device0/cur_state"
elif [ $temp -gt 40000 ] ; then
sudo sh -c "echo 4 > /sys/class/thermal/cooling_device0/cur_state"
else
sudo sh -c "echo 2 > /sys/class/thermal/cooling_device0/cur_state"
fi
#cat /sys/class/thermal/cooling_device0/cur_state
sleep 10
done
CPU温度に合わせてスピードが変わるようにします.
sleep 10で10秒後にまたwhileに入るようになっています.
温度と回転スピードは好きなように変更してください.
tempが60000(60℃)より高いと10にするといった具合です.
現在のCPU温度はこのように調べられます.
$ cat /sys/class/thermal/thermal_zone0/temp
#4. サービスにして起動時に実行されるようにする
こちらのページがとてもわかりやすいです.https://qiita.com/DQNEO/items/0b5d0bc5d3cf407cb7ff
/home/binでもサービスに登録できますが,すぐに消せてしまうので先程のスクリプトを/optにコピーします.
$ sudo cp ~/bin/fan_control.sh /opt/fan_control.sh
あとは本当に上のサイト通りなのでそちらを見たほうが詳しくのっています..
サービス用のファイルを作ります.
$ sudo vim /etc/systemd/system/fan_control.service
[Unit]
Description = fan_control daemon
[Service]
ExecStart = /opt/fan_control.sh
Restart = always
Type = simple
[Install]
WantedBy = multi-user.target
あとは以下のようにすれば再起動しても自動でfan_controlができるはずです.
$ sudo systemctl enable fan_control.service
$ sudo systemctl start fan_control.service
#4. きちんとファン制御できているか確認する
$ cat /sys/class/thermal/thermal_zone0/temp
$ cat /sys/class/thermal/cooling_device0/cur_state
温度と回転が設定どおりになっているか確認してください.
実行スクリプトにして確認するほうが楽です.
#!/bin/sh
while true ; do
date +"%H:%M:%S"
cat /sys/class/thermal/thermal_zone0/temp
cat /sys/class/thermal/cooling_device0/cur_state
sleep 2
done
$ cd ~/bin
$ sudo chmod +x fan_check.sh
もっとスマートな方法はあると思います..