What does the
tty command do? It prints the name of the terminal you’re using. TTY stands for “teletypewriter.” What’s the story behind the name of the command? That takes a bit more explaining.
Teleprinters From the 1800s
In the 1830s and 1840s, machines known as teleprinters were developed. These machines could send typed messages “down the wire” to distant locations. The messages were typed by the sender on a keyboard of sorts. They were printed on paper at the receiving end. They were an evolutionary step in telegraphy, which had previously relied on Morse and similar codes.
Messages were encoded and transmitted, then received, decoded, and printed. There were several techniques used to encode and decode the messages. The most famous, and one of the most prolific, was patented in 1874 by Émile Baudot, for whom the baud rate is named. His character encoding scheme pre-dated ASCII by 89 years.
Baudot’s encoding eventually became the closest thing to a standard in teleprinter encoding, and it was adopted by most manufacturers. Baudot’s original hardware design had only five keys, similar to piano keys. The operator was required to learn a particular key combination for each letter. Eventually, the Baudot encoding system was coupled to a traditional keyboard layout.
To mark that advancement, the machines were named teletypewriters. This was shortened to teletypes and eventually to TTYs. So that’s where we get the acronym TTY from, but what has telegraphy got to do with computing?
ASCII and Telex
When ASCII arrived in 1963, it was adopted by the teletype manufacturers. Despite the invention and widespread use of the telephone, teletypes were still going strong.
Telex was a worldwide network of teletypes that allowed written messages to be sent around the globe. They were the principal means of transmitting written messages in the period following World War II up to the fax machine boom of the 1980s.
Computers were evolving too. They were becoming capable of interacting with users in real time, and of supporting multiple users. The old batch method of working became insufficient. People didn’t want to wait 24 hours or longer for their results. Making stacks of punched cards and waiting overnight for results was no longer acceptable.
People needed a device that would allow them to enter instructions and get results sent back to them. People wanted efficiency.
The Teletype Repurposed
The teletype was the perfect candidate as an input/output device. It was, after all, a device designed to allow messages to be typed, encoded, sent, received, decoded, and printed.
What did the teletype care if the device at the other end of the connection wasn’t another teletype? As long as it spoke the same encoding language and could receive messages and send messages back, the teletype was happy.
And of course, it used a more-or-less standard keyboard.
Hardware Emulated Teletypes
Teletypes became the default means of interacting with the large mini and mainframe computers of that era.
They were eventually replaced by devices that emulated those electro-mechanical machines using electronics. These had Cathode Ray Tubes (CRTs) instead of paper rolls. They didn’t shake when delivering responses from the computer. They permitted hitherto impossible functionality, such as moving the cursor around the screen, clearing the screen, bolding text, and so on.
Software Emulated Teletypes
In the desktop environment of Linux and other Unix-like operating systems such as macOS, the terminal window and applications such as x-term and Konsole are examples of virtual teletypes. But these are emulated entirely in software. They are called pseudo-teletypes. This was shortened to PTS.
And that’s where
tty comes in.
What can tty Tell us?
In Linux, there is a pseudo-teletype multiplexor which handles the connections from all of the terminal window pseudo-teletypes (PTS). The multiplexor is the master, and the PTS are the slaves. The multiplexor is addressed by the kernel through the device file located at /dev/ptmx.
tty command will print the name of the device file that your pseudo-teletype slave is using to interface to the master. And that, effectively, is the number of your terminal window.
Let’s see what
tty reports for our terminal window:
The response shows we are connected to the device file at /dev/pts/0.
Our terminal window, which is a software emulation of a teletype (TTY), is interfaced to the pseudo-teletype multiplexor as a pseudo-teletype (PTS). And it happens to be number zero.
The Silent Option
-s (silent) option causes
tty to generate no output.
It does is produce an exit value, however:
- 0: if standard input is coming from a TTY device, emulated or physical.
- 1: if standard input is not coming from a TTY device.
- 2: Syntax error, incorrect command line parameters were used.
- 3: A write error has occurred.
This is likely to be most useful in Bash scripting. But, even on the command line, we can demonstrate how to have a command executed only if you are running in a terminal window (a TTY or a PTS session).
tty -s && echo "In a tty"
Because we are running in a TTY session, our exit code is 0, and the second command is executed.
The who Command
Other commands can reveal your TTY number. The
who command will list information for all logged in users, including yourself.
Alec and Mary are remotely connected to the Linux computer. They are connected to PTS one and two.
User dave is shown as connected to “:0”.
This represents the screen and keyboard physically connected to the computer. Even though the screen and keyboard are hardware devices, they are still connected to the multiplexor through a device file.
tty reveals that it is /dev/pts/2.
Accessing a TTY
You can access a full-screen TTY session by holding down the Ctrl+Alt keys, and pressing one of the function keys.
Ctrl+Alt+F3 will bring up the login prompt of tty3.
If you log in and issue the
tty command, you’ll see you are connected to /dev/tty3.
This isn’t a pseudo-teletype (emulated in software); it is a virtual teletype (emulated in hardware). It is using the screen and keyboard connected to your computer, to emulate a virtual teletype like the DEC VT100 used to do.
You can use function keys Ctrl+Alt with function keys F3 to F6 and have four TTY sessions open if you choose. For example, you could be logged into tty3 and press Ctrl+Alt+F6 to go to tty6.
To get back to your graphical desktop environment, press Ctrl+Alt+F2.
Pressing Ctrl+Alt+F1 will return you to the login prompt of your graphical desktop session.
At one time, Ctrl+Alt+F1 through to Ctrl+Alt+F6 would open up the full-screen TTY consoles, and Ctrl+Alt+F7 would return you to your graphical desktop environment. If you are running an older Linux distribution, this might be how your system behaves.
This was tested on current releases of Manjaro, Ubuntu, and Fedora and they all behaved like this:
- Ctrl+Alt+F1: Returns you to the graphical desktop environment log in screen.
- Ctrl+Alt+F2: Returns you to the graphical desktop environment.
- Ctrl+Alt+F3: Opens TTY 3.
- Ctrl+Alt+F4: Opens TTY 4.
- Ctrl+Alt+F5: Opens TTY 5.
- Ctrl+Alt+F6: Opens TTY 6.
Having access to these full-screen consoles allows people using command-line only installations of Linux—and many Linux servers are configured this way— to have multiple consoles available.
Ever been working on a Linux machine with a graphical desktop environment and had something cause your session to freeze? Now you can hop over to one of the TTY console sessions so that you can try to rectify the situation.
You can use
ps to try to identify the failed application, then use
kill to terminate it, or just use
shutdown to try to close down as gracefully as the state of the computer will allow.
Three Little Letters With a Lot of History
tty command gets its name from a device from the late 1800s, appeared in Unix in 1971, and is part of Linux and Unix-like operating systems to this day.
The little chap has quite a tale behind him.
|Files||tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm|
|Processes||alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg|
|Networking||netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw|
- › How to Use the ps Command to Monitor Linux Processes
- › Command Lines: Why Do People Still Bother With Them?
- › What Is the Bash Shell, and Why Is It So Important to Linux?
- › How to Use the finger Command on Linux
- › What Are Teletypes, and Why Were They Used with Computers?
- › How to Copy and Paste Text at Linux’s Bash Shell
- › How to Use the tail Command on Linux
- › Do You Still Need a VPN for Public Wi-Fi?