Virtual console

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
Virtual console showing Knoppix boot messages

A virtual console (VC) – also known as a virtual terminal (VT) – is a conceptual combination of the keyboard and display for a computer user interface. It is a feature of some Unix-like operating systems such as Linux, BSD, illumos, UnixWare, and macOS in which the system console of the computer can be used to switch between multiple virtual consoles to access unrelated user interfaces. Virtual consoles date back at least to Xenix[1] and Concurrent CP/M in the 1980s.[2]

In the Linux console and other platforms, usually the first six virtual consoles provide a text terminal with a login prompt to a Unix shell. The graphical X Window System starts in the seventh virtual console. In Linux, the user switches between them by pressing the Alt key combined with a function key – for example Alt + F1 to access the virtual console number 1. Alt + changes to the previous virtual console and Alt + to the next virtual console. To switch from the X Window System or a Wayland compositor, Ctrl + Alt + F1 works. (Note that users can redefine these default key combinations.)

If several sessions of the X Window System are required to run in parallel, such as in the case of fast user switching or when debugging X programs on a separate X server, each X session usually runs in a separate virtual console.


The virtual consoles are represented by device special files /dev/tty1, /dev/tty2, etc. There are also special files /dev/console, /dev/tty and /dev/tty0. (Compare the devices using the patterns vcs ("virtual console screen") and vcsa ("virtual console screen with attributes") such as /dev/vcs1 and /dev/vcsa1.[3]) The virtual consoles can be configured in the file /etc/inittab read by init -- typically it starts the text mode login process getty for several virtual consoles. X Window System can be configured in /etc/inittab or by an X display manager. A number of Linux distributions use systemd instead of init, which also allows virtual console configuration.

Programs used to access the virtual consoles typically include:

  • chvt to switch the current virtual console
  • openvt to run a program on a new virtual console
  • deallocvt to close a currently unused virtual console

The program startx starts the X Window System on a new virtual console. There are also other graphical programs that can start from the console, such as LinuxTV and MPlayer.

Programs can access the virtual consoles by the device special files. In text mode, writing to the file displays text on the virtual console and reading from the file returns text the user writes to the virtual console. As with other text terminals, there are also special escape sequences, control characters and termios functions that a program can use, most easily via a library such as ncurses. For more complex operations, the programs can use console and terminal special ioctl system calls. Graphical programs can use libraries such as DirectFB, DRI, SDL or the earlier SVGALib.

Unix systems[edit]

Unix workstations, such as those manufactured by Sun or Silicon Graphics, did not include virtual consoles. The only purpose of a console would be to fix the system so that the graphical environment could start.

Sun Niagara-based servers running virtualization with Logical Domains get virtual console services from the Control domain.

See also[edit]


  1. ^ "Trusted path mechanism for virtual terminal environments". Retrieved 2008-04-09.
    United States Patent 4945468 lists Xenix as prior art in this area.
  2. ^ Guzaitis, Joe (November 1983). "Concurrent CP/M". BYTE. pp. 257–268. Retrieved 19 March 2016.
  3. ^ "Screen dumps". The Linux keyboard and console HOWTO. The Linux Documentation Project. Retrieved 2008-07-31. The current contents of the screen of /dev/ttyN can be accessed using the device /dev/vcsN (where `vcs' stands for `virtual console screen'). [...] From a program it is usually better to use /dev/vcsaN (`virtual console screen with attributes') instead - it starts with a header giving the number of rows and columns and the location of the cursor. See vcs(4).


External links[edit]