diff options
author | Lennart Poettering <lennart@poettering.net> | 2020-01-21 13:43:04 +0100 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2020-01-22 15:36:35 +0900 |
commit | dc084399fad28cc98e7bcdb9074141c97e863bee (patch) | |
tree | 3a03254701420c04913709a4615af519b16fe573 /src/login/loginctl.c | |
parent | fbbe240b2112981ca6c8aa6d49281043d8e5a2e7 (diff) | |
download | systemd-dc084399fad28cc98e7bcdb9074141c97e863bee.tar.gz |
loginctl: use /org/freedesktop/login1/session/auto when "lock-session" is called without argument
This way we'll use the "display" session automatically, and that makes
the call work when invoked from user@.service.
Fixes: #13614
Diffstat (limited to 'src/login/loginctl.c')
-rw-r--r-- | src/login/loginctl.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/login/loginctl.c b/src/login/loginctl.c index bff6354177..6fea2c9e33 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -981,7 +981,6 @@ static int show_seat(int argc, char *argv[], void *userdata) { static int activate(int argc, char *argv[], void *userdata) { _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; sd_bus *bus = userdata; - char *short_argv[3]; int r, i; assert(bus); @@ -990,12 +989,20 @@ static int activate(int argc, char *argv[], void *userdata) { polkit_agent_open_if_enabled(arg_transport, arg_ask_password); if (argc < 2) { - short_argv[0] = argv[0]; - short_argv[1] = (char*) ""; - short_argv[2] = NULL; + r = sd_bus_call_method( + bus, + "org.freedesktop.login1", + "/org/freedesktop/login1/session/auto", + "org.freedesktop.login1.Session", + streq(argv[0], "lock-session") ? "Lock" : + streq(argv[0], "unlock-session") ? "Unlock" : + streq(argv[0], "terminate-session") ? "Terminate" : + "Activate", + &error, NULL, NULL); + if (r < 0) + return log_error_errno(r, "Failed to issue method call: %s", bus_error_message(&error, r)); - argv = short_argv; - argc = 2; + return 0; } for (i = 1; i < argc; i++) { |