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:

  1. 添加GNONE桌面亮度设置插件说明
  2. 2.1节添加开机启动脚本说明
posted @ 2022-01-15 22:13  烨小明  阅读(1939)  评论(0编辑  收藏  举报