| .\" Copyright (c) 1995 James R. Van Zandt <jrv@vanzandt.mv.com> |
| .\" Sat Feb 18 09:11:07 EST 1995 |
| .\" |
| .\" SPDX-License-Identifier: GPL-2.0-or-later |
| .\" |
| .\" Modified, Sun Feb 26 15:08:05 1995, faith@cs.unc.edu |
| .\" 2007-12-17, Samuel Thibault <samuel.thibault@ens-lyon.org>: |
| .\" document the VT_GETHIFONTMASK ioctl |
| .\" " |
| .TH vcs 4 (date) "Linux man-pages (unreleased)" |
| .SH NAME |
| vcs, vcsa \- virtual console memory |
| .SH DESCRIPTION |
| .I /dev/vcs0 |
| is a character device with major number 7 and minor number |
| 0, usually with mode 0644 and ownership root:tty. |
| It refers to the memory of the currently |
| displayed virtual console terminal. |
| .P |
| .I /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 ownership root:tty. |
| .I /dev/vcsa[0\-63] |
| are the same, but |
| using |
| .IR "unsigned short" s |
| (in host byte order) that include attributes, |
| and prefixed with four bytes giving the screen |
| dimensions and cursor position: |
| .IR lines , |
| .IR columns , |
| .IR x , |
| .IR y . |
| .RI ( x |
| = |
| .I y |
| = 0 at the top left corner of the screen.) |
| .P |
| When a 512-character font is loaded, |
| the 9th bit position can be fetched by applying the |
| .BR ioctl (2) |
| .B VT_GETHIFONTMASK |
| operation |
| (available since Linux 2.6.18) |
| on |
| .IR /dev/tty[1\-63] ; |
| the value is returned in the |
| .I "unsigned short" |
| pointed to by the third |
| .BR ioctl (2) |
| argument. |
| .P |
| These devices replace the screendump |
| .BR ioctl (2) |
| operations of |
| .BR ioctl_console (2), |
| so the system |
| administrator can control access using filesystem permissions. |
| .P |
| The devices for the first eight virtual consoles may be created by: |
| .P |
| .in +4n |
| .EX |
| 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]; |
| done |
| chown root:tty /dev/vcs* |
| .EE |
| .in |
| .P |
| No |
| .BR ioctl (2) |
| requests are supported. |
| .SH FILES |
| .I /dev/vcs[0\-63] |
| .br |
| .I /dev/vcsa[0\-63] |
| .\" .SH AUTHOR |
| .\" Andries Brouwer <aeb@cwi.nl> |
| .SH VERSIONS |
| Introduced with Linux 1.1.92. |
| .SH EXAMPLES |
| You may do a screendump on vt3 by switching to vt1 and typing |
| .P |
| .in +4n |
| .EX |
| cat /dev/vcs3 >foo |
| .EE |
| .in |
| .P |
| Note that the output does not contain |
| newline characters, so some processing may be required, like |
| in |
| .P |
| .in +4n |
| .EX |
| fold \-w 81 /dev/vcs3 | lpr |
| .EE |
| .in |
| .P |
| or (horrors) |
| .P |
| .in +4n |
| .EX |
| setterm \-dump 3 \-file /proc/self/fd/1 |
| .EE |
| .in |
| .P |
| The |
| .I /dev/vcsa0 |
| device is used for Braille support. |
| .P |
| This program displays the character and screen attributes under the |
| cursor of the second virtual console, then changes the background color |
| there: |
| .P |
| .EX |
| #include <unistd.h> |
| #include <stdlib.h> |
| #include <stdio.h> |
| #include <fcntl.h> |
| #include <sys/ioctl.h> |
| #include <linux/vt.h> |
| \& |
| int |
| main(void) |
| { |
| int fd; |
| char *device = "/dev/vcsa2"; |
| char *console = "/dev/tty2"; |
| struct {unsigned char lines, cols, x, y;} scrn; |
| unsigned short s; |
| unsigned short mask; |
| unsigned char attrib; |
| int ch; |
| \& |
| fd = open(console, O_RDWR); |
| if (fd < 0) { |
| perror(console); |
| exit(EXIT_FAILURE); |
| } |
| if (ioctl(fd, VT_GETHIFONTMASK, &mask) < 0) { |
| perror("VT_GETHIFONTMASK"); |
| exit(EXIT_FAILURE); |
| } |
| (void) close(fd); |
| fd = open(device, O_RDWR); |
| if (fd < 0) { |
| perror(device); |
| exit(EXIT_FAILURE); |
| } |
| (void) read(fd, &scrn, 4); |
| (void) lseek(fd, 4 + 2*(scrn.y*scrn.cols + scrn.x), SEEK_SET); |
| (void) read(fd, &s, 2); |
| ch = s & 0xff; |
| if (s & mask) |
| ch |= 0x100; |
| attrib = ((s & \[ti]mask) >> 8); |
| printf("ch=%#03x attrib=%#02x\[rs]n", ch, attrib); |
| s \[ha]= 0x1000; |
| (void) lseek(fd, \-2, SEEK_CUR); |
| (void) write(fd, &s, 2); |
| exit(EXIT_SUCCESS); |
| } |
| .EE |
| .SH SEE ALSO |
| .BR ioctl_console (2), |
| .BR tty (4), |
| .BR ttyS (4), |
| .BR gpm (8) |