From: Lennart Poettering Date: Tue, 21 Jan 2020 12:43:04 +0000 (+0100) Subject: loginctl: use /org/freedesktop/login1/session/auto when "lock-session" is called... X-Git-Tag: v245-rc1~90 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dc084399fad28cc98e7bcdb9074141c97e863bee;p=thirdparty%2Fsystemd.git 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 --- diff --git a/src/login/loginctl.c b/src/login/loginctl.c index bff63541771..6fea2c9e33d 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++) {