TTY && CONSOLE && VT

TTY 控制台、虚拟终端的含义、联系与区别

TTY

内核为终端提供的接口,对应用程序而言就是 TTY 设备。通常是使用 stdin stdout 来访问。TTY 提供各种 IOCTL 用来设置终端的模式。TTY 也提供了用户控制程序的方法,比如 Ctrl-C 终止当前程序。 TTY 可以是显示器 + 键盘构成的控制台,也可以是串口(可以通过猫链接到电话线上),可以通过 pts 模拟。XTERM 即利用 pts 为里面运行的程序提供的模拟的终端 , 对应的设备文件 /dev/pts/* 由模拟终端程序动态创建。

控制台 (CONSOLE)

控制台特指由显示器 + 键盘构成的终端。其中显示器由显卡控制,而且当前 VGA 兼容显卡有两种模式,文字模式和图形模式。Linux 即可以使用文字模式也可以使用图形模式。

控制台对于程序是无法访问的,程序只能通过虚拟终端使用控制台

虚拟终端 (VT)

如果你的电脑只有一个终端,那将是多么乏味。一个需要长时间执行的任务就能导致你什么也做不了,Linux 的多任务机制的好处荡然无存。所以,你需要更多的终端。Linux 内核使用复用机制,将一个控制台复用为多个终端 (63 个,/dev/tty1 dev/tty63) 按键 Alt+F1-F12 ( 如果当前在 X 中,需要再按下 Ctrl ) 能在 12 个终端中进行切换。事实上你拥有 63 个终端,键盘只能切换其中的 12 个,其他的终端你可以通过 chvt 命令进行切换。

当前拥有显示器和键盘的虚拟终端被称为活动终端或者当前终端。

TTY、控制台和虚拟终端有啥区别和联系?

当你按下 Ctrl-C 的时候,当前执行的程序会被终止。因为 Linux 发送了 SIGTERM 信号给此终端的前台程序。该信号并不是由 Shell 产生,而是内核。不论是在虚拟终端下,还是在 X 里的终端模拟器里,这个功能都是一样的。终端的一大功能就是进行任务控制,另一个功能是输入输出。输入输出模式下,还可以选择行编辑模式,回显模式,设置终端速率等等。不管你使用的是何种终端,这些功能都是存在的,因为他们都是一个类型的设备。内核将他们抽象为 TTY 设备。也就是说,应用程序都是在和 TTY 这个抽象层打交道,而不是和具体的设备打交道。 能作为 TTY 的设备除了控制台外,还有串口。将两台电脑的串口连接起来,其中一台电脑为串口打开登录程序(执行 /sbin/agetty ttyS0 38400),另一台就能通过可以进行串口通信的程序 ( 比如 puttyminicom) 登录对方。 控制台可以作为 TTY 设备,但是一台电脑一般只有一个屏幕,也就使用一个控制台,所以 Linux 在控制台和 TTY 之间加了一层虚拟终端。由虚拟终端将控制台复用,这样就可以使用多个终端而不是只有一个了。多个虚拟终端设备合作使用一个控制台。 除了串口和虚拟终端,这些都是在内核实现的 TTY 设备,内核还提供了一个叫 PTY 的为终端设备,XTERM 之类的程序利用 PTY 提供的功能可以在程序里实现 TTY 的功能。 那么,虚拟终端就是利用控制台复用出了多个 TTY TTY 逻辑由 TTY 子系统完成,复用逻辑由虚拟终端实现,而具体的显示则交给控制台完成。如果说这是一个观察者模型的话,控制台就是观察者,它将虚拟终端的内容呈现到屏幕上。 Linux 下,控制台分文字模式控制台(vgacon)和图形模式控制台 (fbcon)

 

beautify the font in console

美化定制console下的字体

 

首先,安装以下几个软件包:

对于Debian类系统,使用sudo dpkg-reconfigure console-setup

对于Redhat类系统,使用yum install terminus-fonts terminus-fonts-console

 

完了以后使用 setfont 字体文件名即可(扩展名可有可无)

字体路径,Ubuntu中是/usr/share/consolefonts/Archlinux中是/usr/share/kbd/consolefonts/CentOS/lib/kbd/consolefonts/

我推荐使用term系列字体,很漂亮,偶现在用的是ter-g16f.psf.gz字体。

即:setfont /lib/kbd/consolefonts/ter-g16f.psf.gz