static bool arg_all = false;
static bool arg_full = false;
static bool arg_no_pager = false;
static bool arg_all = false;
static bool arg_full = false;
static bool arg_no_pager = false;
static const char *arg_kill_who = NULL;
static int arg_signal = SIGTERM;
static BusTransport arg_transport = BUS_TRANSPORT_LOCAL;
static const char *arg_kill_who = NULL;
static int arg_signal = SIGTERM;
static BusTransport arg_transport = BUS_TRANSPORT_LOCAL;
- printf("%10s %10s %-16s %-16s\n", "SESSION", "UID", "USER", "SEAT");
+ if (arg_legend)
+ printf("%10s %10s %-16s %-16s\n", "SESSION", "UID", "USER", "SEAT");
while ((r = sd_bus_message_read(reply, "(susso)", &id, &uid, &user, &seat, &object)) > 0) {
printf("%10s %10u %-16s %-16s\n", id, (unsigned) uid, user, seat);
while ((r = sd_bus_message_read(reply, "(susso)", &id, &uid, &user, &seat, &object)) > 0) {
printf("%10s %10u %-16s %-16s\n", id, (unsigned) uid, user, seat);
while ((r = sd_bus_message_read(reply, "(uso)", &uid, &user, &object)) > 0) {
printf("%10u %-16s\n", (unsigned) uid, user);
while ((r = sd_bus_message_read(reply, "(uso)", &uid, &user, &object)) > 0) {
printf("%10u %-16s\n", (unsigned) uid, user);
while ((r = sd_bus_message_read(reply, "(so)", &seat, &object)) > 0) {
printf("%-16s\n", seat);
while ((r = sd_bus_message_read(reply, "(so)", &seat, &object)) > 0) {
printf("%-16s\n", seat);
static const struct bus_properties_map map[] = {
{ "Id", "s", NULL, offsetof(SessionStatusInfo, id) },
static const struct bus_properties_map map[] = {
{ "Id", "s", NULL, offsetof(SessionStatusInfo, id) },
int r;
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
int r;
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
static const struct bus_properties_map map[] = {
{ "Name", "s", NULL, offsetof(UserStatusInfo, name) },
static const struct bus_properties_map map[] = {
{ "Name", "s", NULL, offsetof(UserStatusInfo, name) },
int r;
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
int r;
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
static const struct bus_properties_map map[] = {
{ "Id", "s", NULL, offsetof(SeatStatusInfo, id) },
static const struct bus_properties_map map[] = {
{ "Id", "s", NULL, offsetof(SeatStatusInfo, id) },
int r;
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
int r;
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
+ return r;
+}
+
+static int show_properties(sd_bus *bus, const char *path, bool *new_line) {
+ int r;
+
+ if (*new_line)
+ printf("\n");
+
+ *new_line = true;
+
+ r = bus_print_all_properties(bus, "org.freedesktop.login1", path, arg_property, arg_all);
+ if (r < 0)
+ log_error("Could not get properties: %s", strerror(-r));
+
+ return r;
- r = bus_print_all_properties(bus, "org.freedesktop.login1", "/org/freedesktop/login1", NULL, arg_all);
- if (r < 0)
- log_error("Failed to query login manager.");
-
- return r;
+ return show_properties(bus, "/org/freedesktop/login1", &new_line);
- if (show_properties)
- r = bus_print_all_properties(bus, "org.freedesktop.login1", path, NULL, arg_all);
+ if (properties)
+ r = show_properties(bus, path, &new_line);
- r = print_session_status_info(bus, path);
- if (r < 0) {
- log_error("Failed to query session: %s", strerror(-r));
+ r = print_session_status_info(bus, path, &new_line);
+
+ if (r < 0)
- r = bus_print_all_properties(bus, "org.freedesktop.login1", "/org/freedesktop/login1", NULL, arg_all);
- if (r < 0)
- log_error("Failed to query login manager.");
-
- return r;
+ return show_properties(bus, "/org/freedesktop/login1", &new_line);
r = get_user_creds((const char**) (args+i), &uid, NULL, NULL, NULL);
if (r < 0) {
log_error("Failed to look up user %s: %s", args[i], strerror(-r));
r = get_user_creds((const char**) (args+i), &uid, NULL, NULL, NULL);
if (r < 0) {
log_error("Failed to look up user %s: %s", args[i], strerror(-r));
- if (show_properties)
- r = bus_print_all_properties(bus, "org.freedesktop.login1", path, NULL, arg_all);
+ if (properties)
+ r = show_properties(bus, path, &new_line);
- r = print_user_status_info(bus, path);
- if (r < 0) {
- log_error("Failed to query user: %s", strerror(-r));
+ r = print_user_status_info(bus, path, &new_line);
+
+ if (r < 0)
- r = bus_print_all_properties(bus, "org.freedesktop.login1", "/org/freedesktop/login1", NULL, arg_all);
- if (r < 0)
- log_error("Failed to query login manager.");
-
- return r;
+ return show_properties(bus, "/org/freedesktop/login1", &new_line);
- if (show_properties)
- r = bus_print_all_properties(bus, "org.freedesktop.login1", path, NULL, arg_all);
+ if (properties)
+ r = show_properties(bus, path, &new_line);
- r = print_seat_status_info(bus, path);
- if (r < 0) {
- log_error("Failed to query seat: %s", strerror(-r));
+ r = print_seat_status_info(bus, path, &new_line);
+
+ if (r < 0)
" -h --help Show this help\n"
" --version Show package version\n"
" --no-pager Do not pipe output into a pager\n"
" -h --help Show this help\n"
" --version Show package version\n"
" --no-pager Do not pipe output into a pager\n"
" --no-ask-password Don't prompt for password\n"
" -H --host=[USER@]HOST Operate on remote host\n"
" -M --machine=CONTAINER Operate on local container\n"
" --no-ask-password Don't prompt for password\n"
" -H --host=[USER@]HOST Operate on remote host\n"
" -M --machine=CONTAINER Operate on local container\n"
{ "all", no_argument, NULL, 'a' },
{ "full", no_argument, NULL, 'l' },
{ "no-pager", no_argument, NULL, ARG_NO_PAGER },
{ "all", no_argument, NULL, 'a' },
{ "full", no_argument, NULL, 'l' },
{ "no-pager", no_argument, NULL, ARG_NO_PAGER },
{ "kill-who", required_argument, NULL, ARG_KILL_WHO },
{ "signal", required_argument, NULL, 's' },
{ "host", required_argument, NULL, 'H' },
{ "kill-who", required_argument, NULL, ARG_KILL_WHO },
{ "signal", required_argument, NULL, 's' },
{ "host", required_argument, NULL, 'H' },
/* If the user asked for a particular
* property, show it to him, even if it is
/* If the user asked for a particular
* property, show it to him, even if it is