By default, console switching is done using Alt-Fn or Ctrl-Alt-Fn. Under X (or recent versions of dosemu), only Ctrl-Alt-Fn works. Many keymaps will allow cyclic walks through all allocated consoles using Alt-RightArrow and Alt-LeftArrow.
X
dosemu
XFree86 1.3 does not know that Alt is down when you switch to the X window. Thus, you cannot switch immediately to some other VT again but have to release Alt first. In the other direction this should work: the kernel always keeps track of the up/down status of all keys. (As far as possible: on some keyboards some keys do not emit a scancode when pressed (e.g.: the PFn keys of a FOCUS 9000) or released (e.g.: the Pause key of many keyboards).)
XFree86 1.3 saves the fonts loaded in the character ROMs when started, and restores it on a console switch. Thus, the result of setfont on a VT is wiped out when you go to X and back. Using setfont under X will lead to funny results.
setfont
One can change VT under program control using the chvt command.
chvt
This question still comes up from time to time, but the answer is: you already have enough of them. Since kernel version 1.1.54, there are between 1 and 63 virtual consoles. A new one is created as soon as it is opened. It is removed by the utility deallocvt (but it can be removed only when no processes are associated to it anymore, and no text on it has been selected by programs like selection or gpm).
deallocvt
selection
gpm
For older kernels, change the line
#define NR_CONSOLES 8
include/linux/tty.h
If they do not exist yet, create the tty devices with MAKEDEV or mknod ttyN c 4 N where N denotes the tty number. For example,
MAKEDEV
mknod tty
c 4
for i in 9 10 11 12; do mknod /dev/tty$i c 4 $i; done
for i in 9 10 11 12; do /dev/MAKEDEV tty$i; done
If you want the new VCs to run getty, add lines in /etc/inittab. (But it is much better to have only two getty's running, and to create more consoles dynamically as the need arises. That way you'll have more memory when you don't use all these consoles, and also more consoles, in case you really need them. Edit /etc/inittab and comment out all getty's except for the first two.)
getty
/etc/inittab
When the consoles are allocated dynamically, it is usually easiest to have only one or two running getty. More are opened by open -l -s bash. Unused consoles (without associated processes) are deallocated using deallocvt (formerly disalloc). But, you say, I am involved in activities when I suddenly need more consoles, and do not have a bash prompt available to give the open command. Fortunately it is possible to create a new console upon a single keystroke, regardless of what is happening at the current console.
open -l -s bash
disalloc
open
If you have spawn_login from kbd-1.04.tar.gz and you put
spawn_login
kbd-1.04.tar.gz
loadkeys << EOF alt keycode 103 = Spawn_Console EOF spawn_login &
/etc/rc.local
login
spawn_console &
spawn_login &
open-1.4.tgz
dynamic-vc-1.1.tar.gz
What action should be taken upon this Spawn_Console keypress can also be set in /etc/inittab under kbrequest, if you have a recent init. See inittab(5).
kbrequest
init
(This action can be something entirely different - I just called the key Spawn_Console because that is what I used it for. When used for other purposes it is less confusing to use its synonym KeyboardSignal. For example, some people like to put the lines
kb::kbrequest:/sbin/shutdown -h now
control alt keycode 79 = KeyboardSignal control alt keycode 107 = KeyboardSignal
You can only login as "root" on terminals listed in /etc/securetty. There exist programs that read terminal settings from files /etc/ttys and /etc/ttytype. If you have such files, and create additional consoles, then it might be a good idea to also add entries for them in these files.
/etc/securetty
/etc/ttys
/etc/ttytype