屏幕背光的困惑
前言:我还没有彻底搞清楚原理,对这方面熟悉的同学我们可以讨论一下。
早在S210调教一文里,我就沮丧地指出了屏幕背光没有办法调节的问题。不仅仅是键盘上Fn快捷键没有办法直接调节,而是在设置选项->亮度与锁屏中也无法调节。
作为机智而勤奋的我,怎么会被这种区区的困难击退呢? 于是依照网上给出的亮度调节方案,我写了一个调节亮度的脚本:
#!/bin/bash
read brightness < /sys/class/backlight/intel_backlight/brightness
read max < /sys/class/backlight/intel_backlight/max_brightness
echo "brightness $brightness"
echo "max $max"
echo `expr $max \* $1 \/ 100` >> /sys/class/backlight/intel_backlight/brightness
食用方法是
sudo br.sh 45
于是,开机输入两遍密码成为了日常怎么调节个亮度还要root密码摔!
后来发现一个问题其实几乎所有人都在犯这个错误。
我们知道人的感官接收信号给出的强度实际上是按对数增减的,但是像这种屏幕背光是按照线性(光子数目)增减的。这就导致看上去在低亮度区亮度变化太快,而高亮度区不怎么变化。
解决方案相当简单,只要用二次函数近似代替一下就行了:
#!/bin/bash
read brightness < /sys/class/backlight/intel_backlight/brightness
read max < /sys/class/backlight/intel_backlight/max_brightness
echo "brightness $brightness"
echo "max $max"
**echo `expr $max \* $1 \* $1 \/ 10000` >> /sys/class/backlight/intel_backlight/brightness**
就这样xDroid幸福快乐地过了一个学期。每天为了调整屏幕亮度输入五六次密码。
终于还是不耐其烦,于是写了一个脚本自动刷新键盘控制的屏幕亮度值,再写到驱动控制的值里面,每秒刷新一次,代码如下:
#!/bin/bash
read max < /sys/class/backlight/intel_backlight/max_brightness
while true
do
brightnesspath="/sys/class/backlight/ideapad/brightness"
if [ -f $brightnesspath ]
then
read br < /sys/class/backlight/ideapad/brightness
else
sleep 1
continue
fi
echo `expr $max \* $br \* $br \/ 100` >> /sys/class/backlight/intel_backlight/brightness
sleep 1
done
然后写入到rc.local
里面去,实现开机自启。
xDroid还没幸福快乐地使用上一个月,又因为另一件突如其来的事情打破了生活的平静。百般无奈下安装Ubuntu 15.10,之后又是各种优化调整。起初第一次进入系统的时候能调节屏幕亮度了,大喜,认为是驱动什么的bug修好了;不料过了一天又没有办法用Fn键调亮度了。仔细想了想,只有可能是grub引导参数配置的问题(事实证明这大概是一个flag)。
在笔记本使用Ubuntu系统关闭独显+省电降温设置一文中,提到intel的HD系列显卡可以通过开启自动调节选项达到省电的效果。本来也并不懂这些选项是什么意思,便感到很可疑,cat
出来看了一下:
pcie_aspm=force i915.semaphores=1 acpi_osi=Linux acpi_backlight=vendor elevator=noop i915.i915_enable_rc6=1 i915.i915_enable_fbc=1 i915.lvds_downclock=1
按理说acpi_backlight
这里设置为vendor
是正确的,意即读取制造商文件的设置。然而这些选项导致没有办法调节亮度了。
试了一下,删掉大部分,剩下几个选项:
pcie_aspm=force acpi_osi=Linux i915.i915_enable_rc6=1
就能好好地调整亮度了。于是xDroid又幸福快乐地写了几天代码。
前方打脸高能
今天当我正要得出“那些网站抄来抄去设置又抄错”这样结论的时候,抱着一丝侥幸的心态又google了一下,发现很多关于Ubuntu下显卡优化的文章都说到同一个文件/usr/share/X11/xorg.conf.d/20-intel.conf
。cat
了一下,发现居然没有这个文件——没有就没有了呗,写一个总行吧——重启以后就可以用那个很多参数的引导项后调节亮度了。
看来是缺少20-intel.conf
咯?
突然想到那堆设置里面有一个elevator
。显卡节电/优化和调度器有什么关系?折腾了一下三种不同的调度器(默认是deadline
),只有noop
启用的时候才能达到上面的效果。
顺便说一句,查看当前磁盘调度器可以使用以下命令魔法:
cat /sys/block/sda/queue/scheduler
前方再次打脸
令人感到抓狂的是,就当我认为这样设置无误后,启动了一次试了一下——咦,怎么还是不能调节?sudo reboot
……咦,怎么迷之好了?……反复确认了两三次都是这样。
接下来需要做的事情就是比较先行设置下显卡性能有没有提升——换而言之,有没有节省电力同时有合理的I/O性能(noop对于机械硬盘简直……)。
2016.02.17更新 今天该收拾一下拖延症了……把优化选项开启和关闭的情况做了一下跑分测试;然而并没有什么很大的区别……所以我大概会把优化参数去掉吧。
opts-on | opts-off | |
---|---|---|
render-bench (渲染时间,越小越好) | ||
gputest (得分,越大越好) |
这是系统情况: 启动参数:
quiet splash pcie_aspm=force i915.semaphores=1 acpi_osi=Linux acpi_backlight=vendor elevator=noop i915.i915_enable_rc6=1 i915.i915_enable_fbc=1 i915.lvds_downclock=1
启动参数:
quiet splash pcie_aspm=force i915.semaphores=1 acpi_osi=Linux i915.i915_enable_rc6=1