https://bugs.kde.org/show_bug.cgi?id=520940
Bug ID: 520940
Summary: PowerDevil 6.6.3 turns the display off after idle
despite TurnOffDisplayWhenIdle=false in powerdevilrc
Classification: Plasma
Product: plasmashell
Version First 6.6.3
Reported In:
Platform: Other
OS: Linux
Status: REPORTED
Severity: normal
Priority: NOR
Component: Power management & brightness
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: 1.0
I have a single-display workstation that should never sleep, dim, or DPMS-off.
I set the documented KConfigXT keys in ~/.config/powerdevilrc to disable the
action, and I confirmed PowerDevil reads them (kreadconfig6 returns the values
I wrote). The display still turns off at variable intervals anyway.
My config
=========
~/.config/powerdevilrc:
[AC]
TurnOffDisplayWhenIdle=false
DimDisplayWhenIdle=false
LockBeforeTurnOffDisplay=false
TurnOffDisplayIdleTimeoutSec=2147483647
TurnOffDisplayIdleTimeoutWhenLockedSec=2147483647
DimDisplayIdleTimeoutSec=2147483647
AutoSuspendIdleTimeoutSec=2147483647
RunScriptIdleTimeoutSec=2147483647
AutoSuspendAction=0
LidAction=0
PowerButtonAction=0
(same block repeated under [Battery] and [LowBattery]).
Verified PowerDevil reads the config
====================================
$ kreadconfig6 --file powerdevilrc --group AC --key TurnOffDisplayWhenIdle
false
$ kreadconfig6 --file powerdevilrc --group AC --key
TurnOffDisplayIdleTimeoutSec
2147483647
$ kreadconfig6 --file powerdevilrc --group AC --key AutoSuspendAction
0
The key names match the upstream KConfigXT schema at
daemon/PowerDevilProfileSettings.kcfg.
What I see
==========
DPMS off events captured from /sys/class/drm/card0-HDMI-A-1/dpms over a few
hours of idle:
17:03:46 Off
17:09:57 On
18:10:05 Off
18:10:49 On
18:38:42 Off
19:24:36 On
19:35:50 Off
20:16:50 On
Intervals are irregular (10 min, then ~60 min, then ~10 min). OFF durations
also vary (44 s to 46 min). I am the only user; input is consistent.
Each DPMS off is preceded by an org.freedesktop.login1 signal
=============================================================
dbus-monitor --system (filtered to login1) shows, about 1 second before each
DPMS off:
signal sender=:1.9 ... interface=org.freedesktop.DBus.Properties;
member=PropertiesChanged
string "org.freedesktop.login1.Manager"
array [ dict entry( string "DelayInhibited" variant string "sleep" ) ]
This pattern repeats at every DPMS off event. The signal fires twice within
~250 ms each time.
What I see in PowerDevil's own log
==================================
At the moment of DPMS off:
qt.qpa.wayland: There are no outputs - creating placeholder screen
Watching for display connection changes, resolved watch mode =
Watch_Mode_Udev, poll loop interval = 500 millisec
And at start-up:
Watching for DPMS state changes unimplemented
PowerDevil itself observes the output disappearing (KWin Wayland disables it),
so it does not log the explicit turn-off command, but its own action plugin is
what is registered with KIdleTime to fire after the configured timeout, and the
timeout fires anyway despite the bool toggle and INT_MAX value.
Not a system suspend
====================
The kernel does NOT enter S3 or s2idle. dmesg -w shows zero "PM: suspend entry"
/ "ACPI: PM:" lines around any of the events above. Polkit on this system
additionally denies org.freedesktop.login1.Manager.Suspend (CanSuspend returns
no), and elogind IdleAction=ignore, so system-level suspend is structurally
impossible. This is purely the compositor-level display-off action firing.
STEPS TO REPRODUCE
==================
1. Single-display workstation running Plasma 6.6.3 / KWin 6.6.3 / PowerDevil
6.6.3, Wayland session.
2. Put this in ~/.config/powerdevilrc:
[AC]
TurnOffDisplayWhenIdle=false
TurnOffDisplayIdleTimeoutSec=2147483647
AutoSuspendAction=0
LidAction=0
PowerButtonAction=0
3. Restart powerdevil:
pkill -f /usr/libexec/org_kde_powerdevil && setsid
/usr/libexec/org_kde_powerdevil &
4. Verify the values are read:
kreadconfig6 --file powerdevilrc --group AC --key TurnOffDisplayWhenIdle
returns false.
5. Leave the system idle (no input).
OBSERVED RESULT
===============
After a variable amount of idle time (observed: 10 minutes the first cycle,
then irregular thereafter), the HDMI output is disabled (DPMS off) and
PowerDevil log shows "There are no outputs". A DelayInhibited="sleep"
PropertiesChanged signal fires on login1 system bus about 1 second before each
DPMS off.
EXPECTED RESULT
===============
With TurnOffDisplayWhenIdle=false AND TurnOffDisplayIdleTimeoutSec=2147483647,
PowerDevil should not register any idle-timeout-driven display-off action, and
the display should remain on for the entire idle period.
SOFTWARE/OS VERSIONS
====================
Plasma Workspace : 6.6.3
plasma-desktop : 6.6.3
KWin : 6.6.3
PowerDevil : 6.6.3
kdeplasma-addons : 6.6.3
Qt6 : 6.10.2
Mesa : 26.0.6
Kernel : 6.18.33 (Void Linux glibc x86_64)
GPU : AMD Ryzen 7 5700G iGPU (Cezanne, amdgpu driver)
CPU : AMD Ryzen 7 5700G with Radeon Graphics
Display : single HDMI (HDMI-A-1)
Session : Wayland (XDG_SESSION_TYPE=wayland, XDG_CURRENT_DESKTOP=KDE)
Distro : Void Linux (vanilla upstream Plasma packages, not enumerated
in Bugzilla so platform is set to Other)
elogind : present and used (no systemd)
WHAT I ALREADY TRIED
====================
1. Wrote the old KDE-4-style nested config ([AC][DPMSControl] idleTime=0). DPMS
off still happened on a precise 10-minute timer.
2. Switched to the Plasma 6 flat schema with idleTime keys replaced by
TurnOffDisplayIdleTimeoutSec=0 and TurnOffDisplayWhenIdle=false. DPMS off still
happened (suspecting 0 was treated as "use compiled default").
3. Set TurnOffDisplayIdleTimeoutSec to 2147483647 (INT_MAX, ~68 years). DPMS
off STILL happened, irregularly.
4. Set kscreenlockerrc Autolock=false, Timeout=2147483647. No effect on DPMS.
5. Set polkit denial for org.freedesktop.login1.Manager.Suspend (so this is
provably NOT a kernel suspend round-trip).
6. Set elogind IdleAction=ignore, HandleSuspendKey=ignore, etc.
7. Restarted PowerDevil after each config change.
PowerDevil reads the config correctly per kreadconfig6, but the DPMSControl
action plugin still fires.
Pointers in upstream source for triage
======================================
- daemon/PowerDevilProfileSettings.kcfg defines both TurnOffDisplayWhenIdle
(Bool) and TurnOffDisplayIdleTimeoutSec (Int).
- daemon/actions/dpms (powerdevil_dpmsaction.so) symbols include
registerIdleTimeout, unregisterIdleTimeouts, turnOffOnIdleTimeout. The action
plugin appears to register an idle timer regardless of the boolean toggle.
It looks like the action plugin should either (a) not register an idle timer
when TurnOffDisplayWhenIdle=false, or (b) treat a very large
TurnOffDisplayIdleTimeoutSec value as "do nothing" rather than registering a
sane-looking idle timer. Currently neither path appears to be honored.
Related (not a duplicate of)
============================
- Bug #369129 ("Powerdevil does not provide a way to inhibit display turn-off",
CONFIRMED, wishlist) is about a missing dbus inhibit API. The current bug is
about the documented configuration keys themselves being silently ignored.
--
You are receiving this mail because:
You are watching all bug changes.