Bug 525216 - Plasmashell hangs on login due to brightness applet QML error with non-standard monitor VCP range on Samsung Odyssey G60SF
Summary: Plasmashell hangs on login due to brightness applet QML error with non-standa...
Status: RESOLVED FIXED
Alias: None
Product: plasmashell
Classification: Plasma
Component: Brightness and Color widget (other bugs)
Version First Reported In: 6.7.4
Platform: CachyOS Linux
: VHI grave
Target Milestone: 1.0
Assignee: Plasma Bugs List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2026-09-04 17:19 UTC by Ethan Charles
Modified: 2026-09-15 16:00 UTC (History)
6 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In: 6.8.0
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ethan Charles 2026-09-04 17:19:53 UTC
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.
Comment 1 Nate Graham 2026-09-08 19:26:04 UTC
> 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.
Comment 2 Ethan Charles 2026-09-08 19:29:43 UTC
(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
Comment 3 Marco Martin 2026-09-15 09:11:53 UTC
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
Comment 4 Bug Janitor Service 2026-09-15 12:39:06 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/powerdevil/-/merge_requests/680
Comment 5 Bug Janitor Service 2026-09-15 13:55:52 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/powerdevil/-/merge_requests/681
Comment 6 Nate Graham 2026-09-15 14:07:57 UTC
Fixed by Marco with https://invent.kde.org/plasma/powerdevil/-/merge_requests/680 in Plasma 6.8.0.
Comment 7 Marco Martin 2026-09-15 14:21:25 UTC
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
Comment 8 Marco Martin 2026-09-15 16:00:26 UTC
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