mirror of
https://github.com/systemd/systemd.git
synced 2025-02-23 13:57:33 +03:00
logind: add 'lock' as possible choice for handling hw keys
This commit is contained in:
parent
9485d98d77
commit
7654b2c259
@ -213,13 +213,16 @@
|
||||
<literal>halt</literal>,
|
||||
<literal>kexec</literal>,
|
||||
<literal>suspend</literal>,
|
||||
<literal>hibernate</literal>, and
|
||||
<literal>hybrid-sleep</literal>. If
|
||||
<literal>hibernate</literal>,
|
||||
<literal>hybrid-sleep</literal> and
|
||||
<literal>lock</literal>. If
|
||||
<literal>ignore</literal> logind will
|
||||
never handle these keys. Otherwise the
|
||||
specified action will be taken in the
|
||||
respective event. Only input devices
|
||||
with the
|
||||
never handle these keys. If
|
||||
<literal>lock</literal> all running
|
||||
sessions will be screen
|
||||
locked. Otherwise the specified action
|
||||
will be taken in the respective
|
||||
event. Only input devices with the
|
||||
<literal>power-switch</literal> udev
|
||||
tag will be watched for key/lid switch
|
||||
events. <varname>HandlePowerKey=</varname>
|
||||
|
@ -150,6 +150,18 @@ fail:
|
||||
return r;
|
||||
}
|
||||
|
||||
static int lock_sessions(Manager *m) {
|
||||
Iterator i;
|
||||
Session *session;
|
||||
|
||||
log_info("Locking sessions...");
|
||||
|
||||
HASHMAP_FOREACH(session, m->sessions, i)
|
||||
session_send_lock(session, true);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int button_handle(
|
||||
Button *b,
|
||||
InhibitWhat inhibit_key,
|
||||
@ -164,7 +176,7 @@ static int button_handle(
|
||||
[HANDLE_KEXEC] = "Rebooting via kexec...",
|
||||
[HANDLE_SUSPEND] = "Suspending...",
|
||||
[HANDLE_HIBERNATE] = "Hibernating...",
|
||||
[HANDLE_HYBRID_SLEEP] = "Hibernating and suspend...",
|
||||
[HANDLE_HYBRID_SLEEP] = "Hibernating and suspend..."
|
||||
};
|
||||
|
||||
static const char * const target_table[_HANDLE_BUTTON_MAX] = {
|
||||
@ -195,6 +207,10 @@ static int button_handle(
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Locking is handled differently from the rest. */
|
||||
if (handle == HANDLE_LOCK)
|
||||
return lock_sessions(b->manager);
|
||||
|
||||
inhibit_operation = handle == HANDLE_SUSPEND || handle == HANDLE_HIBERNATE || handle == HANDLE_HYBRID_SLEEP ? INHIBIT_SLEEP : INHIBIT_SHUTDOWN;
|
||||
|
||||
/* If the actual operation is inhibited, warn and fail */
|
||||
@ -309,6 +325,7 @@ static const char* const handle_button_table[_HANDLE_BUTTON_MAX] = {
|
||||
[HANDLE_SUSPEND] = "suspend",
|
||||
[HANDLE_HIBERNATE] = "hibernate",
|
||||
[HANDLE_HYBRID_SLEEP] = "hybrid-sleep",
|
||||
[HANDLE_LOCK] = "lock"
|
||||
};
|
||||
DEFINE_STRING_TABLE_LOOKUP(handle_button, HandleButton);
|
||||
DEFINE_CONFIG_PARSE_ENUM(config_parse_handle_button, handle_button, HandleButton, "Failed to parse handle button setting");
|
||||
|
@ -33,6 +33,7 @@ typedef enum HandleButton {
|
||||
HANDLE_SUSPEND,
|
||||
HANDLE_HIBERNATE,
|
||||
HANDLE_HYBRID_SLEEP,
|
||||
HANDLE_LOCK,
|
||||
_HANDLE_BUTTON_MAX,
|
||||
_HANDLE_BUTTON_INVALID = -1
|
||||
} HandleButton;
|
||||
|
Loading…
x
Reference in New Issue
Block a user