ubase

suckless linux base utils
git clone git://git.suckless.org/ubase
Log | Files | Refs | README | LICENSE

commit 4269d523e2c5cc65c89e5340a55febe72c3d3f49
parent 74c0abb6a2f9b8cac0653f1b96646aaf74b91a68
Author: sin <sin@2f30.org>
Date:   Fri,  5 Dec 2014 15:04:37 +0000

Add vtallow(1) to enable or disable VT switch

Diffstat:
MMakefile | 1+
Avtallow.c | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 53 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile @@ -82,6 +82,7 @@ BIN = \ umount \ unshare \ uptime \ + vtallow \ watch \ who diff --git a/vtallow.c b/vtallow.c @@ -0,0 +1,52 @@ +/* See LICENSE file for copyright and license details. */ +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/ioctl.h> + +#include <fcntl.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +#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; +}