summaryrefslogtreecommitdiff
path: root/src/login/loginctl.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2020-01-21 13:43:04 +0100
committerYu Watanabe <watanabe.yu+github@gmail.com>2020-01-22 15:36:35 +0900
commitdc084399fad28cc98e7bcdb9074141c97e863bee (patch)
tree3a03254701420c04913709a4615af519b16fe573 /src/login/loginctl.c
parentfbbe240b2112981ca6c8aa6d49281043d8e5a2e7 (diff)
downloadsystemd-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.c19
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++) {