下一页 上一页 目录

4. 重置您的终端

屏幕上出现乱码,或者所有按键都回显为线条字符。该怎么办?

许多程序在按下 Ctrl-L 时会重绘屏幕。这可能有助于解决屏幕上出现调制解调器噪声或广播消息的情况。命令 clear 将清除屏幕。

命令 reset 将重置控制台驱动程序。这有助于解决屏幕上布满奇怪的图形字符,以及屏幕内容被缩减到底部单行的情况。如果您没有此命令,或者它执行了其他操作,请通过在 PATH 中的可执行文件 reset 中放入以下两行来创建您自己的命令

        #!/bin/sh
        echo -e \\033c
也就是说,您需要向控制台发送两个字符 ESC c。

为什么显示有时会变得混乱,并给您一个 24 行或 1 行的屏幕,而不是通常的 25 行?嗯,主要原因是远程登录时使用了 TERM=vt100(或其他 24 行的条目)而不是 TERM=linux。如果这种情况发生在 /dev/tty2 上,那么输入

        % cat > /dev/tty2
        ^[c
        ^D
在另一个 VT 上(其中 4 个符号被键入到 cat:ESC、c、ENTER、Ctrl-D)并在 /dev/tty2 上刷新屏幕(可能使用 Ctrl-L)将解决问题。当然,永久的解决方法是使用正确的 termcap 或 terminfo 条目。一个只更改行数的命令是
        % echo -e "\033[1;25r"

为什么有时会得到很多线条字符,例如,在将二进制文件 cat 到屏幕后?嗯,有各种字符集更改转义序列,并且您的二进制文件可能意外地包含其中一些。ESC c 是通用重置,是所有问题的解决方案,但是如果您确切知道哪里出了问题,则可以在不重置其他控制台属性的情况下修复它。例如,在

        % cat
        ^N
        ^D
您的 shell 提示符将全部是线条字符。现在执行(盲打)
        % cat
        ^O
        ^D
一切又都恢复正常了。(每个 cat 输入三个符号:Ctrl-N(或 Ctrl-O)、ENTER、Ctrl-D。)要了解发生了什么,请参阅下面的“控制台字符集”。

如果您加载了一些奇怪的字体,并想返回默认字体,

        % setfont
就可以了(前提是您将默认字体存储在默认位置)。如果此默认字体不包含嵌入的 Unicode 映射(并且为带重音符号的字符提供了错误的符号),那么请使用
        % loadunimap
例如,如果我执行
        % loadkeys de-latin1
那么我有一个德语键盘,Enter 键左侧的键给我 a-umlaut。这可以工作,因为 a-umlaut 出现在 CP437 代码页上,并且内核 Unicode 映射被初始化为 CP437,并且我的显卡内置了 CP437 字体。如果我现在加载 ISO 8859-1 字体
        % setfont iso01.f16
那么一切仍然可以工作,因为 setfont 使内核 Unicode 映射无效(如果字体没有附加 Unicode 映射),并且在没有映射的情况下,内核直接转到字体,这对于使用 iso01.f16 字体的 ISO 8859-1 系统来说是完全正确的。但是,使用以下命令返回到之前的字体
        % setfont
会给出大写 Sigma 而不是 a-umlaut - 所有带重音的字母都混在一起了,因为此字体也没有嵌入的 Unicode 映射。之后
        % loadunimap
它加载默认的 Unicode 映射(对于默认字体是正确的),一切又都可以正常工作了。通常,loadunimap 不是直接调用的,而是通过 setfont 调用的。因此,之前的两个命令可以替换为
        % setfont -u def
如今,大多数字体都嵌入了 Unicode 映射(通常由扩展名 .psfu 表示),并且不再需要这些无意义的操作了。

在非常旧的终端上,涉及制表符的输出可能需要延迟,您必须使用

        % stty tab3
(请参阅 stty(1))。

您可以使用 resizeconsSVGATextMode 更改视频模式。或者通过重新启动并在 LILO 配置文件中设置 “vga=ask”。

这通常可以解决输出方面的问题。

在输入方面,可能有很多问题。如果 XDOOM 或其他一些使用原始模式的程序崩溃了,您的键盘可能仍然处于原始(或中等原始)模式,并且很难发出命令。(请参阅下面的“如何退出原始模式”。)如果您加载了错误的键盘映射,那么

        % loadkeys -d
会再次加载默认映射,但可能很难输入 `-`!另一种选择是
        % loadkeys defkeymap
有时甚至字母都乱码了。了解有四种主要的键盘类型很有用:QWERTY、QWERTZ、AZERTY 和 DVORAK。前三种以其前六个字母键命名,大致代表英语、德语和法语国家。与 QWERTY 相比,QWERTZ 映射交换了 Y 和 Z。与 QWERTY 相比,AZERTY 映射交换了 Q 和 A、W 和 Z,并且其 M 位于 L 的右侧,在分号位置。DVORAK 具有完全不同的字母顺序。土耳其键盘有两种类型。所谓的 “Q” 键盘具有 QWERTY 布局,而 “F” 键盘具有完全不同的布局,例如 fgGIod,其中 G 代表 Gbreve,I 代表 dotlessi。

4.1 键盘硬件重置

问题可能发生在 Linux 未知的更低级别。至少有两个不同的较低级别(键盘和键盘控制器)可以在其中向键盘硬件发出 “keyboard disable” 命令。键盘通常可以被编程为使用三组不同的扫描码中的一组。

但是,我不知道有任何案例表明这会成为问题。

某些键盘内置了重新映射功能。Stormy Henderson (stormy@Ghost.Net) 写道:“如果您的键盘意外地被重新编程,您可以(在 Gateway AnyKey 键盘上)按下 control-alt-suspend_macro 来将按键重置为正常状态。”


下一页 上一页 目录