Linux 下调节外接显示器亮度的方法
笔记本屏幕亮度的调节十分方便,使用 acpi 模块提供的硬件接口 /sys/class/backlight
即可进行,我常用的软件包xbacklight
就是基于此
但是外接显示器的亮度调节不像笔记本屏幕那样方便,需要通过 DDC/CI 协议与 i2c 设备进行通信来实现
软件包
配置
``
为了检测到 i2c 设备,需要载入内核模块 i2c-dev
- 创建 /etc/modules-load.d/i2c.conf ,在其中写下:
1 | i2c-dev |
这样 Linux 在启动时会自动加载 i2c-dev 模块
- 此时 i2c 设备只有 root 用户才能访问,为了使用普通账户访问,需要将用户添加到 i2c 组
1 | sudo groupadd --system i2c |
命令
查看Feature 10
的功能
1 | ddcutil capabilities | grep "Feature: 10" |
查询当前亮度
1 | ddcutil getvcp 10 | grep -i 'Brightness' | awk '{print $9}' | sed 's/,$//' |
升高/降低当前亮度
1 | current_backlight=$(ddcutil getvcp 10 | grep -i 'Brightness' | awk '{print $9}' | sed 's/,$//') |
备注
ddcutil 指令是有些耗时的,如果使用 dwm 这类窗口管理器,在自己编写亮度显示脚本的时候不要一直使用 ddcutil getvcp
来获取亮度,会造成卡顿,正确的做法是,开机时获取一次亮度,并导出成环境变量,然后每次都从环境变量中读取亮度,然后更改亮度的同时,更改环境变量,这样就可以避免卡顿
参考资料
背光 - Arch Linux 中文维基
linux 中外接显示器亮度调节方法 - 烨小明 - 博客园
I2C Device Permissions - ddcutil Documentation
Linux 下调节外接显示器亮度的方法