diff --git a/man/logind.conf.xml b/man/logind.conf.xml
index 56981c1837..6cb41b6955 100644
--- a/man/logind.conf.xml
+++ b/man/logind.conf.xml
@@ -343,10 +343,11 @@
StopIdleSessionSec=
Specifies a timeout in seconds, or a time span value after which
- systemd-logind checks the idle state of all sessions. Every session that is idle for
- longer then the timeout will be stopped. Defaults to infinity
- (systemd-logind is not checking the idle state of sessions). For details about the syntax
- of time spans, see
+ systemd-logind checks the idle state of all sessions. Every session that is idle
+ for longer than the timeout will be stopped. Note that this option doesn't apply to
+ greeter or lock-screen sessions. Defaults to
+ infinity (systemd-logind is not checking the idle state
+ of sessions). For details about the syntax of time spans, see
systemd.time7.
diff --git a/src/login/logind-session.c b/src/login/logind-session.c
index 4edc4b9b88..9ec7bd3344 100644
--- a/src/login/logind-session.c
+++ b/src/login/logind-session.c
@@ -713,7 +713,7 @@ static int session_setup_stop_on_idle_timer(Session *s) {
assert(s);
- if (s->manager->stop_idle_session_usec == USEC_INFINITY)
+ if (s->manager->stop_idle_session_usec == USEC_INFINITY || !SESSION_CLASS_CAN_STOP_ON_IDLE(s->class))
return 0;
r = sd_event_add_time_relative(
diff --git a/src/login/logind-session.h b/src/login/logind-session.h
index 0557696761..955cd7de92 100644
--- a/src/login/logind-session.h
+++ b/src/login/logind-session.h
@@ -26,6 +26,9 @@ typedef enum SessionClass {
_SESSION_CLASS_INVALID = -1
} SessionClass;
+/* Which sessions classes should be subject to stop-in-idle */
+#define SESSION_CLASS_CAN_STOP_ON_IDLE(class) (IN_SET((class), SESSION_USER))
+
typedef enum SessionType {
SESSION_UNSPECIFIED,
SESSION_TTY,