logind: add new loginctl lock-sessions command
This commit is contained in:
parent
fa2b196da1
commit
7212a8a99e
2
TODO
2
TODO
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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 },
|
||||
|
|
Loading…
Reference in New Issue