mirror of
https://github.com/systemd/systemd.git
synced 2024-11-07 09:56:51 +03:00
loginctl: use $XDG_SESSION_ID for "our" session
Instead of always letting logind guess what the caller's session is, let's give it the value from $XDG_SESSION_ID when it is present in the caller's environment. Nowadays terminal emulators are often running as services under systemd --user, and not as part of an actual session, so all loginctl calls which depend on logind guessing the session will fail. I don't see a reason not to honour $XDG_SESSION_ID. This applies to LockSession, UnlockSession, TerminateSession, ActivateSession, SetUserLinger. Fixes #6032.
This commit is contained in:
parent
cf82fda94e
commit
bdb07fa5ac
@ -1074,12 +1074,11 @@ static int activate(int argc, char *argv[], void *userdata) {
|
||||
polkit_agent_open_if_enabled();
|
||||
|
||||
if (argc < 2) {
|
||||
/* No argument? Let's convert this into the empty
|
||||
* session name, which the calls will then resolve to
|
||||
* the caller's session. */
|
||||
/* No argument? Let's either use $XDG_SESSION_ID (if specified), or an empty
|
||||
* session name, in which case logind will try to guess our session. */
|
||||
|
||||
short_argv[0] = argv[0];
|
||||
short_argv[1] = (char*) "";
|
||||
short_argv[1] = getenv("XDG_SESSION_ID") ?: (char*) "";
|
||||
short_argv[2] = NULL;
|
||||
|
||||
argv = short_argv;
|
||||
@ -1155,8 +1154,11 @@ static int enable_linger(int argc, char *argv[], void *userdata) {
|
||||
b = streq(argv[0], "enable-linger");
|
||||
|
||||
if (argc < 2) {
|
||||
/* No argument? Let's either use $XDG_SESSION_ID (if specified), or an empty
|
||||
* session name, in which case logind will try to guess our session. */
|
||||
|
||||
short_argv[0] = argv[0];
|
||||
short_argv[1] = (char*) "";
|
||||
short_argv[1] = getenv("XDG_SESSION_ID") ?: (char*) "";
|
||||
short_argv[2] = NULL;
|
||||
argv = short_argv;
|
||||
argc = 2;
|
||||
|
Loading…
Reference in New Issue
Block a user