Users of GNU/Linux, FreeBSD, macOS and other Unix implementations are probably used to hearing the words terminal emulator thrown around. However, fewer users are aware of why exactly this term is so common. Terminal emulators are extremely common pieces of software, but they’re not the same things as the command lines that they provide. Many users utilize these terms as though they were interchangeable when in reality they’re actually not.
There’s a few tricks designed to illustrate what a terminal emulator is and isn’t in this article. They’re mostly based on POSIX command line calls, so Unix users of all shades can enjoy them. Linux users who want to give it a try can hold down Ctrl, Alt and T to open up a terminal emulator. Apple macOS users might want to start a terminal emulator by clicking on the icon from the dock. Headless operators of FreeBSD, NetBSD, Darwin, OpenIndiana and other Unix implementations are probably already at a command line. Those with graphical interfaces may start one easily by clicking on the Applications menu, pointing at System Tools and clicking on Terminal.
Defining the Words Terminal Emulator
It’s first useful to understand what a teletype machine refers to. Originally, if you had wanted to interact with a Unix system or many other mainframe designs you’d need to worked with a teletype or TTY machine. These machines work by sending frequency shift keyed tones over a transmission line in order to present textual data encoded in simple binary. These systems ultimately spawned the ASCII encoding that’s used for text files.
A real genuine terminal isn’t a window floating on a computer screen. It’s actually a dedicated keyboard and monitor. While various coders throughout history have had their preferred terminals, the VT100 was a popular option that many terminal emulator packages now represent in code. These machines were ironically emulating teletype machines. In a way, these machines are slowly starting to come back in the form of thin clients that interface with powerful server installations.
You also have the concept of a PTY pseudo-terminal. This master and slave pair allows a piece of software like SSH or a GUI terminal to offer a terminal-like interface through a PTS to a user coming from a master called a PTMX. When you’re running a GUI terminal, type the letter w and then push enter. You’ll see that it claims you’re latest command came from a pts, which is the slave pair to the PTMX that’s running the show in the first place.
Now, what you just entered that command into is a shell. That’s the command line interpreter that’s run on login. Examples include bash, ash and tcsh. It’s running inside of a terminal editor, which is a program that emulates a terminal and pretends you’re working at a real life console with a keyboard and display plugged in using the old-fashioned protocols. While you might say that you very well may be at a genuine keyboard and monitor, you need to be at one that sends the actual data protocols that these old bits of code would expect.
BSD and Linux distributions additionally provide something called a virtual console or virtual terminal when you hold down Ctrl, Alt and F2 or another common key combination. This is an emulation of a full console with a keyboard and display using those same old protocols that a traditional terminal would use. This will more than likely seem rather confusing because all of these terms have sort of become intertwined to refer to modern command line environments. You’ll hear references to terminals, terminal emulators, consoles, command lines and shells in ways that all refer to simply using text to control a computer system.
There’s another class of terminal emulators that allow SSH remote shells. These act as though they’re a physical display and keyboard calling into a remote system. This is useful for using a modem or perhaps more commonly now an Ethernet connection to contact other computers or bulletin boards as well as accessing telnet sites and doing repair work to routers and the like. If you’ve ever used an SSH program or the telnet command in Linux, then you’ve used this sort of a piece of software. You might also think back to the HyperTerminal program that was popular in Windows 95.