Why so many Virtual consoles?

Short answer: why not? (implied smile, please)

More lengthy one: it is mostly a history thing, I suppose. There were 6 virtual consoles configured with getty in the first linux I booted with VC support, I really forgot when (it was around 1990, I think). Then when you started the graphical environment (by hand, with startx) it opened itself on the first free VC, which happened to be #7. And I still did most of my work on VCs at the time: the editors were much faster and sometime I used more VCs than the standard six, and my laptop was not exactly a graphic monster...

For example, I used to run three editors (a program, its input data, a TeX file describing it), one VC for compiling, another to read a manual, and another one connected via telnet to my mail server.

I suspect that the rationale for still using six virtual consoles is to let the graphic VC on #7 for everyone, so you can write on manuals "Ctrl-Alt-F7" and not "Ctrl-Alt-Fx where x is the first free VC".

As a side note, you can (I suppose --- never tried) trim down the VCs. Simply do

sudo bash -c "echo 'manual' >> /etc/init/tty6.override"

to stop VC#6, following the upstart manual.


Why not more? Run top or htop in one (gives cpu/memory usages statics), ssh to other systems in 2 or 3, run some automated task in another, keep one free just in case, login to multiple users in a few more, run cmatrix on one, start the GUI in another with -

startx -- :1

(some graphics have bugs with this)

http://mostlylinux.wordpress.com/troubleshooting/ttysessions/

When you really start to utilize this feature 7 tty's (the seventh one is the default)seem way to few - and you can add more.

To reduce the number: How can I reduce the number of TTYs?


All of the /dev/tty* entries are something known as device file, in accordance with Unix philosophy. They serve as a link between user and actual device, but their purpose may differ slightly.

How virtual consoles allocated

Per console(4) manual:

Before kernel version 1.1.54 the number of virtual consoles was compiled into the kernel (in tty.h: #define NR_CONSOLES 8) and could be changed by editing and recompiling. Since version 1.1.54 virtual consoles are created on the fly, as soon as they are needed.

Dynamic creation in pre-systemd systems is controlled via /etc/default/console-setup variable ACTIVE_CONSOLES. From console-setup(5) manual:

ACTIVE_CONSOLES Specifies the device files in /dev of the virtual terminals to be configured. File name wild-cards (*, ?) are allowed. On Linux usually you can set this to /dev/tty[1-6] and on FreeBSD a sensible value is /dev/ttyv[0-8]. You can assign to this variable also the special value guess. It will cause setupcon(1) to attempt to guess the active virtual consoles by looking in configuration files such as /etc/inittab and /etc/ttys. This guessing is not always reliable.

Systemd configuration relies on /etc/systemd/logind.conf variable NAutoVTs. Quote from logind.conf documentation

NAutoVTs= Takes a positive integer. Configures how many virtual terminals (VTs) to allocate by default that, when switched to and are previously unused, "autovt" services are automatically spawned on. These services are instantiated from the template unit [email protected] for the respective VT TTY name, for example, [email protected]. By default, [email protected] is linked to [email protected]. In other words, login prompts are started dynamically as the user switches to unused virtual terminals. Hence, this parameter controls how many login "gettys" are available on the VTs. If a VT is already used by some other subsystem (for example, a graphical login), this kind of activation will not be attempted. Note that the VT configured in ReserveVT= is always subject to this kind of activation, even if it is not one of the VTs configured with the NAutoVTs= directive. Defaults to 6. When set to 0, automatic spawning of "autovt" services is disabled.

Decreasing appropriate variable for your environment and rebooting will help decreasing the number of VTs. Deleting those devices can be done manually via this command:

sudo bash -c 'for num in $(seq 10 63 ) ; do MAKEDEV -v -d "tty$num" ; done'

This , however, is somewhat pointless - the device files do not take up any space and don't influence system performance.

See also https://askubuntu.com/a/27975/295286

Virtual consoles general info

Device files like /dev/tty123 can be used to interact with the system via regular shell.Those are virtual terminals. Ubuntu system is configured to open by default TTY 1 through 6 , but one can manually open more, for example:

sudo openvt -c 9 -s "bash"

That will open bash as root on /dev/tty9 and immediately switch you to that TTY ( if done on local terminal, but if you do so via remote ssh session, in which case you may need to use chvt 9 , where 9 is /dev/tty9 in this example). To do the same without sudo as non-root, you will have to change ownership of tty you want to open. For example,

$ sudo chown admin_user:tty /dev/tty8 
$ openvt -c 8 -l 

That would log me in with my default shell on tty8. In my tests, however, it seems that this works via TTY only, so if you're doing that via terminal emulator, that might not work ( I was getting Couldn't get a file descriptor referring to the console error and only sudo openvt -c 8 -l worked for me from emulator )

From historical standpoint, before all the fancy terminal multiplexers were created, this was a useful feature - you could spawn up to 62 commands ( maybe servers ) on those consoles, and let them run, while working in 63rd. Nowadays, it might not be as necessary.

There are multiple device files created by default. Active ones are 1 through 6, but one can alter their number by editing /etc/default/console-setup, specifically this part:

# Setup these consoles.  Most people do not need to change this.
ACTIVE_CONSOLES="/dev/tty[1-6]"

ttyS* devices

These are device files used for serial consoles , aka UART (also known as RS-232 ). In the past many computer systems would come with serial port. Nowadays, this could mostly be found on server type of computers. Multiple ttyS devices could be useful with RS-232 hubs, which allow connecting multiple devices to be managed via USB or Ethernet.

For electrical engineers (which is what I am majoring in in college) , we use serial port to interact with microcontrollers and development boards ( Arduino , for instance ). Single port computers , such as Raspberry Pi, also use it. Nowadays, the serial connection is established using USB to UART cable, and opening the console in terminal via screen like so:

screen /dev/ttyUSB0 115200 # the number is baud rate or speed

Note , that Arduino and Raspberry will create their own device file for serial connection, /dev/ttyUSB0 or /dev/ttyACM0

vcs* devices

According to man vcs these are console memory devices. In simple words, if you do sudo cat /dev/vcs1 you will see what's on screen in /dev/tty1 , at least up to maximum amount of lines in that terminal.