Linux风扇控制脚本

因为自己在使用的ThinkPad T440p的芯片散热实在是SB至极,为了守卫本本的安全,为了世界的和平……不说那么多了,总之为了方便,自己写了一个温控脚本,根据不同的温度来控制风扇转速。别和我说有thinkfan什么的,那玩意儿在这里不管用——它拒绝执行……不管你用什么办法,它就是拒绝的!
反正本人也懒,懒得找什么论坛解决那些奇葩的bug与设置问题,所以直接自己动手,丰衣足食,写了一个脚本。虽然不高明,但总比每次开机自己手动更改要好一些,不然一不小心电脑就煎蛋了。

所需内容


也很简单,需要:

  • 获取对风扇速度调整的权限。ThinkPad用户参考这里或者thinkwiki,稍后会介绍如何操作。
  • lm_sensors,用来读取温度
  • linux基本命令的head、sed以及awk,用于获取设备温度。
  • crontab服务以便于自动执行

思路


通过sensors检测cpu温度,根据温度的不同来向/proc/acpi/ibm/fan写入不同的级别来控制风扇转速。

echo level [1-5,7,full-speed] > /proc/acpi/ibm/fan

具体命令方式参考fan文件内容——前提是你获得了对风扇控制的权限。

然后将脚本加入到crontab任务——必须是root用户权限,每个几分钟执行一次脚本检测并调整风扇。

方法


获取对风扇速度调整的权限(以ThinkPad为例)

首先使用root用户,在 /etc/modprobe.d/ 目录下创建一个文件:

root@localhost:~ # vi /etc/modprobe.d/thinkpad_acpi.conf

内容如下:

options thinkpad_acpi experimental=1 fan_control=1

加载对风扇控制模块:

 root@localhost:~ # modprobe thinkpad_acpi fan_control=1 experimental=1

然后进入到 /proc/acpi/ibm/fan中看看是否可以更改,以本人为例,如果可以更改的话内容如下:

    status:         enabled
    speed:          3426
    level:          auto
    commands:       level <level> (<level> is 0-7, auto, disengaged, full-speed)
    commands:       enable, disable
    commands:       watchdog <timeout> (<timeout> is 0 (off), 1-120 (seconds))

当然了,不同的发行办可能有些许不同,但使一般都会提供给commands以供选择,否则您没有修改权限。

手动更改级别的话执行如下命令:

 root@localhost:~ # echo level 5 > /proc/acpi/ibm/fan

以上命令使风扇以级别5的转速运转。一般数字越大风扇速度越快。有的发行版没有级别6,而且命令模式也可能不一样。本人使用的是opensuse,命令中可以执行级别6的控制,在脚本中设置成注释,想使用的话设置好数值取消注释即可。

创建脚本,放到一个自己喜欢的地方

可能会放在你的家目录下的某一个地方,或者/etc/的某一个地方,随你喜好——只要你自己觉得合理即可。

脚本如下:

#!/bin/bash
cpu_temp=$(sensors -u|sed -n '/Core 0/ {n;p}'|awk {'print $2'}|sed 's/.000//')

#-------------configure file------------
#You can modify these arguments in this area by yourself.
#Example:  
#          lv5=45     #It means that the fan will be running at level 5 speed when CPU temperature exceeds 45 digrees Celsius.
#If the command 'sensors'  returns the value in Fahrenheit,you have to modify these arguments as Fahenheit,too.
lv1=30
lv2=35
lv3=40
lv4=42
lv5=45
#lv6=          #Setting a vaild value and deleting '#' in the relevent code snippet if you want to use level 6.
lv7=50
lv_max=70      #full speed
#--------------end of configure file--------------

change_fan_level() {
    echo level $1 > /proc/acpi/ibm/fan
}

if [ $cpu_temp -gt $lv_max ]
then
change_fan_level full-speed
elif [ $cpu_temp -gt $lv7 ] 
then 
change_fan_level 7
#Deleting '#' in the following code snippet and set a vaild value for argument lv6 if you want to use level 6.
#elif [ $cpu_temp -gt $lv6 ] 
#then                             
#change_fan_level 6               
elif [ $cpu_temp -gt $lv5 ]
then
change_fan_level 5
elif [ $cpu_temp -gt $lv4 ]
then
change_fan_level 4
elif [ $cpu_temp -gt $lv3 ]
then
change_fan_level 3
elif [ $cpu_temp -gt $lv2 ]
then
change_fan_level 2
elif [ $cpu_temp -gt $lv1 ]
then
change_fan_level 1
else
change_fan_level 1
fi

求别吐槽我的蹩脚英文和这糟糕的代码缩进风格了……谁让人家是小白~的呢。

然后赋予其可执行权限。

root@localhost:~ # chmod a+x file.sh

添加进任务列表

编辑root的crontab列表。

root@localhosts:~ # crontab -e

打开后是一个vi编辑器,添加新的一行,内容如下:

 */2 * * * * /bin/bash /shell_script_path

注意,这里脚本的路径是绝对路径。

这样便每隔2分钟便执行脚本,来修改风扇策略。

后记


还不是因为thinkfan搞不定所以才出此下策,尽量不推荐如此调教。毕竟脚本的执行能力你懂的,而且是靠crontab来实现动态检测调整的。除非实在是没有办法,否则不推荐用这个方法。
另外啊,我的sensors有些坑爹的每次重启对于温度的标识都有所改变,所以不得不直接认定Core 0核心的温度为准。通配符什么的复杂好用,一时间想不起来了,所以根据这位大触的方法来定位cpu核心0的温度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,112评论 2 34
  • 前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (cro...
    Zcclucky阅读 568评论 0 0
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,018评论 9 467
  • Linux定时任务Crontab命令详解 linux 系统则是由 cron (crond) 这个系统服务来控制的。...
    孙燕超阅读 1,814评论 0 4
  • 转自:Linux如何实现开机启动程序详解我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从...
    郭之源阅读 1,697评论 0 8