linux中外接显示器亮度调节方法
linux中外接显示器亮度调节方法
首先需要显示器支持 DDC/CI 协议。
1. 工具ddcutil
这是一个查询和修改显示器设置的程序。
1.1 安装
Gentoo系统可以使用下面的命令安装:
sudo emerge --ask --verbose app-misc/ddcutil
1.2 设置
探测支持控制的显示器:
$ ddcutil detect
命令显示支持的显示器信息。
设置屏幕亮度:
ddcutil setvcp 10 50
10
表示 设置亮度代码(code),50
表示需要调节的亮度(0-100)。
查看当前显示器亮度:
ddcutil getvcp 10
还支持设置一些其它参数, 具体支持的code可以用如下命令查看:
ddcutil vcpinfo
2. 其它问题
2.1 未查找到显示器
连接显示器后用 ddcutil detect
命令没有查找的显示器,可能是应为显示器的i2c驱动没有自动加载,可以用如下方式手动加载驱动:
sudo modprobe i2c-dev
可以将命令添加到启动脚本中自动加载驱动。
添加systemd服务文件/etc/systemd/system/i2c-dev.service
:
[Unit]
Description=i2c-dev
After=syslog.target
[Service]
User=root
ExecStart=modprobe -a i2c-dev
ExecReload=modprobe -r i2c-dev
[Install]
WantedBy=multi-user.target
设置开机启动
sudo systemctl enable i2c-dev.service
sudo systemctl start i2c-dev.service
2.2 设备文件访问权限
上面的ddcutil
命令可能需要root
权限才能正常工作,那么如何才能使用普通用户执行命令呢?
这需要修改i2c 设备文件的访问权限,这时就需要配置udev规则了。
首先使用ddcutil detect
命令查看显示器的i2c 设备文件信息:
$ sudo ddcutil detect
Display 1
I2C bus: /dev/i2c-11
EDID synopsis:
Mfg id: AOC
Model: LV273HUPR
Product code: 10103
Serial number: APML99A002475
Binary serial number: 2475 (0x000009ab)
Manufacture year: 2020, Week: 39
VCP version: 2.2
我这里的设备文件是/dev/i2c-11
再使用下面命令查看 设备 udev属性
$ udevadm info -a -p $(udevadm info -q path -n /dev/i2c-11)
looking at device '/devices/pci0000:00/0000:00:08.1/0000:03:00.0/drm/card0/card0-DP-2/i2c-11/i2c-dev/i2c-11':
KERNEL"i2c-11"
SUBSYSTEM"i2c-dev"
DRIVER""
ATTR{name}"AMDGPU DM aux hw bus 2"
ATTR{power/async}"disabled"
ATTR{power/control}"auto"
ATTR{power/runtime_active_kids}"0"
ATTR{power/runtime_active_time}"0"
ATTR{power/runtime_enabled}"disabled"
ATTR{power/runtime_status}"unsupported"
ATTR{power/runtime_suspended_time}"0"
ATTR{power/runtime_usage}"0"
......
有了这些信息下面我们就可以添加udev 规则了。
添加规则文件 /etc/udev/rules.d/97-i2c.rules
:
SUBSYSTEM=="i2c-dev", ATTR{name}=="AMDGPU DM aux hw*", GROUP="dialout", MODE="0660"
SUBSYSTEM=="i2c-dev", ATTR{name}=="AMDGPU DM aux hw*"
指定匹配的属性,匹配这两条的才使用后面的设置。
GROUP="dialout"
设置工作组为dialout
,这是我之前设置usb 设备访问权限时使用的组,后面设置工作组可以读写,再把需要读写该设备的用户加入该组就可以了。
MODE="0660"
设置用户自己和工作组读写权限。
再把需要的用户加入工作组:
usermod -a dialout username
这里也可以不设置GROUP
,直接设置MODE="0666"
允许所有用户读写。
重启系统或者使用下面命令使修改的udev 规则生效:
# udevadm control --reload-rules && udevadm trigger
之后就可以用普通用户权限设置显示器亮度了。
udev规则编写可以参考:udev规则以及编写
3. GNONE桌面亮度设置插件
Gnome桌面可以安装Brightness control using ddcutil插件控制亮度,安装后可在顶部托盘中显示亮度控制图标。
3.1 安装
参考Brightness control using ddcutil Github项目,也可直接在Gnome插件网站安装。
3.2 设置
每次开机后设置亮度可能无效,需要点击Reload
按钮后才能设置,这是由于I2C驱动没有自动加载导致的问题, 可以参考2.1节
更新说明
2024-07-13:
- 添加GNONE桌面亮度设置插件说明
- 2.1节添加开机启动脚本说明