summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Yuan <me@yhndnzj.com>2023-05-11 13:21:37 +0800
committerMike Yuan <me@yhndnzj.com>2023-05-16 18:09:15 +0800
commit8b6c039a1ac73da006bfe9d5735515bba12ef3c4 (patch)
tree05554e32460b90070c4f74e2fe49c02311dc8d25
parent486f61a8c908d63c47625c352e456d80c88b4687 (diff)
downloadsystemd-8b6c039a1ac73da006bfe9d5735515bba12ef3c4.tar.gz
loginctl: list-sessions: also show state
-rw-r--r--src/login/loginctl.c23
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);
}