]> git.ipfire.org Git - thirdparty/systemd.git/commit - src/login/logind-session-dbus.c
logind: refuse overriding idle hint on tty sessions
authorLennart Poettering <lennart@poettering.net>
Mon, 6 Jan 2020 19:13:16 +0000 (20:13 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 14 Jan 2020 15:11:39 +0000 (16:11 +0100)
commitbe2bb14f00441d9e4a26f94834518db3829e83ed
treee8e8c31925324d8d59e0fb53098e0a980cdfbee1
parent952805a9e32e418aa8c76919a671705c84b96edf
logind: refuse overriding idle hint on tty sessions

Previously we'd allow marking TTY sessions as idle, but when the user
tried to unmark it as idle again it we'd just revert to automatic TTY
atime idle detection, thus making it impossible to mark the session as
non-idle, unless its TTY is atime-touched all the time. But of course,
marking a session as idle is pretty much fatal if you never can mark it
as non-idle again.

This change is triggred by bug reports such as this:

https://github.com/systemd/systemd/issues/14053

With this patch we will now output a clean, clear error message if a
client tries to manipulate the idle state of a non-graphical session.
This means we now have clear rules: "manual" idle logic for graphical
sessions, and TTY based ones for all others that have a TTY of some
form.

I considered allowing the idle state to be overriden both ways for tty
sessions but that's problematic: for sessions that are temporarily
upgraded from tty to graphical and thus suddenly want to manage their
own idle state we'd need to a way to detect when the upgrade goes away
and thus we should revert to old behaviour. Without reverting to the
previous TTY idle auto-magic we'd otherwise be stuck in an eternally
idle or eternally non-idle state, with really bad effects in case
auto-suspend is used. Thus, let's instead generate a proper error
message, saying clearly we don't support it.

(Also includes some other fixes and clean-ups in related code)

Closes: #14053
src/login/logind-session-dbus.c
src/login/logind-session.c
src/login/logind-session.h