From e9904998213dcb4d5f268f3e8b1390299a1100f0 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 21 Jan 2020 13:43:04 +0100 Subject: [PATCH] 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 (cherry picked from commit dc084399fad28cc98e7bcdb9074141c97e863bee) --- src/login/loginctl.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/login/loginctl.c b/src/login/loginctl.c index 61f619de9c..6ffd135bcf 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++) { -- 2.25.1