diff options
author | Mike Yuan <me@yhndnzj.com> | 2023-05-11 13:21:37 +0800 |
---|---|---|
committer | Mike Yuan <me@yhndnzj.com> | 2023-05-16 18:09:15 +0800 |
commit | 8b6c039a1ac73da006bfe9d5735515bba12ef3c4 (patch) | |
tree | 05554e32460b90070c4f74e2fe49c02311dc8d25 | |
parent | 486f61a8c908d63c47625c352e456d80c88b4687 (diff) | |
download | systemd-8b6c039a1ac73da006bfe9d5735515bba12ef3c4.tar.gz |
loginctl: list-sessions: also show state
-rw-r--r-- | src/login/loginctl.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/login/loginctl.c b/src/login/loginctl.c index 8f1a5a06de..dfc738c6d0 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -133,7 +133,7 @@ static int list_sessions(int argc, char *argv[], void *userdata) { if (r < 0) return bus_log_parse_error(r); - table = table_new("session", "uid", "user", "seat", "tty"); + table = table_new("session", "uid", "user", "seat", "tty", "state"); if (!table) return log_oom(); @@ -143,7 +143,7 @@ static int list_sessions(int argc, char *argv[], void *userdata) { for (;;) { _cleanup_(sd_bus_error_free) sd_bus_error error_property = SD_BUS_ERROR_NULL; - _cleanup_free_ char *tty = NULL; + _cleanup_free_ char *tty = NULL, *state = NULL; const char *id, *user, *seat, *object; uint32_t uid; @@ -171,12 +171,29 @@ static int list_sessions(int argc, char *argv[], void *userdata) { sd_bus_error_free(&error_property); } + r = sd_bus_get_property_string(bus, + "org.freedesktop.login1", + object, + "org.freedesktop.login1.Session", + "State", + &error_property, + &state); + if (r < 0) { + if (sd_bus_error_has_name(&error_property, SD_BUS_ERROR_UNKNOWN_OBJECT)) + /* The session is already closed when we're querying the property */ + continue; + + return log_error_errno(r, "Failed to get state for session %s: %s", + id, bus_error_message(&error_property, r)); + } + r = table_add_many(table, TABLE_STRING, id, TABLE_UID, (uid_t) uid, TABLE_STRING, user, TABLE_STRING, seat, - TABLE_STRING, strna(tty)); + TABLE_STRING, strna(tty), + TABLE_STRING, state); if (r < 0) return table_log_add_error(r); } |