默认情况下,控制台切换使用 Alt-Fn 或 Ctrl-Alt-Fn 完成。在 X
(或最近版本的 dosemu
)下,只有 Ctrl-Alt-Fn 有效。许多键盘布局允许使用 Alt-RightArrow 和 Alt-LeftArrow 循环遍历所有已分配的控制台。
XFree86 1.3 不知道当您切换到 X 窗口时 Alt 键处于按下状态。因此,您无法立即再次切换到其他 VT,而必须先释放 Alt 键。在另一个方向上,这应该可以工作:内核始终跟踪所有键的按下/释放状态。(尽可能地:在某些键盘上,某些键在按下时(例如:FOCUS 9000 的 PFn 键)或释放时(例如:许多键盘的 Pause 键)不会发出扫描码。)
XFree86 1.3 在启动时保存字符 ROM 中加载的字体,并在控制台切换时恢复它。因此,在 VT 上 setfont
的结果在您进入 X 并返回时会被擦除。在 X 下使用 setfont
将导致奇怪的结果。
可以使用 chvt
命令在程序控制下更改 VT。
这个问题仍然不时出现,但答案是:您已经拥有足够的虚拟控制台。自从内核版本 1.1.54 以来,虚拟控制台的数量在 1 到 63 之间。一个新的虚拟控制台在打开时立即创建。它由实用程序 deallocvt
删除(但只有当没有进程再与其关联,并且其上没有文本被诸如 selection
或 gpm
之类的程序选择时才能删除)。
对于较旧的内核,请更改以下行
#define NR_CONSOLES 8
在 include/linux/tty.h
中(不要将此数字增加到 63 以上),并重新编译内核。如果它们尚不存在,请使用 MAKEDEV
或 mknod tty
N c 4
N 创建 tty 设备,其中 N 表示 tty 编号。例如,
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
如果您希望新的 VC 运行 getty
,请在 /etc/inittab
中添加行。(但是最好只运行两个 getty
,并根据需要动态创建更多控制台。这样,当您不使用所有这些控制台时,您将拥有更多内存,并且在您确实需要它们时,也会有更多控制台。编辑 /etc/inittab
并注释掉除前两个之外的所有 getty
。)
当控制台动态分配时,通常最简单的方法是只运行一个或两个 getty
。更多控制台通过 open -l -s bash
打开。未使用的控制台(没有关联的进程)使用 deallocvt
(以前是 disalloc
)取消分配。但是,您说,我参与的活动中,我突然需要更多控制台,并且没有 bash 提示符来给出 open
命令。幸运的是,可以在单个按键时创建一个新的控制台,而不管当前控制台上发生什么。
如果您有来自 kbd-1.04.tar.gz
的 spawn_login
并且您将
loadkeys << EOF
alt keycode 103 = Spawn_Console
EOF
spawn_login &
放在 /etc/rc.local
中,那么按 Alt-UpArrow 将创建一个新的 VC 运行 login
(并切换到它)。使用 spawn_console &
而不是 spawn_login &
,您将在那里运行 bash。另请参阅 open-1.4.tgz
和 dynamic-vc-1.1.tar.gz
。此 Spawn_Console 按键应采取的操作也可以在 /etc/inittab
的 kbrequest
下设置,如果您有最新的 init
。请参阅 inittab(5)。
(此操作可以是完全不同的 - 我只是将该键称为 Spawn_Console,因为这就是我使用它的目的。当用于其他目的时,使用其同义词 KeyboardSignal 不那么令人困惑。例如,有些人喜欢将以下行
kb::kbrequest:/sbin/shutdown -h now
放在 /etc/inittab
中,并将
control alt keycode 79 = KeyboardSignal
control alt keycode 107 = KeyboardSignal
放在他们的键盘布局中。现在 Ctrl-Alt-End 将执行系统关机。)您只能以“root”身份登录到 /etc/securetty
中列出的终端。存在一些程序,它们从文件 /etc/ttys
和 /etc/ttytype
中读取终端设置。如果您有此类文件,并且创建了额外的控制台,那么最好也在这些文件中为它们添加条目。