pid_t leader;
const char *type;
const char *class;
- bool active;
+ const char *state;
} SessionStatusInfo;
typedef struct UserStatusInfo {
} else if (i->class)
printf("\t Class: %s\n", i->class);
-
- printf("\t Active: %s\n", yes_no(i->active));
+ if (i->state)
+ printf("\t State: %s\n", i->state);
if (i->default_control_group) {
unsigned c;
i->type = s;
else if (streq(name, "Class"))
i->class = s;
+ else if (streq(name, "State"))
+ i->state = s;
}
break;
}
if (streq(name, "Remote"))
i->remote = b;
- else if (streq(name, "Active"))
- i->active = b;
break;
}
uid_t uid;
uint32_t u;
- ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL);
+ ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL, NULL);
if (ret < 0) {
log_error("User %s unknown.", args[i]);
goto finish;
goto finish;
}
- ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL);
+ ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL, NULL);
if (ret < 0) {
log_error("Failed to resolve user %s: %s", args[i], strerror(-ret));
goto finish;
goto finish;
}
- ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL);
+ ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL, NULL);
if (ret < 0) {
log_error("Failed to look up user %s: %s", args[i], strerror(-ret));
goto finish;
goto finish;
}
- ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL);
+ ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL, NULL);
if (ret < 0) {
log_error("Failed to look up user %s: %s", args[i], strerror(-ret));
goto finish;
return ret;
}
+static int lock_sessions(DBusConnection *bus, char **args, unsigned n) {
+ DBusMessage *m = NULL, *reply = NULL;
+ int ret = 0;
+ DBusError error;
+
+ assert(bus);
+ assert(args);
+
+ dbus_error_init(&error);
+
+ polkit_agent_open_if_enabled();
+
+ m = dbus_message_new_method_call(
+ "org.freedesktop.login1",
+ "/org/freedesktop/login1",
+ "org.freedesktop.login1.Manager",
+ "LockSessions");
+ if (!m) {
+ log_error("Could not allocate message.");
+ ret = -ENOMEM;
+ goto finish;
+ }
+
+ reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
+ if (!reply) {
+ log_error("Failed to issue method call: %s", bus_error_message(&error));
+ ret = -EIO;
+ goto finish;
+ }
+
+finish:
+ if (m)
+ dbus_message_unref(m);
+
+ if (reply)
+ dbus_message_unref(reply);
+
+ dbus_error_free(&error);
+
+ return ret;
+}
+
static int terminate_seat(DBusConnection *bus, char **args, unsigned n) {
DBusMessage *m = NULL;
int ret = 0;
" activate [ID] Activate a session\n"
" lock-session [ID...] Screen lock one or more sessions\n"
" unlock-session [ID...] Screen unlock one or more sessions\n"
+ " lock-sessions Screen lock all current sessions\n"
" terminate-session [ID...] Terminate one or more sessions\n"
" kill-session [ID...] Send signal to processes of a session\n"
" list-users List users\n"
{ "activate", EQUAL, 2, activate },
{ "lock-session", MORE, 2, activate },
{ "unlock-session", MORE, 2, activate },
+ { "lock-sessions", EQUAL, 1, lock_sessions },
{ "terminate-session", MORE, 2, activate },
{ "kill-session", MORE, 2, kill_session },
{ "list-users", EQUAL, 1, list_users },