Fixing a multi-monitor display issue with AI

AI shines in value in debugging when you know what you are doing

I recently upgraded to cachy-os, and I have an older laptop (circa 2019), that I still daily drive. It’s not the best at many tasks, but for my purpose of writing small scripts and projects + browsing the web, it works just fine. I ran into a very specific issue that bugged me like crazy, enough to tinker - when I connected it to a dock on a USB port, my displays would just refuse to work properly.

The symptoms included:

  • The bottom desktop bar (KDE Plasma panel) vanished completely.

  • Active application windows were lost in ghost coordinates.

  • The desktop environment (plasmashell) crashed on startup with TypeError: Value is null warnings.

Context:

I have two 2K monitors that can run at 144Hz, connected to a dock(fun fact - its a dell WD19DCS that I got for $30) via DP, which connects to my USB 3.1 port. All my peripherals also go in there. Not enough bandwidth to handle it all.

1
2
3
lspci | grep -i usb
08:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1
08:00.4 USB controller: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1

Even though the Linux kernel uses the classic classification USB 3.1 in that text string, the specific architecture of the AMD Renoir/Cezanne hardware block means these controllers run at a maximum line speed of 10Gbps (historically called USB 3.1 Gen 2, now officially known as USB 3.2 Gen 2). Thanks USB forum, very cool.

How did I debug this?

always check the logs first

first, we check kernel logs:

1
2

sudo dmesg -w

A ton of noise here, for sure:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 --user -b 0 -e -u plasma-kwin_wayland

Jul 17 16:49:16 karanpc kwin_wayland[4013]: Atomic modeset commit failed! Invalid argument

Jul 17 16:49:29 karanpc kwin_wayland_wrapper[536167]: xkbcommon: ERROR: [XKB-679] No Compose file for locale "en_IN.ISO8859-1": locale is either invalid or not installed

Jul 17 16:49:29 karanpc kwin_wayland_wrapper[536167]: xkbcommon: ERROR: [XKB-679] couldn't find a Compose file for locale "en_IN" (mapped to "en_IN.ISO8859-1")

Jul 17 16:49:29 karanpc kscreenlocker_greet[536167]: failed to create compose table

Jul 17 16:49:31 karanpc kwin_wayland[4013]: qrc:/qt/qml/org/kde/kwin/overview/qml/Main.qml:851:5: QML Connections: Implicitly defined onFoo properties in Connections are deprecated. U>

Jul 17 16:49:31 karanpc kwin_wayland[4013]: qrc:/qt/qml/org/kde/kwin/overview/qml/Main.qml:851:5: QML Connections: Implicitly defined onFoo properties in Connections are deprecated. U>

Jul 17 16:49:31 karanpc kwin_wayland[4013]: qrc:/qt/qml/org/kde/kwin/overview/qml/Main.qml:851:5: QML Connections: Implicitly defined onFoo properties in Connections are deprecated. U>

Jul 17 16:49:33 karanpc kwin_wayland[4013]: Could not delete render time query because no context is current

Jul 17 16:49:33 karanpc kwin_wayland[4013]: Could not delete render time query because no context is current

Jul 17 16:49:33 karanpc kwin_wayland[4013]: Could not delete render time query because no context is current

Jul 17 16:51:17 karanpc kwin_wayland[4013]: Failed to open drm device 

Jul 17 16:51:17 karanpc kwin_wayland[4013]: Failed to open drm device 

Jul 17 16:51:17 karanpc kwin_wayland[4013]: Failed to open drm device 

Jul 17 16:51:18 karanpc kscreenlocker_greet[537986]: There are no outputs - creating placeholder screen

Jul 17 16:51:23 karanpc kwin_wayland_wrapper[537986]: xkbcommon: ERROR: [XKB-679] No Compose file for locale "en_IN.ISO8859-1": locale is either invalid or not installed

Jul 17 16:51:23 karanpc kwin_wayland_wrapper[537986]: xkbcommon: ERROR: [XKB-679] couldn't find a Compose file for locale "en_IN" (mapped to "en_IN.ISO8859-1")

Jul 17 16:51:23 karanpc kscreenlocker_greet[537986]: failed to create compose table

