概述
目录
前言
一、终端模拟
1.1、图形功能
1.1.1、字符集
1.1.2、控制码
1.1.3、模块显示图形
1.1.4、矢量图形
1.1.5、显示缓冲
1.1.6、色彩
1.2、键盘
二、terminfo数据库
三、Linux控制台
前言
Linux早期,可以用来工作的只有shell。系统管理员、程序员和系统用户都坐在Linux命令行终端前、输入文本命令,查看文本输出。现在有了绚丽的图形化桌面环境,在系统上找到shell提示符都要变得困难起来。
一、终端模拟
- 在图形化桌面之前,和Unix系统交互的唯一方式是通过shell提供的文本命令行界面(CLI,Command Line interface)。CLI只允许输入文本,而且只能显示文本和低级图形输出。
- CLI只允许输入文本切只能显示文本和低级图形输出,因此输出设备不必非常好。
- 通常一个简单的哑终端就是一个和Unix系统交互所需要的所有设备。
- 哑终端(dumb terminal)通常是由通信电缆(通常是多线串行电缆,也叫带状电缆)连接到Unix系统上的显示器和键盘。这个简单组合提供了向Unix系统输入数据和显示文本结果的一条捷径。
- 有了图形化桌面的新功能,有时在Linux发行版上找个人进入CLI的途径不是一件容易的事情。
- 进入CLI的一个途径是让Linux系统退出图形化桌面模式,进入文本模式。这样在显示器上只提供了一个简单的shell CLI,跟图形化桌面出现以前一样。这种模式称为Linux控制台因为它模拟早期硬接线(hard-wired)控制台终端,而且是跟Linux系统交互的直接接口。
- 进入Linux控制台的另外一种办法是使用图形化Linux桌面环境里的终端模拟包,终端模拟会模拟在哑终端上工作,所有的都在桌面上的一个图形化窗口中。
- 图形化Linux桌面环境运行的终端模拟器如下
哑终端中用到的主要功能可以分成两块:图形功能和键盘。
1.1、图形功能
终端模拟的最重要的部分是它如何在显示器上显示信息。
1.1.1、字符集
- 所有的终端都必须在屏幕上显示字符(否则文本模块就失去意义另外),关键是在于显示什么样的字符以及Linux系统需要发送什么样的代码来显示他们。字符集是一组二进制命令。Linux系统可以将它们发送给显示器来显示字符。
- 字符集是一组二进制命令,Linux系统可以将它们发送给显示器显示字符
- 各种终端模拟包支持的字符集有以下几种:
- ASCII:美国信息交换标准码。此字符集包含7位码的英文字符,由128个英文字母(包括大小写),数字和特殊符号组成。由美国国家标准协会(ANSI)批准为US-ASCLL。
- ISO-8859-1(通常称为Latin-1) ASCII字符集的一个扩展,由ISO制定。它采用8为码来支持ASCII字符,以及大多数西欧语言中的特殊外语字符。
- ISO-8859-2 ---ISO字符集,支持东欧语言字符。
- ISO-8859-6 ---ISO字符集,支持阿拉伯语言字符。
- ISO-8859-7 ---ISO字符集,支持希腊语字符。
- ISO-8859-8 ---ISO字符集,支持系泊来语字符。
- ISO-10646(通常称为Unicode) --- ISO 双字节字符集,包含大部分英语和非英语语言的代码,这个字符集包含了所有ISO-8869-x系列字符集中的所有字符。
1.1.2、控制码
- 除显示字符外,终端还必须能控制显示器和键盘上的功能。
- 控制码是一种未在字符集中的特殊代码;他会发信号给终端来执行特殊的非打印操作。
- 常见的控制码功能用:回车、换行、水平制表、方向键、翻页键。
- 控制码用来控制哑终端的通信功能。XON开启终端数据传输,XOFF停止终端数据传输。
1.1.3、模块显示图形
- 哑终端的兴起,制造商开始实验基本的图形功能。
- DEC VT100终端是第一个支持完整ANSI字符集的终端。
- ANSI字符集包含的代码不但是允许显示文本,而且允许显示基本的图形符号,比如框、线、块。
1.1.4、矢量图形
Tektronix公司产生了一些列流行的终端,它们采用了一种叫做矢量图的显示方法。矢量图形是基于EDC的块模式图形方法设计的。
1.1.5、显示缓冲
- 图形显示的关键是终端缓冲数据的能力,缓冲数据需要终端内部有额外的内存来存储当前未在显示器上显示的字符 。
- DEC VT系列终端使用了两种类型色数据缓冲
- 在主显示窗口中翻屏时缓冲数据(该数据称为历史数据)
- 缓冲一个完全独立的显示窗口(被为备用屏幕)
- 第一种类型的缓冲称为滚动区域(scroll region).滚动区域是终端拥有的内存数量,它使等终端能在翻屏时"记住"数据。
- 第二种类型的缓冲被称为代替屏幕(alternative screen)
1.1.6、色彩
- 即使是在黑白世界的哑终端时代,程序员也在实验用不同的方法来呈现数据。大多数终端支持特殊的控制码来生成下列类型的特殊文本。
- 加粗字符
- 下划线字符
- 图像反转
- 闪烁
1.2、键盘
终端模拟包中常见特殊键。
- 终端(Break) ---- 给主机发送一串0。它通常用来中断shell中当前正在执行程序。
- 滚动锁定(Scroll Lock) ---- 禁止滚动(No Scroll),他会停止显示上的输出。有些终端含有存储显示内容的内存,从而用户可以在滚动锁定打开时翻转出前面看过的信息。
- 重复(Repeat) ---- 当按下这个键和其他键时,他会让终端反复地向主机发送另外一个键的键值。
- 返回(Return) ---- 通常用来向主机发送一个回车字符。
- 删除(Delete) ---- 虽然基本上是个简单功能,但删除键给终端模拟包制造了混乱。PC机上的两个删除键(Backspace)、删除键(Delete)
- 方向键(Arrow key) ---- 常用来定位光标
- 功能键(Function key) ---- 两组功能键F1~F20,PF1~PF4.
二、terminfo数据库
- terminfo数据库是一组文件库,这些文件标识了各种可以在Linux系统上的终端的特性。Linux系统将每种终端类型的terminfo数据作为一个单独的文件存储在terminfo数据库目录。这个目录的位置经常随发行版的不同而不同。常见的位置有/usr/share/terminfo、/etc/terminfo、/lib/terminfo
- terminfo文件是一个二进制文件,他是编译文本文件的结果。这个文本文件含有定义屏幕功能的代码字,以及在终端上实现这个功能所需的控制码。
- terminfo是一个二进制文件,无法看到这些文件中的代码,但可以用infocmp命令来将二进制条目转换为文本
[user@localhost ~]$ infocmp vt100
# Reconstructed via infocmp from file: /usr/share/terminfo/v/vt100
vt100|vt100-am|dec vt100 (w/advanced video),
am, mc5i, msgr, xenl, xon,
cols#80, it#8, lines#24, vt#3,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=E[5m$<2>, bold=E[1m$<2>,
clear=E[HE[J$<50>, cr=^M, csr=E[%i%p1%d;%p2%dr,
cub=E[%p1%dD, cub1=^H, cud=E[%p1%dB, cud1=^J,
cuf=E[%p1%dC, cuf1=E[C$<2>,
cup=E[%i%p1%d;%p2%dH$<5>, cuu=E[%p1%dA,
cuu1=E[A$<2>, ed=E[J$<50>, el=E[K$<3>, el1=E[1K$<3>,
enacs=E(BE)0, home=E[H, ht=^I, hts=EH, ind=^J, ka1=EOq,
ka3=EOs, kb2=EOr, kbs=^H, kc1=EOp, kc3=EOn, kcub1=EOD,
kcud1=EOB, kcuf1=EOC, kcuu1=EOA, kent=EOM, kf0=EOy,
kf1=EOP, kf10=EOx, kf2=EOQ, kf3=EOR, kf4=EOS, kf5=EOt,
kf6=EOu, kf7=EOv, kf8=EOl, kf9=EOw, lf1=pf1, lf2=pf2,
lf3=pf3, lf4=pf4, mc0=E[0i, mc4=E[4i, mc5=E[5i, rc=E8,
rev=E[7m$<2>, ri=EM$<5>, rmacs=^O, rmam=E[?7l,
rmkx=E[?1lE>, rmso=E[m$<2>, rmul=E[m$<2>,
rs2=E>E[?3lE[?4lE[?5lE[?7hE[?8h, sc=E7,
sgr=E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t 16%e 17%;$<2>,
sgr0=E[m 17$<2>, smacs=^N, smam=E[?7h, smkx=E[?1hE=,
smso=E[7m$<2>, smul=E[4m$<2>, tbc=E[3g,
[user@localhost ~]$
terminfo条目定义了终端名(本列中是vt100),以及可以跟终端名关联起来的所有别名,注意第一行说明了提取这些值的terminfo文件的位置。
- terminfo代码功能
- Linux shell 使用TERM环境来定义特定会话使用termifo数据库中的哪个终端模拟设置。
- 当TERM环境变量设为vt100时,shell就知道使用跟vt100terminfo数据库条目关联的控制码来向终端模拟器发送控制码。要查看TERM环境变量。
三、Linux控制台
- 当Linux系统启动时他会自动创建几个虚拟控制台。虚拟控制台是运行在Linux系统内存中的一个终端会话。
- 虚拟机
- linux登录界面
- 在用户ID和密码登录后,会呈现Linux bash shell CLI,在控制台中,不能运行任何图形化程序,只能使用文本程序来在Linux文本控制台进行显示。
- 登录虚拟机控制台后,可以让它保持活动并切换到另外一个虚拟控制台上而不会丢失活动的会话。
最后
以上就是直率酸奶为你收集整理的初步了解Linux(2)前言一、终端模拟二、terminfo数据库三、Linux控制台 的全部内容,希望文章能够帮你解决初步了解Linux(2)前言一、终端模拟二、terminfo数据库三、Linux控制台 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复