Summary
On an LG UltraGear evo 27GM950B-B, a Set VCP brightness request is consistently ignored when --skip-ddc-checks is used. The same request works when initial DDC checks are enabled.
Verification reports DDCRC_VERIFY, while --noverify exits with status 0 even though the value does not change. A second verified attempt inside the same ddcutil process succeeds when the hidden --i5 2 option is used. Running two separate verified commands does not succeed.
This may indicate that the verification read primes the display and that the second write must reuse the same initialized display handle.
System
| Component |
Value |
| Display |
LG UltraGear evo 27GM950B-B |
| Connection |
DisplayPort on DP-1 |
| Product code |
23800 |
| DDC bus |
9 |
| VCP version response |
x02 x01 |
| GPU |
AMD Radeon 780M using amdgpu |
| ddcutil |
2.2.7 and 2.2.8-DEV at commit 20eee398 |
| Kernel |
7.1.9-arch1-2 |
| Distribution |
Omarchy 4.0.1-1 |
| Hyprland |
0.56.2 |
The monitor reports VCP feature 0x10 as writable with a range of 0 through 100.
ddcutil-interrogate.txt
FAQ and development branch
I checked the project FAQ. DDC communication is enabled and full checked writes work. The documented picture mode cases do not explain why the result depends on --skip-ddc-checks. The documented sleep multiplier guidance was also tested as described below.
I built the current 2.2.8-dev branch at commit 20eee398. The behavior is unchanged.
skip_status=1 skip_observed=60 skip_elapsed=319ms
i5_status=0 i5_observed=61 i5_elapsed=624ms
Reproduction
Each case below started at 60 and was reset to 60 before the next case.
Skipped checks without verification
$ ddcutil --bus 9 --skip-ddc-checks --noverify setvcp 10 61
$ echo $?
0
$ ddcutil --bus 9 getvcp 10 --brief
VCP 10 C 60 100
Skipped checks with verification
$ ddcutil --bus 9 --skip-ddc-checks --verify setvcp 10 61
Verification failed for feature 10
Try errors: DDCRC_VERIFY
$ echo $?
1
$ ddcutil --bus 9 getvcp 10 --brief
VCP 10 C 60 100
Full checks without verification
$ ddcutil --bus 9 --noverify setvcp 10 61
$ echo $?
0
$ ddcutil --bus 9 getvcp 10 --brief
VCP 10 C 61 100
Full checks with verification
$ ddcutil --bus 9 --verify setvcp 10 61
$ echo $?
0
$ ddcutil --bus 9 getvcp 10 --brief
VCP 10 C 61 100
Verification retry result
The hidden verification retry option succeeds consistently.
$ ddcutil --bus 9 --skip-ddc-checks --verify --i5 2 setvcp 10 61
$ echo $?
0
$ ddcutil --bus 9 getvcp 10 --brief
VCP 10 C 61 100
Three consecutive tests produced these results.
target=61 status=0 elapsed=624ms
target=62 status=0 elapsed=625ms
target=60 status=0 elapsed=623ms
final_observed=60
By contrast, two separate commands do not reproduce that success.
first_status=1 second_status=1 observed=60 target=61 elapsed=634ms
Both commands in that test used --skip-ddc-checks --verify without --i5.
Other tests
Forcing MCCS 2.2 did not help. Disabling dynamic sleep with fixed multipliers of 1.0 and 2.0 did not help. Every test that retained --skip-ddc-checks left the value unchanged unless --i5 2 was used.
Observed timings were approximately 113 ms for skipped checks without verification, 317 ms for skipped checks with verification, 932 ms for full checks without verification, and 1137 ms for full checks with verification.
Expected behavior
A verified Set VCP request should either apply the requested value or expose a supported retry mechanism that can recover without repeating full initialization on every CLI invocation.
Would it make sense for ddcutil to retry once after a verification mismatch in this case? If automatic retry is undesirable, could the verification retry count receive a stable public option instead of requiring the hidden --i5 option?
The downstream report is omacom/omarchy#8931.
I found #514, but that report appears different because skipped checks generally helped there while full checks failed.
Summary
On an LG UltraGear evo 27GM950B-B, a Set VCP brightness request is consistently ignored when
--skip-ddc-checksis used. The same request works when initial DDC checks are enabled.Verification reports
DDCRC_VERIFY, while--noverifyexits with status 0 even though the value does not change. A second verified attempt inside the same ddcutil process succeeds when the hidden--i5 2option is used. Running two separate verified commands does not succeed.This may indicate that the verification read primes the display and that the second write must reuse the same initialized display handle.
System
x02 x0120eee398The monitor reports VCP feature
0x10as writable with a range of 0 through 100.ddcutil-interrogate.txt
FAQ and development branch
I checked the project FAQ. DDC communication is enabled and full checked writes work. The documented picture mode cases do not explain why the result depends on
--skip-ddc-checks. The documented sleep multiplier guidance was also tested as described below.I built the current
2.2.8-devbranch at commit20eee398. The behavior is unchanged.Reproduction
Each case below started at 60 and was reset to 60 before the next case.
Skipped checks without verification
Skipped checks with verification
Full checks without verification
Full checks with verification
Verification retry result
The hidden verification retry option succeeds consistently.
Three consecutive tests produced these results.
By contrast, two separate commands do not reproduce that success.
Both commands in that test used
--skip-ddc-checks --verifywithout--i5.Other tests
Forcing MCCS 2.2 did not help. Disabling dynamic sleep with fixed multipliers of 1.0 and 2.0 did not help. Every test that retained
--skip-ddc-checksleft the value unchanged unless--i5 2was used.Observed timings were approximately 113 ms for skipped checks without verification, 317 ms for skipped checks with verification, 932 ms for full checks without verification, and 1137 ms for full checks with verification.
Expected behavior
A verified Set VCP request should either apply the requested value or expose a supported retry mechanism that can recover without repeating full initialization on every CLI invocation.
Would it make sense for ddcutil to retry once after a verification mismatch in this case? If automatic retry is undesirable, could the verification retry count receive a stable public option instead of requiring the hidden
--i5option?The downstream report is omacom/omarchy#8931.
I found #514, but that report appears different because skipped checks generally helped there while full checks failed.