]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
loginctl: use /org/freedesktop/login1/session/auto when "lock-session" is called...
authorLennart Poettering <lennart@poettering.net>
Tue, 21 Jan 2020 12:43:04 +0000 (13:43 +0100)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 22 Jan 2020 06:36:35 +0000 (15:36 +0900)
This way we'll use the "display" session automatically, and that makes
the call work when invoked from user@.service.

Fixes: #13614
src/login/loginctl.c

index bff63541771fcbfa2feacca5c45a1354d35d3912..6fea2c9e33dba8a81ae0fcf5a7551eed20f30127 100644 (file)
@@ -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++) {