给外接显示器增加环境光亮度调节
macOS会根据环境光的强弱,自动调节显示器亮度,但如果有外接显示器,亮度则并不会被随之调整。从白天工作到晚上,两个屏幕的亮度差距会越来越大。
在网上找了一些方案开源和商业的方案,都不是很满意,主要原因是它们都会占用顶部一个menu位,而对于一个系统自动调节的功能来说,并没有用鼠标单击这个menu的必要。还有一些并不太需要的功能,比如根据调节颜色和色温等。另外一些应用,同步亮度居然还需要订阅。
这个方案很简单,只使用了AppleScript
和Shell
,优点如下:
- 自动调节亮度
- 开机自动启动
- 不占用dock和menu item
当然因为能力有限,还有一些改进的空间:
- 更优雅的方式获取系统当前亮度,目前用的是两个正则表达式
- 通过监听系统调节亮度的事件,而不是30秒的定时去监控
制作流程
前提
- 需要显示器支持ddc/ci.
- 需要用ddctl提供的调节亮度工具:
brew install ddcctl
开始
脚本制作
打开Script Editor编辑器,复制下面代码,保存为AutoBrightness,:
on idle --设置定时任务
set brightness_num to do shell script "ioreg -c AppleBacklightDisplay | grep -oE '(?:\"brightness\").*?(\"value\").*?},' | grep -oE '\"value\"=(\\d{1,5})'|awk -F= '{print $2}'" --获取当前系统亮度,能力实在有限,只能通过两个正则获取,help needed.
set brightness_num to (brightness_num / 65535) * 100 --单位转换
do shell script "/usr/local/bin/ddcctl -d 1 -b " & brightness_num --调整亮度, 需要确认外接显示器是在display(-d) 1
return 30 --每30秒运行一次
end idle
保存时,文件格式选择
Application
,否则timer
不会触发。
开机自动启动
System Preferences -> User & Groups -> (tab)Login Items -> 添加AutoBrightness
隐藏应用图标
- 右键点击
AutoBrightness.app
-> Show Package Contents -> Contents - 打开info.plist
- 在第一个
<dict></dict>
中插入下面代码,保存退出。
<key>LSUIElement</key>
<string>1</string>
EOF