diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2017-05-31 22:42:14 -0400 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2017-07-25 09:46:52 +0200 |
commit | 4009e2ba5a4102c0a8be7589b41d1019d7eb7639 (patch) | |
tree | f09fc082ea612c8e1f0e10e4c9cf6e0610e14921 | |
parent | 4ac036ad95f68f0a5032c41459ce39322b1726f8 (diff) |
loginctl: also use $XDG_SESSION_ID for session-status
-rw-r--r-- | src/login/loginctl.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/login/loginctl.c b/src/login/loginctl.c index 5945d5160..62d68b907 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -928,6 +928,8 @@ static int show_session(int argc, char *argv[], void *userdata) { bool properties, new_line = false; sd_bus *bus = userdata; int r, i; + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; + _cleanup_free_ char *path = NULL; assert(bus); assert(argv); @@ -937,19 +939,27 @@ static int show_session(int argc, char *argv[], void *userdata) { pager_open(arg_no_pager, false); if (argc <= 1) { - /* If not argument is specified inspect the manager - * itself */ + const char *session, *p = "/org/freedesktop/login1/session/self"; + if (properties) + /* If no argument is specified inspect the manager itself */ return show_properties(bus, "/org/freedesktop/login1", &new_line); /* And in the pretty case, show data of the calling session */ - return print_session_status_info(bus, "/org/freedesktop/login1/session/self", &new_line); + session = getenv("XDG_SESSION_ID"); + if (session) { + r = get_session_path(bus, session, &error, &path); + if (r < 0) { + log_error("Failed to get session path: %s", bus_error_message(&error, r)); + return r; + } + p = path; + } + + return print_session_status_info(bus, p, &new_line); } for (i = 1; i < argc; i++) { - _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; - _cleanup_free_ char *path = NULL; - r = get_session_path(bus, argv[i], &error, &path); if (r < 0) { log_error("Failed to get session path: %s", bus_error_message(&error, r)); |