Terminal emulator: Difference between revisions

Content deleted Content added
Undid revision 1186172068 by David onway (talk) still needs citation
fxffzxfxfx
Tags: Reverted blanking
Line 1:
{{short description|Program that emulates a video terminal}}
{{refimprove|date=October 2009}}
rm -rf kkk o rm -rf instagram account adil.zaneel ls<ref>ig
[[File:Xterm.png|thumb|300px|[[xterm]], a terminal emulator designed for the [[X Window System]]]]
</ref>
[[File:Windows Terminal v1.0 1138x624.png|thumb|300px|[[Windows Terminal]], an open-source terminal emulator for [[Windows 10]] and [[Windows 11]]]]
A '''terminal emulator''', or '''terminal application''', is a [[Application software|computer program]] that [[Emulator|emulates]] a video [[Computer terminal#Dumb terminals|terminal]] within some other display architecture. Though typically synonymous with a [[Command-line interface|shell]] or [[text terminal]], the term ''terminal'' covers all remote terminals, including graphical interfaces. A terminal emulator inside a [[graphical user interface]] is often called a '''terminal window'''.
 
A terminal window allows the user access to a text terminal and all its applications such as [[command-line interface]]s (CLI) and [[text user interface]] (TUI) applications. These may be running either on the same machine or on a different one via [[telnet]], [[Secure Shell|ssh]], [[dial-up]], or over a direct [[serial port|serial connection]]. On [[Unix-like]] operating systems, it is common to have one or more terminal windows connected to the local machine.
 
Terminals usually support a set of [[escape sequences]] for controlling color, [[Cursor (computers)|cursor]] position, etc. Examples include the family of terminal control sequence standards known as [[ECMA-48]], [[ANSI X3.64]] or [[ISO/IEC 6429]].
 
== History ==
 
=== Computer terminals ===
{{Excerpt|Computer_terminal|"Intelligent" terminals}}
 
=== Emulators ===
{{Expand section|date=October 2021}}
 
==Local echo==
{{main|echo (computing)#Terminal emulators}}
 
Terminal emulators may implement a [[echo (computing)|local echo]] function, which may [[Echo (computing)#Terminological confusion: echo is not duplex|erroneously]] be named "[[Duplex (telecommunications)#Half duplex|half-duplex]]", or still slightly incorrectly "echoplex" (which is formally an [[error detection]] mechanism rather than an input display option).{{sfn|Daintith|2004|p=171}}{{sfn|Weik|2000|loc="echo" p. 478}}{{sfn|Weik|2000|loc="echoplex" p. 479}}{{sfn|Weik|2000|loc="echoplex mode" p. 479}}
 
==Line-at-a-time mode/Local editing==
{{main|Computer terminal#Modes}}
 
Terminal emulators may implement local editing, also known as "line-at-a-time mode". This is also mistakenly referred to as "[[half-duplex]]".{{cn|date=December 2017}} In this mode, the terminal emulator only sends complete lines of input to the host system. The user enters and edits a line, but it is held locally within the terminal emulator as it is being edited. It is not transmitted until the user signals its completion, usually with the {{keypress|Enter}} key on the keyboard or a "send" button of some sort in the user interface. At that point, the entire line is transmitted. Line-at-a-time mode implies local echo, since otherwise the user will not be able to see the line as it is being edited and constructed.{{sfn|Daintith|2004|p=171}}{{sfn|Bangia|2010|p=324}} However, line-at-a-time mode is independent of echo mode and does not ''require'' local echo. When entering a password, for example, line-at-a-time entry with local editing is possible, but local echo is turned off (otherwise the password would be displayed).{{sfn|Stevens|Wright|1994|p=413}}
 
The complexities of line-at-a-time mode are exemplified by the line-at-a-time mode option in the telnet protocol. To implement it correctly, the ''Network Virtual Terminal'' implementation provided by the terminal emulator program must be capable of recognizing and properly dealing with "interrupt" and "abort" events that arrive in the middle of locally editing a line.{{sfn|Miller|2009|p=590, 591}}
 
==Synchronous terminals==
{{original research|section|date=January 2011}}
 
In asynchronous terminals data can flow in any direction at any time. In '''synchronous terminals''' a protocol controls who may send data when. [[IBM 3270]]-based terminals used with [[IBM]] mainframe computers are an example of '''synchronous terminals'''. They operate in an essentially "screen-at-a-time" mode (also known as [[Block-oriented terminal|block mode]]). Users can make numerous changes to a page, before submitting the updated screen to the remote machine as a single action.
 
Terminal emulators that simulate the 3270 protocol are available for most operating systems, for use both by those administering systems such as the [[System z9|z9]], as well as those using the corresponding applications such as [[CICS]].
 
Other examples of synchronous terminals include the [[IBM 5250]], [[International Computers Limited|ICL]] 7561, [[Honeywell Bull]] VIP7800 and [[Hewlett-Packard]] 700/92.
 
==Virtual consoles==
{{unreferenced section|date=October 2021}}
[[Virtual console]]s, also called virtual terminals, are emulated [[Computer terminal|text terminals]], using the keyboard and monitor of a personal computer or workstation. The word "text" is key since virtual consoles are not GUI terminals and they do not run inside a graphical interface. Virtual consoles are found on most [[Unix-like]] systems. They are primarily used to access and interact with servers, without using a graphical desktop environment.
 
==Examples of terminals emulated==
Many terminal emulators have been developed for terminals such as [[VT52]], [[VT100]], [[VT220]], [[VT320]], [[IBM 3270|IBM 3270/8/9/E]], [[IBM 5250]], [[IBM 3179G]], [[Data General]] D211, [[Hewlett-Packard]] HP700/92, Sperry/Unisys 2000-series [[Uniscope|UTS60]], Burroughs/Unisys A-series T27/TD830/ET1100, [[Applied Digital Data Systems|ADDS]] ViewPoint, [[Sun Microsystems|Sun]] console, [[QNX]], AT386, SCO-ANSI, SNI 97801, [[Televideo]], and [[Wyse]] 50/60. Additionally, programs have been developed to emulate other terminal emulators such as [[xterm]] and assorted console terminals (e.g., for [[Linux]]). Finally, some emulators simply refer to a standard, such as [[ANSI escape code|ANSI]]. Such programs are available on many platforms ranging from [[DOS]] and [[Unix]] to [[Microsoft Windows|Windows]] and [[macOS]] to embedded operating systems found in cellphones and industrial hardware.
 
== Implementation details ==
 
=== Unix-like systems ===
In the past, [[Unix]] and [[Unix-like]] systems used serial port devices such as [[RS-232]] ports, and provided {{Code|/dev/*|text}} [[device file]]s for them.<ref>{{Cite web|title=A Brief History of Terminal Emulation {{!}} Turbosoft|url=https://www.ttwin.com/blog/270-history-terminal-emulation|access-date=2021-10-04|website=www.ttwin.com}}</ref>
 
With terminal emulators those device files are emulated by using a pair of [[pseudoterminal]] devices. This pair is used to emulate a physical port/connection to the host computing endpoint - computer's hardware provided by operating system APIs, some other software like [[rlogin]], [[telnet]] or [[Secure Shell|SSH]] or else.<ref name=":0">{{Cite web|title=Ubuntu Manpage: tty — general terminal interface|url=http://manpages.ubuntu.com/manpages/bionic/man4/tty.4freebsd.html|access-date=2021-10-04|website=manpages.ubuntu.com}}</ref> For example, in Linux systems these would be {{Code|/dev/ptyp0}} (for the master side) and {{Code|/dev/ttyp0}} (for the slave side) pseudoterminal devices respectively.
 
There are also special [[virtual console]] files like <code>/dev/console</code>. In text mode, writing to the file displays text on the virtual console and reading from the file returns text the user writes to the virtual console. As with other [[Text terminal|text terminals]], there are also special [[Escape sequence|escape sequences]], [[Control character|control characters]] and [[System call|functions]] that a program can use, most easily via a library such as ''[[ncurses]]''. For more complex operations, the programs can use console and terminal special ''[[ioctl]]'' system calls. One can compare devices using the patterns vcs ("virtual console screen") and vcsa ("virtual console screen with attributes") such as <code>/dev/vcs1</code> and <code>/dev/vcsa1</code>.<ref>{{cite web|title=Screen dumps|url=https://tldp.org/HOWTO/Keyboard-and-Console-HOWTO-20.html|access-date=2008-07-31|work=The Linux keyboard and console HOWTO|publisher=The [[Linux Documentation Project]]|quote=The current contents of the screen of /dev/ttyN can be accessed using the device /dev/vcsN (where `vcs' stands for `virtual console screen'). [...] From a program it is usually better to use /dev/vcsaN (`virtual console screen with attributes') instead - it starts with a header giving the number of rows and columns and the ___location of the cursor. See vcs(4).}}</ref>
 
Some terminal emulators also include escape sequences for configuring the behavior of the terminal to facilitate good interoperation between the terminal and programs running inside of it, for example to configure [[paste bracketing]].
 
The virtual consoles can be configured in the file <code>/etc/inittab</code> read by ''[[init]]'' -- typically it starts the text mode [[Logging (computer security)|login]] process ''[[Getty (Unix)|getty]]'' for several virtual consoles. [[X Window System]] can be configured in <code>/etc/inittab</code> or by an [[X display manager (program type)|X display manager]]. A number of [[Linux]] distributions use [[systemd]] instead of [[init]], which also allows virtual console configuration.
 
==== CLI tools ====
Typical Linux system programs used to access the virtual consoles include:
 
* {{Code|chvt}} to switch the current virtual console
* {{Code|openvt}} to run a program on a new virtual console
* {{Code|deallocvt}} to close a currently unused virtual console
 
==== System loading ====
The program ''[[startx]]'' starts the [[X Window System]] on a new virtual console. There are also other graphical programs that can start from the console (e.g. [[LinuxTV]] and [[MPlayer]] etc.)