logind: add new loginctl lock-sessions command

This commit is contained in:
Lennart Poettering 2012-07-29 17:08:47 +02:00
parent fa2b196da1
commit 7212a8a99e
4 changed files with 56 additions and 0 deletions

2
TODO
View File

@ -39,6 +39,8 @@ Bugfixes:
Features:
* wiki: document new logind LockSessions() call
* initialize the hostname from the fs label of /, if /etc/hostname does not exist?
* logind: different policy actions for idle, suspend, shutdown blockers: allow idle blockers by default, don't allow suspend blockers by default

View File

@ -242,6 +242,14 @@
sessions, if the session supports it.</para></listitem>
</varlistentry>
<varlistentry>
<term><command>lock-sessions</command></term>
<listitem><para>Activate the screen
lock on all current sessions
supporting it.</para></listitem>
</varlistentry>
<varlistentry>
<term><command>terminate-session [ID...]</command></term>

View File

@ -43,4 +43,6 @@ SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{idProduct}=="401a", ATTR{product}
TAG=="seat", ENV{ID_PATH}=="", IMPORT{builtin}="path_id"
TAG=="seat", ENV{ID_FOR_SEAT}=="", ENV{ID_PATH_TAG}!="", ENV{ID_FOR_SEAT}="$env{SUBSYSTEM}-$env{ID_PATH_TAG}"
SUBSYSTEM=="input", ATTR{name}=="Wiebetech LLC Wiebetech", RUN+="@rootbindir@/loginctl lock-sessions"
LABEL="seat_end"

View File

@ -1604,6 +1604,48 @@ 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;
@ -1679,6 +1721,7 @@ static int help(void) {
" 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"
@ -1820,6 +1863,7 @@ static int loginctl_main(DBusConnection *bus, int argc, char *argv[], DBusError
{ "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 },