NOTE: I had this bug report generated by Claude (I personally confirmed the accuracy of the system information and the fix it gave). Originally posted at https://discuss.cachyos.org/t/plasmashell-hangs-on-login-due-to-brightness-applet-qml-error-with-non-standard-monitor-vcp-range/35250 System: CachyOS, kernel 7.2.2-1-cachyos plasma-workspace 6.7.4-3.1, plasma-desktop 6.7.4-1.1, plasmashell 6.7.4 Session: Wayland (plasma.desktop) GPU: AMD Radeon RX 7700 XT/7800 XT (Navi 32) Dual external monitor setup, no laptop panel (/sys/class/backlight is empty): Display 1: Dell U2415 (DDC/CI VCP 2.1) - brightness VCP 0x10: current=85, max=100 (normal) Display 2: Samsung Odyssey G60SF (DDC/CI VCP 2.0) - brightness VCP 0x10: current=50, max=50 (non-standard - most monitors report max=100) Symptom: plasmashell hangs completely on every login/restart - taskbar and panel become totally unresponsive to mouse input within seconds of starting. The main plasmashell thread pegs at 100-140% CPU indefinitely (state R, “running”, not blocked/sleeping) and never recovers on its own. Confirmed reproducible: killing and restarting plasmashell (via systemctl --user restart plasma-plasmashell.service) reproduces the exact same hang every time, including immediately after a full system reboot. Relevant log output (journalctl --user -u plasma-plasmashell.service), appearing right before the hang begins each time: qrc:/qt/qml/plasma/applet/org/kde/plasma/brightness/PopupDialog.qml:96: TypeError: Value is null and could not be converted to an object No further errors are logged after this - CPU just stays pegged with no new output, consistent with an infinite QML property-binding loop rather than a blocked I/O call (confirmed separately: raw ddcutil getvcp 10 against both monitors returns correctly in ~1s each, so DDC/CI communication itself is not the bottleneck). Suspected root cause: The org.kde.plasma.brightness systray applet’s PopupDialog.qml appears to mishandle a monitor whose VCP 0x10 max value is not 100 (Display 2 above reports max=50). This is likely producing a null somewhere in a list/model derived from the brightness range (e.g. quick-set presets, step calculation, or percentage mapping), which QML’s TypeError doesn’t crash on but instead re-evaluates in a tight binding loop, pegging the main thread forever. Reproduction steps: Have at least one DDC/CI-controlled external monitor whose VCP 0x10 max value != 100 (e.g. Samsung Odyssey G60SF reports max=50). Log into a Plasma 6.7.4 Wayland session with the default systray brightness applet enabled. plasmashell hangs (100%+ CPU on main thread) within seconds; taskbar/panel become unresponsive. Workaround currently in use: Renamed /usr/lib/qt6/plugins/plasma/applets/org.kde.plasma.brightness.so to org.kde.plasma.brightness.so.disabled, forcing the applet to fail to load instead of hanging. This removes the brightness slider from the systray entirely (powerdevil’s hardware brightness-key handling is a separate plugin and is unaffected) but is not a real fix and will presumably be undone by the next plasma-workspace package update.
> Samsung Odyssey G60SF On no, this one again! The Samsung Odyssey monitors are notorious for, shall we say, doing things their own way and breaking assumptions that hold true for everything else. So I'm not terribly surprised.
(In reply to Nate Graham from comment #1) > > Samsung Odyssey G60SF > On no, this one again! The Samsung Odyssey monitors are notorious for, shall > we say, doing things their own way and breaking assumptions that hold true > for everything else. So I'm not terribly surprised. I'm not surprised. This monitor has been quite the adventure. I hope it isn't too much of a pain to fix
qrc:/qt/qml/plasma/applet/org/kde/plasma/brightness/PopupDialog.qml:96 is: itemAt(index - 1).nextSlider = item; in an imperative part that executes once when a slider is added. It is a real error, but i don't think is related to the freeze in particular, which is probably a layouting loop
A possibly relevant merge request was started @ https://invent.kde.org/plasma/powerdevil/-/merge_requests/680
A possibly relevant merge request was started @ https://invent.kde.org/plasma/powerdevil/-/merge_requests/681
Fixed by Marco with https://invent.kde.org/plasma/powerdevil/-/merge_requests/680 in Plasma 6.8.0.
Git commit 67f3f40da87adb58b88e897a763e37bd0ab88c37 by Marco Martin. Committed on 15/09/2026 at 13:52. Pushed by mart into branch 'master'. Brightness Applet: avoid binding loops resizing every child item to the ScrollView available width changes The Column implicit width, which in turn changes the Flickable contentWidth, sometimes causing the horizontal scrollbar to appear changing the availablesize causing relayouts, which if they change the height for the "right" height to show/hide the vertical scrollbar, this will cause the avaiable height to change as well, causing an infinite loop. Use a ColumnLayout with the items in it to be fillwidth and always hide the horizontal scrollbar M +9 -6 applets/brightness/PopupDialog.qml https://invent.kde.org/plasma/powerdevil/-/commit/67f3f40da87adb58b88e897a763e37bd0ab88c37
Git commit b907df475f7658d79bf3fcd0802684b822e0adde by Marco Martin. Committed on 15/09/2026 at 13:55. Pushed by mart into branch 'Plasma/6.8'. Brightness Applet: avoid binding loops resizing every child item to the ScrollView available width changes The Column implicit width, which in turn changes the Flickable contentWidth, sometimes causing the horizontal scrollbar to appear changing the availablesize causing relayouts, which if they change the height for the "right" height to show/hide the vertical scrollbar, this will cause the avaiable height to change as well, causing an infinite loop. Use a ColumnLayout with the items in it to be fillwidth and always hide the horizontal scrollbar (cherry picked from commit 67f3f40da87adb58b88e897a763e37bd0ab88c37) 247b7b4f Brightness Applet: avoid binding loops Co-authored-by: Marco Martin <notmart@gmail.com> M +9 -6 applets/brightness/PopupDialog.qml https://invent.kde.org/plasma/powerdevil/-/commit/b907df475f7658d79bf3fcd0802684b822e0adde