From 4269d523e2c5cc65c89e5340a55febe72c3d3f49 Mon Sep 17 00:00:00 2001 From: sin Date: Fri, 5 Dec 2014 15:04:37 +0000 Subject: [PATCH] Add vtallow(1) to enable or disable VT switch --- Makefile | 1 + vtallow.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 vtallow.c diff --git a/Makefile b/Makefile index 9f070bf..a640f50 100644 --- a/Makefile +++ b/Makefile @@ -82,6 +82,7 @@ BIN = \ umount \ unshare \ uptime \ + vtallow \ watch \ who diff --git a/vtallow.c b/vtallow.c new file mode 100644 index 0000000..03d67a5 --- /dev/null +++ b/vtallow.c @@ -0,0 +1,52 @@ +/* See LICENSE file for copyright and license details. */ +#include +#include +#include + +#include +#include +#include +#include + +#include "util.h" + +#define CONSOLE "/dev/console" + +#define VT_LOCKSWITCH 0x560B /* disallow vt switching */ +#define VT_UNLOCKSWITCH 0x560C /* allow vt switching */ + +static void +usage(void) +{ + eprintf("usage: vtallow n|y\n"); +} + +int +main(int argc, char *argv[]) +{ + int fd; + int allow; + + ARGBEGIN { + default: + usage(); + } ARGEND; + + if (argc != 1) + usage(); + + if (!strcmp(argv[0], "y")) + allow = 1; + else if (!strcmp(argv[0], "n")) + allow = 0; + else + usage(); + + if ((fd = open(CONSOLE, O_WRONLY)) < 0) + eprintf("open %s:", CONSOLE); + if (ioctl(fd, allow ? VT_UNLOCKSWITCH : VT_LOCKSWITCH) < 0) + eprintf("cannot %s VT switch:", + allow ? "enable" : "disable"); + close(fd); + return 0; +}