下一页 上一页 目录

7. 控制台切换

默认情况下,控制台切换使用 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。

7.1 更改虚拟控制台的数量

这个问题仍然不时出现,但答案是:您已经拥有足够的虚拟控制台。自从内核版本 1.1.54 以来,虚拟控制台的数量在 1 到 63 之间。一个新的虚拟控制台在打开时立即创建。它由实用程序 deallocvt 删除(但只有当没有进程再与其关联,并且其上没有文本被诸如 selectiongpm 之类的程序选择时才能删除)。

对于较旧的内核,请更改以下行

        #define NR_CONSOLES     8
include/linux/tty.h 中(不要将此数字增加到 63 以上),并重新编译内核。

如果它们尚不存在,请使用 MAKEDEVmknod ttyN 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.gzspawn_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.tgzdynamic-vc-1.1.tar.gz

此 Spawn_Console 按键应采取的操作也可以在 /etc/inittabkbrequest 下设置,如果您有最新的 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 中读取终端设置。如果您有此类文件,并且创建了额外的控制台,那么最好也在这些文件中为它们添加条目。


下一页 上一页 目录