mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-10-28 03:25:27 +03:00
parent
87a47f99bc
commit
ae8c7939df
@ -110,8 +110,9 @@
|
||||
|
||||
<listitem><para>Defines what action will be performed
|
||||
if user presses Ctrl-Alt-Delete more than 7 times in 2s.
|
||||
Can be set to <literal>reboot-force</literal>, <literal>poweroff-force</literal>
|
||||
or disabled with <literal>ignore</literal>. Defaults to
|
||||
Can be set to <literal>reboot-force</literal>, <literal>poweroff-force</literal>,
|
||||
<literal>reboot-immediate</literal>, <literal>poweroff-immediate</literal>
|
||||
or disabled with <literal>none</literal>. Defaults to
|
||||
<literal>reboot-force</literal>.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
@ -89,6 +89,7 @@
|
||||
#include "user-util.h"
|
||||
#include "virt.h"
|
||||
#include "watchdog.h"
|
||||
#include "emergency-action.h"
|
||||
|
||||
static enum {
|
||||
ACTION_RUN,
|
||||
@ -131,7 +132,7 @@ static bool arg_default_memory_accounting = false;
|
||||
static bool arg_default_tasks_accounting = true;
|
||||
static uint64_t arg_default_tasks_max = UINT64_MAX;
|
||||
static sd_id128_t arg_machine_id = {};
|
||||
static CADBurstAction arg_cad_burst_action = CAD_BURST_ACTION_REBOOT;
|
||||
static EmergencyAction arg_cad_burst_action = EMERGENCY_ACTION_REBOOT_FORCE;
|
||||
|
||||
noreturn static void freeze_or_reboot(void) {
|
||||
|
||||
@ -649,8 +650,6 @@ static int config_parse_join_controllers(const char *unit,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static DEFINE_CONFIG_PARSE_ENUM(config_parse_cad_burst_action, cad_burst_action, CADBurstAction, "Failed to parse service restart specifier");
|
||||
|
||||
static int parse_config_file(void) {
|
||||
|
||||
const ConfigTableItem items[] = {
|
||||
@ -705,7 +704,7 @@ static int parse_config_file(void) {
|
||||
{ "Manager", "DefaultMemoryAccounting", config_parse_bool, 0, &arg_default_memory_accounting },
|
||||
{ "Manager", "DefaultTasksAccounting", config_parse_bool, 0, &arg_default_tasks_accounting },
|
||||
{ "Manager", "DefaultTasksMax", config_parse_tasks_max, 0, &arg_default_tasks_max },
|
||||
{ "Manager", "CtrlAltDelBurstAction", config_parse_cad_burst_action, 0, &arg_cad_burst_action},
|
||||
{ "Manager", "CtrlAltDelBurstAction", config_parse_emergency_action, 0, &arg_cad_burst_action },
|
||||
{}
|
||||
};
|
||||
|
||||
|
@ -1911,28 +1911,11 @@ static void manager_handle_ctrl_alt_del(Manager *m) {
|
||||
* 7 times within 2s, we reboot/shutdown immediately,
|
||||
* unless it was disabled in system.conf */
|
||||
|
||||
if (ratelimit_test(&m->ctrl_alt_del_ratelimit) || m->cad_burst_action == CAD_BURST_ACTION_IGNORE)
|
||||
if (ratelimit_test(&m->ctrl_alt_del_ratelimit) || m->cad_burst_action == EMERGENCY_ACTION_NONE)
|
||||
manager_start_target(m, SPECIAL_CTRL_ALT_DEL_TARGET, JOB_REPLACE_IRREVERSIBLY);
|
||||
else {
|
||||
switch (m->cad_burst_action) {
|
||||
|
||||
case CAD_BURST_ACTION_REBOOT:
|
||||
m->exit_code = MANAGER_REBOOT;
|
||||
break;
|
||||
|
||||
case CAD_BURST_ACTION_POWEROFF:
|
||||
m->exit_code = MANAGER_POWEROFF;
|
||||
break;
|
||||
|
||||
default:
|
||||
assert_not_reached("Unknown action.");
|
||||
}
|
||||
|
||||
log_notice("Ctrl-Alt-Del was pressed more than 7 times within 2s, performing immediate %s.",
|
||||
cad_burst_action_to_string(m->cad_burst_action));
|
||||
status_printf(NULL, true, false, "Ctrl-Alt-Del was pressed more than 7 times within 2s, performing immediate %s.",
|
||||
cad_burst_action_to_string(m->cad_burst_action));
|
||||
}
|
||||
else
|
||||
emergency_action(m, m->cad_burst_action, NULL,
|
||||
"Ctrl-Alt-Del was pressed more than 7 times within 2s");
|
||||
}
|
||||
|
||||
static int manager_dispatch_signal_fd(sd_event_source *source, int fd, uint32_t revents, void *userdata) {
|
||||
@ -3590,11 +3573,3 @@ static const char *const manager_state_table[_MANAGER_STATE_MAX] = {
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP(manager_state, ManagerState);
|
||||
|
||||
static const char *const cad_burst_action_table[_CAD_BURST_ACTION_MAX] = {
|
||||
[CAD_BURST_ACTION_IGNORE] = "ignore",
|
||||
[CAD_BURST_ACTION_REBOOT] = "reboot-force",
|
||||
[CAD_BURST_ACTION_POWEROFF] = "poweroff-force",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP(cad_burst_action, CADBurstAction);
|
||||
|
@ -62,14 +62,6 @@ typedef enum ManagerExitCode {
|
||||
_MANAGER_EXIT_CODE_INVALID = -1
|
||||
} ManagerExitCode;
|
||||
|
||||
typedef enum CADBurstAction {
|
||||
CAD_BURST_ACTION_IGNORE,
|
||||
CAD_BURST_ACTION_REBOOT,
|
||||
CAD_BURST_ACTION_POWEROFF,
|
||||
_CAD_BURST_ACTION_MAX,
|
||||
_CAD_BURST_ACTION_INVALID = -1
|
||||
} CADBurstAction;
|
||||
|
||||
typedef enum StatusType {
|
||||
STATUS_TYPE_EPHEMERAL,
|
||||
STATUS_TYPE_NORMAL,
|
||||
@ -315,7 +307,7 @@ struct Manager {
|
||||
|
||||
/* When the user hits C-A-D more than 7 times per 2s, do something immediately... */
|
||||
RateLimit ctrl_alt_del_ratelimit;
|
||||
CADBurstAction cad_burst_action;
|
||||
EmergencyAction cad_burst_action;
|
||||
|
||||
const char *unit_log_field;
|
||||
const char *unit_log_format_string;
|
||||
@ -411,6 +403,3 @@ void manager_deserialize_gid_refs_one(Manager *m, const char *value);
|
||||
|
||||
const char *manager_state_to_string(ManagerState m) _const_;
|
||||
ManagerState manager_state_from_string(const char *s) _pure_;
|
||||
|
||||
const char *cad_burst_action_to_string(CADBurstAction a) _const_;
|
||||
CADBurstAction cad_burst_action_from_string(const char *s) _pure_;
|
||||
|
Loading…
Reference in New Issue
Block a user