ubase

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

commit 89d1e77e7f796f43caa8ff069172b4cba44e8a31
parent acc54e7bacdd13a609b9862c003a7eedf9e90799
Author: sin <sin@2f30.org>
Date:   Fri Dec  5 15:04:37 +0000

Add vtallow(1) to enable or disable VT switch

Diffstat:
Makefile | 1+
vtallow.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; +}