VCS(4)              Linux Programmer's Manual              VCS(4)

       vcs, vcsa - virtual console memory

       /dev/vcs0  is  a  character device with major number 7 and
       minor number 0, usually of mode 0644 and  owner  root.tty.
       It refers to the memory of the currently displayed virtual
       console terminal.

       /dev/vcs[1-63] are character devices for  virtual  console
       terminals,  they have major number 7 and minor number 1 to
       63, usually mode 0644 and owner root.tty.  /dev/vcsa[0-63]
       are  the same, but including attributes, and prefixed with
       four bytes giving the screen dimensions and  cursor  posi-
       tion:  lines,  columns,  x, y.  (x = y = 0 at the top left
       corner of the screen.)

       These replace the screendump ioctls of console(4), so  the
       system  administrator can control access using file system

       The devices for the first eight virtual  consoles  may  be
       created by:

            for x in 0 1 2 3 4 5 6 7 8; do
                 mknod -m 644 /dev/vcs$x c 7 $x;
                 mknod -m 644 /dev/vcsa$x c 7 $[$x+128];
            chown root:tty /dev/vcs*

       No ioctl() requests are supported.

       You  may  do  a  screendump on vt3 by switching to vt1 and
       typing cat /dev/vcs3 >foo. Note that the output  does  not
       contain  newline  characters,  so  some  processing may be
       required, like in fold -w 81 /dev/vcs3 | lpr or  (horrors)
       setterm -dump 3 -file /proc/self/fd/1.

       This  program displays the character and screen attributes
       under the cursor  of  the  second  virtual  console,  then
       changes the background color there:

            #include <unistd.h>
            #include <stdio.h>
            #include <fcntl.h>

            void main()
            {    int fd;
                 struct {char lines, cols, x, y;} scrn;
                 char ch, attrib;

                 fd = open("/dev/vcsa2", O_RDWR);
                 (void)read(fd, &scrn, 4);
                 (void)lseek(fd, 4 + 2*(scrn.y*scrn.cols + scrn.x), 0);
                 (void)read(fd, &ch, 1);
                 (void)read(fd, &attrib, 1);
                 printf("ch='%c' attrib=0x%02x\n", ch, attrib);
                 attrib ^= 0x10;
                 (void)lseek(fd, -1, 1);
                 (void)write(fd, &attrib, 1);


       Andries Brouwer <>

       Introduced with version 1.1.92 of the Linux kernel.

       console(4), tty(4), ttys(4), selection(1)

Linux                   February 19, 1995                       1