Macos 在OS X上以编程方式禁用环境光照传感器屏幕调光

Macos 在OS X上以编程方式禁用环境光照传感器屏幕调光,macos,iokit,Macos,Iokit,我已经在内核代码repo中挖掘了好几天,但是我在任何地方都找不到这个 我想禁用/启用/检测许多高端Mac笔记本电脑所具有的基于环境光传感器的屏幕调光状态。这是通过显示控制面板中的“自动调整亮度”复选框激活的调光 请注意,我不是在谈论半暗设置,它会导致屏幕在睡觉前急剧变暗。我说的是在黑暗的房间里使屏幕变暗,在明亮的房间里使屏幕变亮的设置,这是不同的 如果有人能给我指出正确的方向,我会非常高兴。我假设它是在IOKit的某个地方处理的,可能是在处理屏幕亮度的传记中,或者是在IOKit/pwr_mgt的

我已经在内核代码repo中挖掘了好几天,但是我在任何地方都找不到这个

我想禁用/启用/检测许多高端Mac笔记本电脑所具有的基于环境光传感器的屏幕调光状态。这是通过显示控制面板中的“自动调整亮度”复选框激活的调光

请注意,我不是在谈论半暗设置,它会导致屏幕在睡觉前急剧变暗。我说的是在黑暗的房间里使屏幕变暗,在明亮的房间里使屏幕变亮的设置,这是不同的

如果有人能给我指出正确的方向,我会非常高兴。我假设它是在IOKit的某个地方处理的,可能是在处理屏幕亮度的传记中,或者是在IOKit/pwr_mgt的某个地方,但我就是找不到它

谢谢

编辑:我知道您可以通过使用AppleScript解决系统首选项来实现这一点。我在寻找真实的方法,如果存在的话。

使用
默认值
命令更改“自动调整亮度”设置:

defaults write com.apple.BezelServices dAuto -boolean false
defaults read com.apple.BezelServices dAuto
还可以使用
defaults
命令检索当前设置:

defaults write com.apple.BezelServices dAuto -boolean false
defaults read com.apple.BezelServices dAuto
AppleScript等效文件:

do shell script "defaults write com.apple.BezelServices dAuto -boolean false"
使用
true
启用该功能,使用
false
禁用该功能。

您可能需要重新登录才能使更改生效。

尝试在Mavericks上执行此操作对我来说不成功。经过一些研究,我发现您需要使用以下命令:

defaults write /Library/Preferences/com.apple.iokit.AmbientLightSensor "Automatic Display Enabled" -bool TRUE
我认为指定完整路径是必要的,否则它将默认为用户的库/首选项,这是不正确的。由于
defaults
的工作方式,在终端的那个目录中也不起作用

不过,这不会更新系统首选项->显示中的勾选框。

根据sé,这不是API。。但是有很多方法可以通过API控制
launchd

sudo launchctl stop com.apple.AmbientDisplayAgent

sudo launchctl remove com.apple.AmbientDisplayAgent


Ta-Da

发布此消息,因为它可能会帮助像我这样的人,他们已经禁用了环境光感应功能,但从睡眠中醒来时仍然发现他们的计算机变暗。事实证明,我还需要取消选中该框以“在使用电池电源时使显示器稍微变暗”

系统首选项>电池>在电池供电时稍微调暗显示屏

见下图:


苹果可能的复制品几乎没有开源,几乎没有新的驱动程序,大约是在英特尔转型后,所以你可能需要做一些调查来找到这些(私有)API。阿米特·辛格(Amit Singh)的老例子可能是一个很好的开始——尽管较新的Mac机型可能使用不同的驱动程序(我没有一款带有光传感器的机型,所以我不能告诉你)。您应该能够通过
ioreg
IORegistryExplorer
工具找到设备和驱动程序类。如果API调用已更改,您可能可以跟踪现有应用程序使用的IOService用户方法,例如系统首选项。谢谢,但这在我的MacBook Pro上不起作用。我想把它作为一个程序的一部分,不管怎样——我正在寻找一个API——所以注销/登录位也是一个交易破坏者。这过去是有效的,但现在显然不行了(我在macOS 10.14 Mojave上),这在macOS Mojave 10.14.3中仍然是最新的吗?