ddcutil's udev rule grants the seated user the GPU's i2c buses only when the PCI class is 0x030000. An AMD iGPU that is not the primary boot display says 0x038000, so on the Framework every DDC bus stayed root-only. Ship the same grant for the class the hardware actually reports; change-settings installs it. And two conflations in the probe: an undocked laptop reported its normal state as an error, and doctor collapsed every error into "No accessible DDC/CI bus". Nothing external connected is now a clean empty -- doctor's unconfigured path -- and a real failure surfaces the probe's own words, because an unreadable bus and a monitor with DDC/CI off in its menu have different fixes. Claude-Session: https://claude.ai/code/session_01Epx9ZC1gwm81K3jm9x9CKh
10 lines
593 B
Plaintext
10 lines
593 B
Plaintext
# External monitor brightness (DDC/CI) on GPUs that are not "VGA".
|
|
#
|
|
# ddcutil ships 60-ddcutil-i2c.rules, which grants the seated user access to
|
|
# the GPU's i2c buses -- but only when the GPU's PCI class is 0x030000 (VGA
|
|
# compatible controller). An AMD iGPU that is not the primary boot display
|
|
# enumerates as 0x038000 (Display controller) instead, so every DDC bus it
|
|
# exposes stays root-only and the Brightness service reads EACCES. Same grant,
|
|
# broadened to the class that hardware actually reports.
|
|
SUBSYSTEM=="i2c-dev", KERNEL=="i2c-[0-9]*", ATTRS{class}=="0x038000", TAG+="uaccess"
|