const char *class;
const char *state;
const char *scope;
+ const char *desktop;
} SessionStatusInfo;
typedef struct UserStatusInfo {
{ "RemoteHost", "s", NULL, offsetof(SessionStatusInfo, remote_host) },
{ "RemoteUser", "s", NULL, offsetof(SessionStatusInfo, remote_user) },
{ "Service", "s", NULL, offsetof(SessionStatusInfo, service) },
+ { "Desktop", "s", NULL, offsetof(SessionStatusInfo, desktop) },
{ "Type", "s", NULL, offsetof(SessionStatusInfo, type) },
{ "Class", "s", NULL, offsetof(SessionStatusInfo, class) },
{ "Scope", "s", NULL, offsetof(SessionStatusInfo, scope) },
{ "Remote", "b", NULL, offsetof(SessionStatusInfo, remote) },
{ "Timestamp", "t", NULL, offsetof(SessionStatusInfo, timestamp) },
{ "User", "(uo)", prop_map_first_of_struct, offsetof(SessionStatusInfo, uid) },
- { "Seat", "(so)", prop_map_first_of_struct, offsetof(SessionStatusInfo, id) },
+ { "Seat", "(so)", prop_map_first_of_struct, offsetof(SessionStatusInfo, seat) },
{}
};
int r;
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
- if (r < 0) {
- log_error("Could not get properties: %s", strerror(-r));
- return r;
- }
+ if (r < 0)
+ return log_error_errno(r, "Could not get properties: %m");
if (*new_line)
printf("\n");
printf("\n");
}
- if (i.seat) {
+ if (!isempty(i.seat)) {
printf("\t Seat: %s", i.seat);
if (i.vtnr > 0)
- printf("; vc%i", i.vtnr);
+ printf("; vc%u", i.vtnr);
printf("\n");
}
printf("\n");
} else if (i.type) {
- printf("\t Type: %s\n", i.type);
+ printf("\t Type: %s", i.type);
if (i.class)
printf("; class %s", i.class);
+
+ printf("\n");
} else if (i.class)
printf("\t Class: %s\n", i.class);
+ if (!isempty(i.desktop))
+ printf("\t Desktop: %s\n", i.desktop);
+
if (i.state)
printf("\t State: %s\n", i.state);
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
if (r < 0) {
- log_error("Could not get properties: %s", strerror(-r));
+ log_error_errno(r, "Could not get properties: %m");
goto finish;
}
r = bus_map_all_properties(bus, "org.freedesktop.login1", path, map, &i);
if (r < 0) {
- log_error("Could not get properties: %s", strerror(-r));
+ log_error_errno(r, "Could not get properties: %m");
goto finish;
}
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));
+ log_error_errno(r, "Could not get properties: %m");
return r;
}
uid_t uid;
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));
- return r;
- }
+ if (r < 0)
+ return log_error_errno(r, "Failed to look up user %s: %m", args[i]);
r = sd_bus_call_method(
bus,
uid_t uid;
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));
- return r;
- }
+ if (r < 0)
+ return log_error_errno(r, "Failed to look up user %s: %m", args[i]);
r = sd_bus_call_method (
bus,
uid_t uid;
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));
- return r;
- }
+ if (r < 0)
+ return log_error_errno(r, "Failed to look up user %s: %m", args[i]);
r = sd_bus_call_method (
bus,
uid_t uid;
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));
- return r;
- }
+ if (r < 0)
+ return log_error_errno(r, "Failed to look up user %s: %m", args[i]);
r = sd_bus_call_method (
bus,
return 0;
}
-static int help(void) {
-
+static void help(void) {
printf("%s [OPTIONS...] {COMMAND} ...\n\n"
"Send control commands to or query the login manager.\n\n"
- " -h --help Show this help\n"
- " --version Show package version\n"
- " --no-pager Do not pipe output into a pager\n"
- " --no-legend Do not show the headers and footers\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"
- " -p --property=NAME Show only properties by this name\n"
- " -a --all Show all properties, including empty ones\n"
- " -l --full Do not ellipsize output\n"
- " --kill-who=WHO Who to send signal to\n"
- " -s --signal=SIGNAL Which signal to send\n\n"
- "Commands:\n"
+ " -h --help Show this help\n"
+ " --version Show package version\n"
+ " --no-pager Do not pipe output into a pager\n"
+ " --no-legend Do not show the headers and footers\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"
+ " -p --property=NAME Show only properties by this name\n"
+ " -a --all Show all properties, including empty ones\n"
+ " -l --full Do not ellipsize output\n"
+ " --kill-who=WHO Who to send signal to\n"
+ " -s --signal=SIGNAL Which signal to send\n\n"
+ "Session Commands:\n"
" list-sessions List sessions\n"
" session-status ID... Show session status\n"
" show-session [ID...] Show properties of sessions or the manager\n"
" lock-sessions Screen lock all current sessions\n"
" unlock-sessions Screen unlock all current sessions\n"
" terminate-session ID... Terminate one or more sessions\n"
- " kill-session ID... Send signal to processes of a session\n"
+ " kill-session ID... Send signal to processes of a session\n\n"
+ "User Commands:\n"
" list-users List users\n"
" user-status USER... Show user status\n"
" show-user [USER...] Show properties of users or the manager\n"
" enable-linger USER... Enable linger state of one or more users\n"
" disable-linger USER... Disable linger state of one or more users\n"
" terminate-user USER... Terminate all sessions of one or more users\n"
- " kill-user USER... Send signal to processes of a user\n"
+ " kill-user USER... Send signal to processes of a user\n\n"
+ "Seat Commands:\n"
" list-seats List seats\n"
" seat-status NAME... Show seat status\n"
" show-seat NAME... Show properties of one or more seats\n"
" attach NAME DEVICE... Attach one or more devices to a seat\n"
" flush-devices Flush all device associations\n"
- " terminate-seat NAME... Terminate all sessions on one or more seats\n",
- program_invocation_short_name);
-
- return 0;
+ " terminate-seat NAME... Terminate all sessions on one or more seats\n"
+ , program_invocation_short_name);
}
static int parse_argv(int argc, char *argv[]) {
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "hp:als:H:M:", options, NULL)) >= 0) {
+ while ((c = getopt_long(argc, argv, "hp:als:H:M:", options, NULL)) >= 0)
switch (c) {
case 'h':
- return help();
+ help();
+ return 0;
case ARG_VERSION:
puts(PACKAGE_STRING);
break;
case 'M':
- arg_transport = BUS_TRANSPORT_CONTAINER;
+ arg_transport = BUS_TRANSPORT_MACHINE;
arg_host = optarg;
break;
default:
assert_not_reached("Unhandled option");
}
- }
return 1;
}
}
int main(int argc, char *argv[]) {
- _cleanup_bus_unref_ sd_bus *bus = NULL;
+ _cleanup_bus_close_unref_ sd_bus *bus = NULL;
int r;
setlocale(LC_ALL, "");
r = bus_open_transport(arg_transport, arg_host, false, &bus);
if (r < 0) {
- log_error("Failed to create bus connection: %s", strerror(-r));
+ log_error_errno(r, "Failed to create bus connection: %m");
goto finish;
}