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
可以考慮將命令添加到啟動腳本中自動加載驅動。
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規則以及編寫