ddcutil icon indicating copy to clipboard operation
ddcutil copied to clipboard

Laptop display freezes when running `ddcutil detect`

Open caioolivv opened this issue 4 months ago • 6 comments

Laptop display freezes when running ddcutil detect or most other ddcutil commands that probe this display. I've attached the output of both sudo ddcutil environment --verbose and sudo ddcutil interrogate (display also froze during this). Here's the output of sudo ddcutil detect:

Invalid display
   I2C bus:  /dev/i2c-4
   DRM_connector:           card1-eDP-1
   EDID synopsis:
      Mfg id:               LEN - Lenovo Group Limited
      Model:                LEN140WQ+
      Product code:         35523  (0x8ac3)
      Serial number:        
      Binary serial number: 0 (0x00000000)
      Manufacture year:     2024,  Week: 0
   This monitor does not support DDC/CI. (I2C slave address x37 is unresponsive.)

EDIT: running any ddcutil command will freeze the display, even if directed to another display. For example, running ddcutil -d 1 setvcp 10 100 to increase the brightness on the external display will freeze the internal display for a couple seconds.

environment.txt interrogate.txt

caioolivv avatar Oct 30 '25 00:10 caioolivv

The one thing that's peculiar in your interrogate output is that ddcutil learns of the laptop display on card1-dDP-1 and /dev/i2c-4 by querying /sys. However, trying to read the EDID directly from /dev/i2c-4 fails, and utility i2cdetect does not report any responsive slave addresses on /dev/i2c-4, in particular the EDID slave address (x50) is unresponsive.

When you say "freeze", do you mean that the laptop display becomes unresponsive to e.g. mouse clicks for some period of time and then becomes responsive again. Or is it something more permanent?

One possibility is that ddcutil is getting hung up in retries during display detection. Executing a command with option --stats will report if there are errors in DDC communication.

What happens if you use --disable try-get-edid-from-sysfs?

Try using option --bus 5. This will restrict DDC communication to that /dev/i2c bus and skip the detection phase. For any other display selection option, e.g. --display 1, ddcutil has to check all (plausible) /dev/i2c devices to create the display list.

rockowitz avatar Nov 03 '25 15:11 rockowitz

I'm not able to test these commands right now, but in a few hours I'll update this comment with their output.

As for what I mean with "freeze", it depends. Generally the image is frozen for a couple seconds. The system is still responsive, for example, I can move the pointer to another display, open apps, reboot the system, etc. The screen just isn't updated during that time. Rarely though, it will become permanently stuck (while the system is still responsive) until I reboot.

caioolivv avatar Nov 03 '25 15:11 caioolivv

I'm not able to test these commands right now, but in a few hours I'll update this comment with their output.

As for what I mean with "freeze", it depends. Generally the image is frozen for a couple seconds. The system is still responsive, for example, I can move the pointer to another display, open apps, reboot the system, etc. The screen just isn't updated during that time. Rarely though, it will become permanently stuck (while the system is still responsive) until I reboot.

Here are the output of sudo ddcutil detect --stats, sudo ddcutil interrogate --stats, and sudo ddcutil environment --verbose --stats.

I've also tried running these commands and sudo ddcutil -d 1 setvcp 10 100 with --disable-try-get-edid-from-sysfs, to no effect. However, using ddcutil -b 5 setvcp 10 100 seems to avoid the freezing entirely! That way I can at least manually use ddcutil. The problem now is that basically every gnome extension that uses ddcutil will not use that option and will cause the freezing. Any chance that can be fixed on ddcutil itself?

detect_stats.txt environment_stats.txt interrogate_stats.txt

caioolivv avatar Nov 03 '25 23:11 caioolivv

I'm afraid I don't see what to fix here. You're running CachyOS on an old IdeaPad; I'd need a similar system to diagnose further. I can say that I've run ddcutil on many different ThinkPads over the years with no such problem. As an Arch derivative your kernel and drivers may well have been compiled with some unusual options. It would be interesting to learn if the problem persists if you boot from a live image of e.g. Ubuntu, install ddcutil there, and see if the problem persists.

rockowitz avatar Nov 07 '25 15:11 rockowitz

Hey, I'm actually running bare Arch, just have CachyOS repos enabled. I can try to use arch's basic kernel or boot up a Fedora live image, if you think it can help diagnose. Also, this is a new Ideapad Pro 5 Gen 10 and I it is the one of the few new Strix Point Lenovo laptops (I've already ran into some bugs on GDM because of this CPU). From what I saw, I also think this screen is not on any other of their laptops, so maybe this new hardware may be causing this bug?

caioolivv avatar Nov 10 '25 18:11 caioolivv

Hello! I noticed a similar display freeze on my Framework 13 using Fedora 43 on kernel 6.17.10. I'm using https://github.com/daitj/gnome-display-brightness-ddcutil to control display brightness when connected to external displays but seems similar to @caioolivv report as any ddcutil command will freeze the display when executed. I've attached the output of the detect, interrogate and environment commands below.

environment_stats.txt interrogate_stats.txt detect_stats.txt

I can also see the following errors in the system journal when these freezes are triggered by the gnome extension:

Dec 12 18:47:13 OFR ddcutil[10203]: [ 10203] /dev/i2c-2, Checking EDID failed after 3 tries (B)
Dec 12 18:47:12 OFR ddcutil[10203]: [ 10203] (i2c_check_open_bus_alive) Retrying i2c_check_edid_exists_by_dh() (c): Sleeping for 1000 milliseconds
Dec 12 18:47:11 OFR ddcutil[10203]: [ 10203] (i2c_check_open_bus_alive) Retrying i2c_check_edid_exists_by_dh() (c): Sleeping for 1000 milliseconds
Dec 12 18:47:11 OFR ddcutil[10203]: No traced function stack for current thread
Dec 12 18:47:11 OFR ddcutil[10203]: Traced function stack on entry to i2c_check_open_bus_alive()
Dec 12 18:47:11 OFR ddcutil[10203]: [ 10203] Error detecting VCP version using VCP feature xDF: Error_Info[DDCRC_DISCONNECTED in i2c_check_open_bus_alive]
Dec 12 18:47:11 OFR ddcutil[10203]: [ 10203] /dev/i2c-2, Checking EDID failed after 3 tries (B)
Dec 12 18:47:10 OFR ddcutil[10203]: [ 10203] (i2c_check_open_bus_alive) Retrying i2c_check_edid_exists_by_dh() (c): Sleeping for 1000 milliseconds
Dec 12 18:47:09 OFR ddcutil[10203]: [ 10203] (i2c_check_open_bus_alive) Retrying i2c_check_edid_exists_by_dh() (c): Sleeping for 1000 milliseconds
Dec 12 18:47:09 OFR ddcutil[10203]: No traced function stack for current thread
Dec 12 18:47:09 OFR ddcutil[10203]: Traced function stack on entry to i2c_check_open_bus_alive()

oscarsommerer avatar Dec 12 '25 18:12 oscarsommerer