计算机开机后亮度分布不均,[教程&交流]解决最低亮度黑屏和亮度不均

前言:最近研究了一下关于亮度的调节,发现了一些心得,我个人不喜欢最低亮度黑屏,虽然白果是这样的,但是我个人不喜欢黑屏,没有修改之前,最低亮度依然很亮,晚上很刺眼,修改之后的亮度可以降到非常低,过渡平滑,希望与大家交流一下,希望大家可以一起讨论,测试一下我的方法。下面我们开始:

**需要用到的工具:maciasl/plistedit pro (自己百度一下,附件太大传不上来)

1.首先,你的笔记本要能够实现亮度调节,简单介绍一下各种显卡的亮度调节方法:

(1)集显:集显的亮度调节一般来说需要三个条件,注入ig-plantfrom-ID驱动显卡,并且屏幕内建,pnlf()。

(2)独立显卡:显卡以驱动,在dsdt中注入独显rom,有pnlf(),10.12.4之后的版本可能需要使用10.12.4的Applebacklight.kext。

ps:部分电脑可以在bios屏蔽集显,部分电脑出场就屏蔽集显,极少数电脑可以独显和集显同时驱动,但是对于大多数电脑来说,只能使用集显,因为独立显卡是没有显示核心的,只有运算核心,所以在osx下无法切换显卡!先搞清楚自己属于哪种情况~~

2.dsdt部分:

我们的dsdt中一般来说有多个亮度表,也就是(_bcl),我们使用maciasl打开dsdt和ssdt查找“Method (_BCL”,就可以找到若干个。如:

此图中的_bcl方法调用了上一级的定义,所以这不是我们要找的。

我们在ssdt中找到如上定义,我们看见了一堆数字,这就是传说中的亮度表。

下面来简单介绍一下亮度表:亮度表的前两个数字,代表了使用电池的亮度和使用电源的亮度。后面的数字代表的是可支持的亮度!

好的,我们可以直接修改此亮度表,来获取一个可支持的亮度:

Return (Package ()

{

0x0AD9,

0x02EC,

Zero,

0x23,

0x27,

0x2C,

0x32,

0x3A,

0x43,

0x4D,

0x58,

0x65,

0x73,

0x82,

0x93,

0xA5,

0xB8,

0xCC,

0xE2,

0xF9,

0x0111,

0x012B,

0x0146,

0x0162,

0x017F,

0x019E,

0x01BE,

0x01DF,

0x0202,

0x0225,

0x024B,

0x0271,

0x0299,

0x02C2,

0x02EC,

0x0317,

0x0344,

0x0372,

0x03A2,

0x03D2,

0x0404,

0x0437,

0x046C,

0x04A2,

0x04D9,

0x0511,

0x054B,

0x0586,

0x05C2,

0x05FF,

0x063E,

0x067E,

0x06C0,

0x0702,

0x0746,

0x078B,

0x07D2,

0x081A,

0x0863,

0x08AD,

0x08F8,

0x0945,

0x0994,

0x09E3,

0x0A34,

0x0A86,

0x0AD9

})

(注意:package()括号中的数值要删除后再编译,否则会发生错误,甚至导致maciasl无响应!)

如果你是核显,可以修改你igpu/gfx0中的亮度表,然后在dsdt中使用rehabman的acpi100补丁来添加一个pnlf()

例:在igpu.pnlf._bcl中,修正ssdt中bcl的路径,如上图中,我的核显亮度表在ssdt-7中,它的路径是:\_SB.PCI0.IGPU.DD1F._BCL(),所以,在dsdt里的pnlf._bcl中引用此路径:

Method (_BCL, 0, NotSerialized)  // _BCL: Brightness Control Levels

{

Return (\_SB.PCI0.IGPU.DD1F._BCL() )

}

最后别忘了在dsdt开头添加引用定义:External (_SB_.PCI0.IGPU.DD1F._BCL, MethodObj)

注意:核心显卡将pnlf放在独立显卡下,一般为pegp.peg0,方法同上。

3.修改applebacklight(自己提取s/l/e中的,注意备份!):

首先,右键显示包内容,用plistedit 打开info.plist

可以看到如下图:

如果不嫌麻烦可以用ioreg查看你的显示器的product id,并新建项,如:

ps:直接修改default也可以,但是其他的要全部删除!

4.我们来修改亮度档位:

(1)我们的亮度表中,记录了允许的亮度值,如上,我提供的亮度表中,允许的亮度是:0x0--0x0ad9,这是十六进制数,为了计算方便,我们用自带的计算器,选择编程器,来计算一下十进制:0x0=0,0x0ad9=2777.

我们的亮度表中,允许的亮度是从0-2777(十进制)

(2)科普一下,苹果的亮度调节有17档(16档亮度加最后一档黑屏)

我们需要做的,就是把这些亮度分为17个档。

例:2777平分为17档,先确定一个最低档,2777除16,商173余9,那么我的最低档可以定为16+n*9(这个n可以自己试,太暗了貌似也没什么用处,找到合适的最低档就好),我们以n=1为例,最低档为:25,那么其余各档位之间间隔为(2777-25)/16=172,所以,其他档位就是(十进制):197,369,541,713,885,1057,1229,1401,1573,1745,1917,2089,2261,2433,2605,2777

换算为16进制(包括最低档):0019 00C5 0171 021D 02C9

0375 0421 04CD 0579 0625 06D1 077D 0829 08D5 0981 0A2D 0AD9

接下来,我们要在这17个档位前面加上一个额外的档位,此档位是用来在显示器关闭前使屏幕变暗的,就像手机一样,关屏前先变暗,然后关屏,我研究了苹果原生的值,全部为0011,那么我们也使用0011就好。

所以,我们最终会得到这样一串数字:00110019 00C5 0171 021D 02C9

0375 0421 04CD 0579 0625 06D1 077D 0829 08D5 0981 0A2D 0AD9

5.我们把它复制进刚刚的info里,替换default的值,并删除其他项(如图中的f10t0000),保存,退出,并安装修改后的applebacklight.kext到S/L/E,重启,测试!

6.后记:

其实我还是有很多疑问的,比如这个档位调用亮度表中不存在的亮度时,我并没有发现什么不妥,还是不太懂它调用的机制,以上经验是我多次试验得出的猜想,迫不及待与大家分享,希望有大神可以一起讨论,指教,感激不尽,希望大家踊跃测试,反馈。附上10.13(17A365)的applebacklight.kext,版本不同最好自己制作!有空写个app来造福广大景友。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值