Jul 17 16:51:41 karanpc kwin_wayland[4013]: qrc:/qt/qml/org/kde/kwin/overview/qml/Main.qml:851:5: QML Connections: Implicitly defined onFoo properties in Connections are deprecated. U>

Jul 17 16:51:41 karanpc kwin_wayland[4013]: qrc:/qt/qml/org/kde/kwin/overview/qml/Main.qml:851:5: QML Connections: Implicitly defined onFoo properties in Connections are deprecated. U>

Jul 17 16:51:41 karanpc kwin_wayland[4013]: qrc:/qt/qml/org/kde/kwin/overview/qml/Main.qml:851:5: QML Connections: Implicitly defined onFoo properties in Connections are deprecated. U>

Jul 17 16:51:43 karanpc kwin_wayland[4013]: Could not delete render time query because no context is current

Jul 17 16:51:43 karanpc kwin_wayland[4013]: Could not delete render time query because no context is current

Jul 17 16:51:43 karanpc kwin_wayland[4013]: Could not delete render time query because no context is current

Jul 17 16:53:18 karanpc kwin_wayland[4013]: Libinput: event0  - Power Button: client bug: event processing lagging behind by 3040ms, your system is too slow

Jul 17 16:53:18 karanpc kwin_wayland[4013]: Libinput: event12 - Logitech USB Receiver Mouse: client bug: event processing lagging behind by 355ms, your system is too slow

Jul 17 16:53:18 karanpc kwin_wayland[4013]: Failed to open drm device 

Jul 17 16:53:18 karanpc kwin_wayland[4013]: Failed to open drm device 

Jul 17 16:53:18 karanpc kwin_wayland[4013]: Failed to open drm device 

Jul 17 16:53:20 karanpc kwin_wayland[4013]: Failed to open /dev/input/event10 device (No such device)

Jul 17 16:53:26 karanpc kwin_wayland_wrapper[540429]: xkbcommon: ERROR: [XKB-679] No Compose file for locale "en_IN.ISO8859-1": locale is either invalid or not installed

Jul 17 16:53:26 karanpc kwin_wayland_wrapper[540429]: xkbcommon: ERROR: [XKB-679] couldn't find a Compose file for locale "en_IN" (mapped to "en_IN.ISO8859-1")

Jul 17 16:53:26 karanpc kscreenlocker_greet[540429]: failed to create compose table

Jul 17 16:53:29 karanpc kwin_wayland[4013]: qrc:/qt/qml/org/kde/kwin/overview/qml/Main.qml:851:5: QML Connections: Implicitly defined onFoo properties in Connections are deprecated. U>

Jul 17 16:53:29 karanpc kwin_wayland[4013]: qrc:/qt/qml/org/kde/kwin/overview/qml/Main.qml:851:5: QML Connections: Implicitly defined onFoo properties in Connections are deprecated. U>

Jul 17 16:53:30 karanpc kwin_wayland[4013]: Could not delete render time query because no context is current

Jul 17 16:53:30 karanpc kwin_wayland[4013]: Could not delete render time query because no context is current

Jul 17 16:53:30 karanpc kwin_wayland[4013]: Could not delete render time query because no context is current

Jul 17 16:59:23 karanpc kwin_wayland[4013]: qrc:/qt/qml/org/kde/kwin/overview/qml/Main.qml:851:5: QML Connections: Implicitly defined onFoo properties in Connections are deprecated. U>

Jul 17 16:59:23 karanpc kwin_wayland[4013]: qrc:/qt/qml/org/kde/kwin/overview/qml/Main.qml:851:5: QML Connections: Implicitly defined onFoo properties in Connections are deprecated. U>

Jul 17 16:59:23 karanpc kwin_wayland[4013]: qrc:/qt/qml/org/kde/kwin/overview/qml/Main.qml:851:5: QML Connections: Implicitly defined onFoo properties in Connections are deprecated. U>

Jul 17 16:59:24 karanpc kwin_wayland[4013]: Could not delete render time query because no context is current

Jul 17 16:59:24 karanpc kwin_wayland[4013]: Could not delete render time query because no context is current

