原帖:http://bbs.pcbeta.com/viewthread-830940-1-1.html
本教程仅适用于笔记本用户,尚未对台式机进行测试。该功能与显示器有关。
笔记本用户可先检测自身DSDT是否含有BCL、BCM、BQC这三个字段。
如果存在,那么肯定是确切可行的。不存在的话也可以通过以下述方式A进行尝试。
在这里,我还得先感谢weizh126的帖子理论上完美解决N卡亮度调节问题,我的解决方式也是从该帖获取到的思路。
适用于以下枚举的几种显卡驱动方式:
1、可通过开启Chameleon的GraphicsEnabler选项识别并驱动的显卡。
2、可通过提取bios.rom识别驱动的显卡。
3、可通过EFI-String驱动的显卡。
4、可通过修改DSDT驱动的显卡。
开始操作前,请先下载该压缩包,里面包含可能需要使用到的工具。
http://u.115.com/file/f58f309da1#需要用到的工具.zip
可分为两种方式来完成我们的工作。
A、使用EFI-String驱动显卡、添加pwminfo、设置显示器内建、开启背光控制功能,修改DSDT添加PNLF信息。
B、修改DSDT来完成全部操作。
方式A适合显卡驱动方式1、2、3的用户,本文所讲的则是该方式;
方式B适合于显卡驱动方式4的用户,可由此点此进入传送阵。
PS:请安装合适的软件修改plist文件,如PlistEditPro。
通过上述第1、2种方式完成显卡驱动的同学,请解压出PrefPanel.zip,这是变色龙的偏好设置程序。
snow leopard用户请安装Chameleon-Snow,leopard用户则请安装Chameleon-Leo。
从“系统偏好设置”进入变色龙控制面板,在EFI inject选项点击current GFX injection,获取当前显卡EFI String驱动信息的配置文件。
如图所示:
将生成的plist文件保存到桌面,命名为in.plist,若in.plist存在vbios项,请将该节点删除,不然可能无法启动。
使用EFI-String驱动的朋友,请找出你当初制作EFI-String显卡驱动时编辑的in.plist。
打开in.plist,添加两个子节点,@0,backlight-control、@0,pwm-info。(数据类型为data)
@0,backlight-control = 01000000
@0,pwm-info 的值设为
-
- 01140064 A8610000 1E020000 2C000000 00040000
复制代码
若是分辨率为1280*800,可以尝试使用这个值:
-
- 01140064 78690000 08520000 01000000 00040000
复制代码
如果是之前使用EFI-String驱动的朋友,还需要添加
(数据类型为string)
@0,built-in = 0x01
这个参数的作用是让显示器识别为内建。
添加后应该是这样的:
我的还添加了EDID、NVMT参数,这两个参数是可以忽略的。
之前我认为这两个参数也需要使用mac的原生参数,后面多次试验得出结论:
EDID记载了显示器的全部信息,大家可以在windows注册表中获取到自己显示器的参数,使用自己的参数可以获得更好的显示效果。
NVMT记载了屏幕控制相关参数,包括如何设定开机亮度值都是与NVMT值有关,这个大家可以参照我另一个帖子。
设置开机亮度:http://bbs.pcbeta.com/thread-830707-1-1.html
保存in.plist,解压gfxutil到桌面,打开终端,运行:
-
- cd ~\Desktop
- ./gfxutil -i xml -o hex ./in.plist ./out.txt
复制代码
这般会生成一个out.txt的文本,文本记载的代码就是EFI-String编译后的内容。
打开Extra\com.apple.boot.plist,建立device-properties节点,值就是刚刚生成的out.txt里面的一堆代码。
如图:
之前使用EFI-String驱动的同学,替换掉原来的值就可以了。或者直接使用变色龙控制面板添加,如图:
使用变色龙驱动的同学,别忘记删除GraphicsEnabler选项。
重启,进入系统,如果能够正常驱动显卡,那么恭喜你,你已经成功一大半了。
如果无法进入系统,请仔细检查代码,按照我上述方式再次操作。
现在该为DSDT添加一段代码,打开背光控制功能。
将这段代码放到Device (PWRB) 上面。
-
- Device (PNLF) {
- Name (_HID, EisaId ("APP0002"))
- Name (_CID, "backlight")
- Name (_UID, 0x0A)
- Name (_STA, 0x0B)
- }
- <!--EndFragment-->
复制代码
添加完后应该是这样的:
-
- Device (PNLF) {
- Name (_HID, EisaId ("APP0002"))
- Name (_CID, "backlight")
- Name (_UID, 0x0A)
- Name (_STA, 0x0B)
- }
- <!--EndFragment-->
- Device (PWRB) ......
复制代码
保存DSDT,重启进入系统。这时候大部分机器都已经可以调节亮度了。
按F14、F15调节,也就是普通键盘上的Scroll Locak和PauseBreak。
像我自己的机器,进行到这一步已经可以实现同步图标和亮度控制了。
如果还不能调节亮度的话,请打开IORegistryExplorer检测,在右上角输入back,如图
只要brightness的最大值不为0,那你就不用急,继续往下面看。
----------------------------------分割线----------------------------------
这一步将会需要用到压缩包内的kext,该kext在切换分辨率时可能会导致五国。
一般笔记本的显卡都在P0P1、P0P2、P0P3这种节点下。
包含显卡信息的P0P地址设备,一般都有Device (LCD)。
在每一个Device (LCD)内的第一行添加
-
- Name (_HID, EisaId ("LCD1234"))<!--EndFragment-->
复制代码
通常添加后是这样的:
-
- Device (LCD){
- Name (_HID, EisaId ("LCD1234")) //这一行必须添加 用以加载kext
- Method (_DCS, 0, NotSerialized){
- ....
- }
- }<!--EndFragment-->
复制代码
添加好后,再次保存DSDT。将提供的GenericBrightness.kext放到Extra\Extensions目录下,-f重启。
至此,大部分机器应该都已经可以实现亮度调节了。
展示一下我的机器:
修改前:
无亮度条
无睡眠前自动降低亮度
修改后: