Linux 下调节外接显示器亮度的方法

Linux 下调节外接显示器亮度的方法

笔记本屏幕亮度的调节十分方便,使用 acpi 模块提供的硬件接口 /sys/class/backlight即可进行,我常用的软件包xbacklight就是基于此

但是外接显示器的亮度调节不像笔记本屏幕那样方便,需要通过 DDC/CI 协议与 i2c 设备进行通信来实现

软件包

ddcutil

配置

``
为了检测到 i2c 设备,需要载入内核模块 i2c-dev

  1. 创建 /etc/modules-load.d/i2c.conf ,在其中写下:
1
i2c-dev

这样 Linux 在启动时会自动加载 i2c-dev 模块

  1. 此时 i2c 设备只有 root 用户才能访问,为了使用普通账户访问,需要将用户添加到 i2c 组
1
2
sudo groupadd --system i2c
sudo usermod <user-name> -aG i2c

命令

查看Feature 10的功能

1
2
3
ddcutil capabilities | grep "Feature: 10"
# output
# Feature: 10 (Brightness)

查询当前亮度

1
ddcutil getvcp 10 | grep -i 'Brightness' | awk '{print $9}' | sed 's/,$//'

升高/降低当前亮度

1
2
3
current_backlight=$(ddcutil getvcp 10 | grep -i 'Brightness' | awk '{print $9}' | sed 's/,$//')
ddcutil setvcp 10 $((current_backlight + 20))
ddcutil setvcp 10 $((current_backlight - 20))

备注

ddcutil 指令是有些耗时的,如果使用 dwm 这类窗口管理器,在自己编写亮度显示脚本的时候不要一直使用 ddcutil getvcp 来获取亮度,会造成卡顿,正确的做法是,开机时获取一次亮度,并导出成环境变量,然后每次都从环境变量中读取亮度,然后更改亮度的同时,更改环境变量,这样就可以避免卡顿

参考资料

背光 - Arch Linux 中文维基
linux 中外接显示器亮度调节方法 - 烨小明 - 博客园
I2C Device Permissions - ddcutil Documentation

Linux 下调节外接显示器亮度的方法

https://fly.meow-2.com/post/linux/linux-ddcci.html

作者

Meow-2

发布于

2023-02-22

更新于

2023-02-22


评论