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
可以考慮將命令新增到啟動指令碼中自動載入驅動。
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規則以及編寫