2 * ctrlaltdel.c - Set the function of the Ctrl-Alt-Del combination
3 * Created 4-Jul-92 by Peter Orbaek <poe@daimi.aau.dk>
4 * 1999-02-22 Arkadiusz MiĆkiewicz <misiek@pld.ORG.PL>
5 * - added Native Language Support
14 #include <sys/reboot.h>
17 #include "closestream.h"
18 #include "pathnames.h"
21 #define LINUX_REBOOT_CMD_CAD_ON 0x89ABCDEF
22 #define LINUX_REBOOT_CMD_CAD_OFF 0x00000000
24 static void __attribute__ ((__noreturn__
)) usage(FILE * out
)
26 fprintf(out
, USAGE_HEADER
);
27 fprintf(out
, _(" %s hard|soft\n"), program_invocation_short_name
);
29 fprintf(out
, USAGE_SEPARATOR
);
30 fprintf(out
, _("Set the function of the Ctrl-Alt-Del combination.\n"));
32 fprintf(out
, USAGE_OPTIONS
);
33 fprintf(out
, USAGE_HELP
);
34 fprintf(out
, USAGE_VERSION
);
35 fprintf(out
, USAGE_MAN_TAIL("ctrlaltdel(8)"));
36 exit(out
== stderr
? EXIT_FAILURE
: EXIT_SUCCESS
);
39 static int get_cad(void)
41 uint64_t val
= path_read_u64(_PATH_PROC_CTRL_ALT_DEL
);
45 fputs("soft\n", stdout
);
48 fputs("hard\n", stdout
);
51 printf("%s hard\n", _("implicit"));
52 warnx(_("unexpected value in %s: %ju"), _PATH_PROC_CTRL_ALT_DEL
, val
);
58 static int set_cad(const char *arg
)
63 warnx(_("You must be root to set the Ctrl-Alt-Del behavior"));
66 if (!strcmp("hard", arg
))
67 cmd
= LINUX_REBOOT_CMD_CAD_ON
;
68 else if (!strcmp("soft", arg
))
69 cmd
= LINUX_REBOOT_CMD_CAD_OFF
;
71 warnx(_("unknown argument: %s"), arg
);
74 if (reboot(cmd
) < 0) {
81 int main(int argc
, char **argv
)
84 static const struct option longopts
[] = {
85 {"version", no_argument
, NULL
, 'V'},
86 {"help", no_argument
, NULL
, 'h'},
90 setlocale(LC_ALL
, "");
91 bindtextdomain(PACKAGE
, LOCALEDIR
);
95 while ((ch
= getopt_long(argc
, argv
, "Vh", longopts
, NULL
)) != -1)
98 printf(UTIL_LINUX_VERSION
);
103 errtryhelp(EXIT_FAILURE
);
109 ret
= set_cad(argv
[1]);