Linux 控制台
根据 维基百科
- Linux 控制台 是 Linux 内核 的内部系统控制台。Linux 控制台为内核和其他进程提供了一种向用户发送文本输出以及接收来自用户的文本输入的方式。用户通常使用计算机键盘输入文本,并在计算机显示器上读取输出文本。Linux 内核支持虚拟控制台——逻辑上独立的控制台,但它们访问相同的物理键盘和显示器。
本文介绍了 Linux 控制台的基础知识以及如何配置字体显示。/键盘配置 子页面描述了键盘配置。有关提供更多功能(完整的 Unicode 字体、现代图形适配器等)的替代控制台解决方案,请参阅 KMSCON 或类似项目。
实现
控制台与大多数直接与用户交互的服务不同,它是在内核中实现的。这与终端仿真软件(如 Xterm)形成对比,后者在用户空间中作为普通应用程序实现。控制台一直是已发布的 Linux 内核的一部分,但在其历史上经历了变化,最值得注意的是过渡到使用 帧缓冲 和支持 Unicode。
尽管控制台进行了许多改进,但其与旧硬件的完全向后兼容性意味着与图形终端仿真器相比,它仍然受到限制。Linux 控制台和图形终端仿真器之间的主要区别在于,Linux 控制台中的 shell 直接连接到 TTY 设备 (/dev/tty*
),而图形终端仿真器中的 shell 连接到伪 TTY (/dev/pty*
)。
此外,图形终端仿真器可以比 Linux 控制台具有更多的功能,包括更丰富的可用字体集、多个选项卡/窗口、拆分视图、回滚缓冲区/滑块、背景颜色/图像(可选透明度)等。其中一些功能可以在 Linux 控制台中与终端复用器(如 Tmux 或 GNU Screen)一起使用,或者在某些文本用户界面程序 (TUI) 中使用,这些程序通常依赖于 ncurses 等库,例如 Vim、nano 或 Emacs。如果需要,这些也可以在图形终端仿真器中使用。
虚拟控制台
控制台以一系列 虚拟控制台 的形式呈现给用户。这些虚拟控制台给人一种印象,即多个独立的终端正在同时运行;每个虚拟控制台都可以使用不同的用户登录,运行自己的 shell 并具有自己的字体设置。每个虚拟控制台都使用设备 /dev/ttyX
,您可以通过按 Alt+Fx
(其中 x
等于虚拟控制台编号,从 1 开始)在它们之间切换。设备 /dev/console
自动映射到活动的虚拟控制台。
另请参阅 chvt(1)、openvt(1) 和 deallocvt(1)。
文本模式
由于 Linux 最初是作为 PC 硬件的内核而开始的,因此控制台是使用标准 IBM CGA/EGA/VGA 图形开发的,当时所有 PC 都支持这些图形。图形在 VGA 文本模式下运行,该模式提供了一个简单的 80x25 字符显示,具有 16 种颜色。这种传统模式类似于专用文本终端(如 DEC VT100 系列)的功能。如果系统硬件支持,仍然可以在文本模式下启动(使用 vga=0 nomodeset
),但几乎所有现代发行版(包括 Arch Linux)都使用帧缓冲控制台。
帧缓冲控制台
随着 Linux 被移植到其他非 PC 架构,需要更好的解决方案,因为其他架构不使用 VGA 兼容的图形适配器,并且可能根本不支持文本模式。帧缓冲控制台的实现是为了在所有平台上提供标准控制台,因此无论底层图形硬件如何,都呈现相同的 VGA 风格界面。因此,Linux 控制台不是终端仿真器,而是它自己的终端。它使用终端类型 linux
,并且在很大程度上与 VT100 兼容。
键盘快捷键
键盘快捷键 | 描述 |
---|---|
Ctrl+Alt+Del
|
重启系统(由符号链接 /usr/lib/systemd/system/ctrl-alt-del.target 指定) |
Alt+F1 , F2 , F3 , ... |
切换到第 n 个虚拟控制台(不要与 Xorg 和 Wayland 中使用的 Ctrl+Alt+Fn 混淆) |
Alt+左方向键
|
切换到上一个虚拟控制台 |
Alt+右方向键
|
切换到下一个虚拟控制台 |
Scroll Lock
|
当 Scroll Lock 激活时,输入/输出被锁定 |
Ctrl+c
|
终止当前任务 |
Ctrl+d
|
插入 EOF |
Ctrl+z
|
暂停当前任务 |
另请参阅 console_codes(4)。
字体
Linux 控制台 默认使用 UTF-8 编码,但由于使用了标准的 VGA 兼容帧缓冲,控制台字体仅限于标准的 256 或 512 个字形。如果字体具有超过 256 个字形,则颜色数从 16 减少到 8。为了为给定的 Unicode 值分配要显示的正确符号,需要一个特殊的转换映射,通常称为 unimap。如今,大多数控制台字体都内置了 unimap;历史上,它必须单独加载。
默认情况下,虚拟控制台 使用内核内置字体,字符集为 CP437[1],但这可以很容易地更改。内核提供了大约 15 种内置字体可供选择,其中 官方支持的内核 提供了两种:VGA 8x16 字体 (CONFIG_FONT_8x16
) 和 Terminus 16x32 字体 (CONFIG_FONT_TER16x32
)。内核根据其对屏幕分辨率的评估选择要使用的字体。也可以通过 内核参数 引导参数设置(例如 fbcon=font:TER16x32
)强制使用另一个内置字体。
kbd 软件包提供了覆盖内核对虚拟控制台字体和字体映射的决定的工具。可用的字体在 /usr/share/kbd/consolefonts/
目录中提供;那些以 .psfu 或 .psfu.gz 结尾的字体内置了 Unicode 转换映射。
键盘映射(按下的键与计算机使用的字符之间的连接)位于 /usr/share/kbd/keymaps/
的子目录中;有关详细信息,请参阅 /键盘配置。
eurlatgr
字体。它包括广泛的拉丁/希腊字母变体以及特殊字符 [2]。预览和临时更改
$ showconsolefont
显示字体的字形或字母表。
showfont font_name
$ setfont lat2-16 -m 8859-2
setfont
临时更改字体(如果传递字体名称(在 /usr/share/kbd/consolefonts/
中),例如
setfont font_name
$ setfont -h8 /usr/share/kbd/consolefonts/drdos8x8.psfu.gz
字体名称区分大小写。不带参数,setfont
将控制台返回到默认字体。
因此,要使用 小 8x8 字体,并在安装了该字体的情况下(如下所示),请使用例如:
$ setfont -d ter-132n
setfont 8x8
- 要使用 更大 的字体,Terminus 字体 (terminus-font) 提供多种尺寸,例如
ter-132b
,它很大。 setfont ter-132b
-d
以获得双倍大小。这将使用 64*64 字体setfont 8x8 -d
提示
所有字体更改命令都可以“盲打”输入。
/etc/vconsole.conf
... FONT=lat2-16 FONT_MAP=8859-2
Terminus 字体名称 (ter-*
) 在 /usr/share/terminus-font/README
中解释。
注意: setfont 仅在当前使用的控制台上工作。任何其他控制台(活动的或非活动的)都保持不受影响。
持久配置
/etc/vconsole.conf
中的 FONT
变量用于在启动时为所有控制台持久设置字体。有关详细信息,请参阅 vconsole.conf(5)。
例如,要使用字体 lat2-16.psfu.gz
显示 Č, ž, đ, š 或 Ł, ę, ą, ś 等字符
/etc/vconsole.conf
FONT=lat2-16
- 这意味着 ISO/IEC 8859 字符的第二部分与大小 16 一起使用。您可以使用其他值更改字体大小(例如
lat2-08
)。对于 8859 规范确定的区域,请查看 维基百科:ISO/IEC 8859#ISO/IEC 8859 的各部分。 - 由于 mkinitcpio v33,
/etc/vconsole.conf
中指定的字体默认情况下通过consolefont
钩子在早期用户空间期间自动加载,该钩子将字体添加到 initramfs。有关更多信息,请参阅 Mkinitcpio#HOOKS。
如果字体在启动时似乎没有更改,或者仅暂时更改,则很可能是它们在图形驱动程序初始化并将控制台切换到帧缓冲时被重置了。默认情况下,所有树内内核驱动程序都会提前加载,NVIDIA 用户应查看 NVIDIA#提前加载 以在应用 /etc/vconsole.conf 之前加载其图形驱动程序。 |
光标外观 | |
---|---|---|
这个主题的文档很少。您应该阅读以下文章 |
|
|
(2) 下划线 |
|
|
(6) 完整块 |
|
|
闪烁
驱动程序相关
$ printf "\x1b\x5b?16;$((8+4+2+1));$((32+0+8+4+2+1))\x63"
背景色的最高位可以解释为“亮”或“闪烁”
$ printf '\033[?16;15;47c'
与控制台文本颜色相同(通常为白色/灰色)
vt.cur_default=0x2f0f10
可以由用户设置
控制台光标可以使用设备属性 (DA) 控制功能进行调整。参数序列必须以单个问号开头(尽管 console_codes(4) 说法相反)。
echo -en "\e[?16;15;47c"
echo -en "\e[?020;017;077c"
第二个参数,称为翻转掩码,翻转颜色的对应位。
背景 (光标块) |
前景 (光标下的符号) | |||||||
---|---|---|---|---|---|---|---|---|
高亮 或闪烁 |
红色 | 绿色 | 蓝色 | 高亮 或闪烁 |
红色 | 绿色 | 蓝色 | |
十进制 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
十六进制 | 80 | 40 | 20 | 10 | 8 | 4 | 2 | 1 |
在我们的例子中,第二个参数是 15 (内核参数的中间十六进制数字是 0f),因此所有四个前景(符号)位将被翻转。最重要的规则是:翻转(第二个参数)在设置(第三个参数)之后应用。
设置掩码
第三个参数称为设置掩码。它设置相应的字符属性位。在我们的例子中,我们使用 47 (内核参数的最左边十六进制数字是 2f),这意味着两件事
- (32)对光标块使用纯绿色
- (8+4+2+1)设置所有四个前景(符号颜色)位。这些位将被第二个参数翻转,因此光标下符号的颜色将变为黑色 (
0000
)。
HiDPI
音频提示音
参见 PC 扬声器#Beep。