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(void)
27 fputs(USAGE_HEADER
, out
);
28 fprintf(out
, _(" %s hard|soft\n"), program_invocation_short_name
);
30 fputs(USAGE_SEPARATOR
, out
);
31 fprintf(out
, _("Set the function of the Ctrl-Alt-Del combination.\n"));
33 fputs(USAGE_OPTIONS
, out
);
34 printf(USAGE_HELP_OPTIONS(16));
35 printf(USAGE_MAN_TAIL("ctrlaltdel(8)"));
39 static int get_cad(void)
43 if (ul_path_read_u64(NULL
, &val
, _PATH_PROC_CTRL_ALT_DEL
) != 0)
44 err(EXIT_FAILURE
, _("cannot read %s"), _PATH_PROC_CTRL_ALT_DEL
);
48 fputs("soft\n", stdout
);
51 fputs("hard\n", stdout
);
54 printf("%s hard\n", _("implicit"));
55 warnx(_("unexpected value in %s: %ju"), _PATH_PROC_CTRL_ALT_DEL
, val
);
61 static int set_cad(const char *arg
)
66 warnx(_("You must be root to set the Ctrl-Alt-Del behavior"));
69 if (!strcmp("hard", arg
))
70 cmd
= LINUX_REBOOT_CMD_CAD_ON
;
71 else if (!strcmp("soft", arg
))
72 cmd
= LINUX_REBOOT_CMD_CAD_OFF
;
74 warnx(_("unknown argument: %s"), arg
);
77 if (reboot(cmd
) < 0) {
84 int main(int argc
, char **argv
)
87 static const struct option longopts
[] = {
88 {"version", no_argument
, NULL
, 'V'},
89 {"help", no_argument
, NULL
, 'h'},
93 setlocale(LC_ALL
, "");
94 bindtextdomain(PACKAGE
, LOCALEDIR
);
96 close_stdout_atexit();
98 while ((ch
= getopt_long(argc
, argv
, "Vh", longopts
, NULL
)) != -1)
101 print_version(EXIT_SUCCESS
);
105 errtryhelp(EXIT_FAILURE
);
111 ret
= set_cad(argv
[1]);