Jul 17 16:59:24 karanpc kwin_wayland[4013]: Could not delete render time query because no context is current 

A lot about display, isn’t it?

1
kscreen-doctor --outputs

Checking this shows what resolution and refresh rate we are set at.

how to know which driver is causing this? the max noise is from the gpu driver:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Validation Warning: Unknown Status failed validation.

[425080.040455] amdgpu 0000:08:00.0: [drm] Mode Validation Warning: Unknown Status failed validation.

[425080.046980] amdgpu 0000:08:00.0: [drm] Mode Validation Warning: Unknown Status failed validation.

[425080.051484] amdgpu 0000:08:00.0: [drm] Mode Validation Warning: Unknown Status failed validation.

[425086.121387] [UFW BLOCK] IN=wlan0 OUT= MAC=f0:a6:54:62:00:4b:4c:0f:3e:59:fc:2c:86:dd SRC=fe80:0000:0000:0000:4d48:62ef:06de:76e0 DST=ff02:0000:0000:0000:0000:0000:0001:0003 LEN=70 TC=0 HOPLIMIT=1 FLOWLBL=731061 PROTO=UDP SPT=49340 DPT=5355 LEN=30 MARK=0x3214 

[425098.487271] [UFW BLOCK] IN=wlan0 OUT= MAC=f0:a6:54:62:00:4b:3c:64:cf:3b:e6:44:08:00 SRC=192.168.68.1 DST=192.168.68.60 LEN=375 TOS=0x00 PREC=0x00 TTL=64 ID=50401 DF PROTO=UDP SPT=1900 DPT=1900 LEN=355 MARK=0x3214 

[425109.966692] [drm] MST_DSC Send DSC disable to synaptics 
1
2
journalctl --user -b 0 -e -u plasma-kwin_wayland
kscreen-doctor --outputs

Now, I could have google searched and read forums - but gemini flash gave me 2-3 options, and I used my discernment to check the most plausible cause.

Here’s the model output that I would have spent an unhealthy amount of time figuring out without AI doing all this reading:

1
2
3
4
5
6
7
8
KWin Atomic Modeset Failures

Your journalctl shows this critical error:
kwin_wayland[4013]: Atomic modeset commit failed! Invalid argument

When KWin (the window manager) tries to paint the desktop space across those high-refresh displays, the graphics driver returns an invalid argument because the configuration is physically impossible on that link. When an atomic commit fails in Wayland, KWin drops the output or maps it incorrectly.

Because the system thinks the display topology is invalid, Plasma deletes or misplaces your bottom panel layout, and your windows get rendered into an invisible coordinate space (which is why apps are missing).

The fix:

1
kscreen-doctor output.DP-5.mode.2 output.DP-6.mode.59

and then, clear the plasma cache

1
2
3
killall -9 plasmashell
rm -rf ~/.cache/plasmashell*
mv ~/.config/plasma-org.kde.plasma.desktop-appletsrc ~/.config/plasma-org.kde.plasma.desktop-appletsrc.bak

Then, log out, and log back in, or a simple restart.

RCA:

AMD hardware dealt with the bottleneck of USB 3.2 by using a built-in feature of the processor called Display Stream Compression (DSC). Under the hood, the chip compresses the display data, sends it over the 10Gbps link to the dock, and the dock decompresses it to show on the screens. When the screens were set to 144Hz/165Hz, the compression engine couldn’t squeeze the data down small enough to fit into that 10Gbps lane, causing the graphics stack to collapse. Dropping to 60Hz brought the raw data footprint small enough that the AMD controller could comfortably manage it without a single error! yay :D

The amdgpu kernel driver flooded the system logs with Mode Validation Warning: Unknown Status failed validation errors and rejected the display configuration.

Since the atomic modeset commits failed at the hardware layer, the window manager (kwin) passed invalid screen coordinate spaces (like display geometry -1) to KDE Plasma, crashing the UI shell.

And yes, I run on 60hz now on really capable monitors, but its old hardware, I’d rather have a working display rather than a finicky one :D

I can estimate I saved atleast 2-3 hours with gemini flash doing the heavy lifting of the analysis. very cool.

Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy