From: Alexey Gladkov <gladkov.alexey@gmail.com>
To: kbd@lists.altlinux.org
Subject: Re: [kbd] New vt_mode tool for kbd?
Date: Fri, 25 Mar 2011 16:20:19 +0300
Message-ID: <4D8C9693.9040006@gmail.com> (raw)
In-Reply-To: <20110321214236.GA13370@graeme>
[-- Attachment #1: Type: text/plain, Size: 563 bytes --]
22.03.2011 00:42, Michael Schutte wrote:
> Hi Alexey,
>
> The console-setup package in Debian needs a way to check for the
> text/graphics mode of the active VT (from a shell script). This can be
> done with “setfont -v -o /dev/null”, for example, but that isn’t very
> elegant. Julien Cristau has proposed a small utility (which I’m calling
> “vt_mode” for now) to report this information in a canonical fashion.
May be something like this (see attachment) ?
I thing this utility is more script-friendly and more extensible.
--
Rgrds, legion
[-- Attachment #2: kbdinfo.c --]
[-- Type: text/plain, Size: 2187 bytes --]
#include <stdio.h>
#include <errno.h>
#include <error.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/kd.h>
#include <getopt.h>
#include "getfd.h"
#include "nls.h"
#include "version.h"
#define RETURN_BASE 100
#define GETMODE 10
#define GKBMODE 20
#define GKBMETA 30
static void attr_noreturn
usage(int code) {
fprintf(stderr, _("Usage: kbdinfo [-C DEVICE] GETMODE | GKBMODE | GKBMETA\n"));
exit(code);
}
int
main(int argc, char *argv[]) {
int fd, mode, c, rc;
int quiet = 0;
char *console = NULL;
set_progname(argv[0]);
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE_NAME, LOCALEDIR);
textdomain(PACKAGE_NAME);
while ((c = getopt(argc, argv, "C:qhV")) != EOF) {
switch (c) {
case 'C':
if (optarg == NULL || optarg[0] == '\0')
usage(1);
console = optarg;
break;
case 'q':
quiet = 1;
break;
case 'V':
print_version_and_exit();
break;
case 'h':
usage(0);
break;
default:
usage(1);
}
}
if (argc == optind)
usage(1);
fd = getfd(console);
rc = EXIT_FAILURE;
#define answer(typ,text,code) { \
if (!quiet) \
printf("%s\n", text); \
rc = (RETURN_BASE + typ + code); \
};
if (!strcasecmp("GETMODE", argv[optind])) {
if (ioctl(fd, KDGETMODE, &mode) == -1)
error(EXIT_FAILURE, errno, "ioctl");
switch (mode) {
case KD_TEXT: answer(GETMODE, "text", 1); break;
case KD_GRAPHICS: answer(GETMODE, "graphics", 2); break;
}
return rc;
}
if (!strcasecmp("GKBMODE", argv[optind])) {
if (ioctl(fd, KDGKBMODE, &mode) == -1)
error(EXIT_FAILURE, errno, "ioctl");
switch (mode) {
case K_RAW: answer(GKBMODE, "raw", 1); break;
case K_XLATE: answer(GKBMODE, "xlate", 2); break;
case K_MEDIUMRAW: answer(GKBMODE, "mediumraw", 3); break;
case K_UNICODE: answer(GKBMODE, "unicode", 4); break;
}
return rc;
}
if (!strcasecmp("GKBMETA", argv[optind])) {
if (ioctl(fd, KDGKBMETA, &mode) == -1)
error(EXIT_FAILURE, errno, "ioctl");
switch (mode) {
case K_METABIT: answer(GKBMETA, "metabit", 1); break;
case K_ESCPREFIX: answer(GKBMETA, "escprefix", 2); break;
}
return rc;
}
return rc;
}
next prev parent reply other threads:[~2011-03-25 13:20 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-21 21:42 Michael Schutte
2011-03-21 22:13 ` Dmitry V. Levin
2011-03-21 22:25 ` Michael Schutte
2011-03-25 13:20 ` Alexey Gladkov [this message]
2011-03-26 17:33 ` Michael Schutte
2011-03-26 22:33 ` Dmitry V. Levin
2011-03-27 9:33 ` Alexey Gladkov
2011-03-28 10:55 ` Alexey Gladkov
2011-03-28 11:19 ` Dmitry V. Levin
2011-03-28 11:26 ` Alexey Gladkov
2011-03-28 21:07 ` Alexey Gladkov
2011-03-29 21:51 ` Dmitry V. Levin
2011-03-29 22:27 ` Alexey Gladkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D8C9693.9040006@gmail.com \
--to=gladkov.alexey@gmail.com \
--cc=kbd@lists.altlinux.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Linux console tools development discussion
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/kbd/0 kbd/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 kbd kbd/ http://lore.altlinux.org/kbd \
kbd@lists.altlinux.org kbd@lists.altlinux.ru kbd@lists.altlinux.com
public-inbox-index kbd
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.kbd
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git