1. 程式人生 > 其它 >linux中外接顯示器亮度調節方法

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規則以及編寫