RFC 884

Telnet terminal type option

πŸ“… published December 1983, from ietf

RFC 884: TELNET TERMINAL TYPE OPTION πŸŽ€

okay bestie, this is RFC 884 πŸ’–, the TELNET Terminal Type Option, written by Marvin Solomon and Edward Wimmers at the University of Wisconsin - Madison in December 1983 ✨. It's a standard for the ARPA Internet community πŸ‘‘, so hosts that trade terminal type info inside Telnet are expected to adopt and implement it 🫢. The header doesn't list anything it obsoletes or updates, so it's standing on its own πŸ¦‹.


1. Command Name and Code ✨

The option is called TERMINAL-TYPE, and its code is 24 πŸ”₯.

2. Command Meanings πŸ’…

Here's what each command means. Read these slowly, they're the whole vibe 🌸.

2.1. Willing and Permission Commands πŸ¦‹

IAC WILL TERMINAL-TYPE

The sender is willing to send terminal type information in a subsequent sub-negotiation πŸ’œ.

IAC DO TERMINAL-TYPE

The sender is willing to receive terminal type information in a subsequent sub-negotiation 🌈.

IAC DON'T TERMINAL-TYPE

The sender refuses to accept terminal type information πŸ™ˆ.

IAC WON'T TERMINAL-TYPE

The sender refuses to send terminal type information πŸ’€.

2.2. Sub-negotiation Commands 🧚

IAC SB TERMINAL-TYPE SEND IAC SE

The sender asks the receiver to send over its own terminal type. The code for SEND is 1, see below πŸ“.

IAC SB TERMINAL-TYPE IS ... IAC SE

The sender states the name of its terminal type. The code for IS is 0, see below ⭐.

3. Default 🌸

By default, both sides are on DON'T TERMINAL-TYPE and WON'T TERMINAL-TYPE, so terminal type information will not be exchanged πŸ™…β€β™€οΈ.

4. Motivation for the Option πŸ’–

This option lets a telnet server figure out what kind of terminal is hooked up to a user's telnet program πŸ‘€. Just knowing the type doesn't change anything right away 🫠. But the info can be handed to a process, and that process can change the data it sends to match the terminal. For example, some operating systems have a terminal driver that takes a code for the terminal type πŸ–₯️. Using the TERMINAL TYPE and BINARY options together, a telnet server on a system like that can make terminals behave as if they were directly connected 🀩. That includes things like cursor addressing and multiple colors, which the Network Virtual Terminal spec doesn't cover 🌈. The option also fits the usual TELNET option structure by saving the actual status transfer for the SB command πŸŽ€.

5. Description of the Option πŸ¦‹

WILL and DO are only for getting and granting permission to talk about things later πŸ’¬. The real exchange of status info happens inside option subcommands, the IAC SB TERMINAL-TYPE... stuff ✨.

Once two hosts have swapped a WILL and a DO, the sender of the WILL TERMINAL-TYPE is free to send type info. It can do that on its own, or because the DO sender asked πŸ™Œ. The worst case is that the info gets sent twice 😭. Only the DO sender can send requests (IAC SB TERMINAL-TYPE SEND IAC SE), and only the WILL sender can send actual type info (inside an IAC SB TERMINAL-TYPE IS ... IAC SE command) πŸ’….

The terminal type info is an NVT ASCII string 🧾. Upper and lower case count as the same thing inside it πŸ”€. A few terminal type names that are useful on IBM systems are listed below. More names are expected to show up later, and the full list of valid terminal types lives in the latest "Assigned Numbers" RFC πŸ“š.

Here's an example of the option in action πŸ‘―β€β™€οΈ:

Host1: IAC DO TERMINAL-TYPE

Host2: IAC WILL TERMINAL-TYPE

   (Host2 is now free to send status information at any time.
   Solicitations from Host1 are NOT necessary. This should not
   produce any dangerous race conditions. At worst, two IS's will
   be sent.)

Host1 (perhaps): IAC SB TERMINAL-TYPE SEND IAC SE

Host2:

   IAC SB TERMINAL-TYPE IS IBM-3278-2 IAC SE

6. Implementation Suggestions 🫢

The "terminal type" can be any NVT ASCII string that makes sense to both ends of the negotiation πŸ’œ. The tips below are there to stop people from getting confused by different spellings of the same type πŸ˜΅β€πŸ’«. For example, it's a mess if one side calls a terminal IBM3278-2 and the other calls it IBM-3278/2 πŸ™ƒ.

There's no negative acknowledgement for a terminal type nobody understands 😬. Some other options, like switching to BINARY mode, can still get refused if no valid terminal type name has been given 🚫. Sometimes one terminal goes by more than one name, like a specific type and a more generic one 🌟. In that case, the sender of the TERMINAL-TYPE IS command should answer each successive TERMINAL-TYPE SEND with a different name, going from most to least specific πŸͺœ. That way, a telnet server that doesn't recognize the first answer can ask for an alternative πŸ™‹β€β™€οΈ. But it should stop sending TERMINAL-TYPE SEND commands after getting the same response two times in a row πŸ›‘. Likewise, a sender can show it has sent every name it has by repeating the last one it sent πŸ”.

Here are a few terminal types that are useful in the IBM environment πŸ’»:

IBM-3275-2
IBM-3276-2
IBM-3276-3
IBM-3276-4
IBM-3277-2
IBM-3278-2
IBM-3278-3
IBM-3278-4
IBM-3278-5
IBM-3279-2
IBM-3279-3

Here are a few terminal types that are useful in the TOPS20 environment 🌈:

ANN-ARBOR-AMBASSADOR
CONCEPT-100
DATAMEDIA-2500
DEC-LA30
DEC-VT100
DEC-VT52
EXECUPORT-4000
HAZELTINE-1500
HP-2621
HP-2640
HP-2645A
HP-2649
NETWORK-VIRTUAL-TERMINAL
TEKTRONIX-4025
TELERAY-1061
TELETYPE-33
TELETYPE-37
TELEVIDEO-950
TERMINET-300
TI-700
ZENITH-H19

Here are a few terminal types used in the Unix environment 🐧:

ADDS-CONSUL-980
ADDS-REGENT-200
ANDERSON-JACOBSON-832
ANN-ARBOR-AMBASSADOR
BITGRAPH
CDI-1203
COMPUCOLOR-II
CONCEPT-100
DATA-GENERAL-6053
DATAGRAPHIX-132A
DATAMEDIA-3045A
DATAPOINT-3360
DEC-DECWRITER-II
DEC-GT40
DEC-VT52
DELTA-DATA-5000
DIABLO-1620
EXECUPORT-4000
GENERAL-TERMINAL-100A
HAZELTINE-1500
HAZELTINE-2000
HP-2621
HP-2640A
HP-2645
HP-2649A
IBM-3101
INFOTON-100
LSI-ADM-3
MICROTERM-ACT-V
MICROTERM-MIME-2
NETWORK-VIRTUAL-TERMINAL
PERKIN-ELMER-1100
PLASMA-PANEL
SUPERBEE-III-M
TEKTRONIX-4014
TELERAY-3700
TELETYPE-33
TELETYPE-37
TELEVIDEO-912
TERMINET-300
TI-700
TI-733
TI-745
VISUAL-200
XEROX-1720
ZENITH-H19
ZENTEC-30

If the terminal's type is unknown, or the other party is unlikely to recognize it, use the type UNKNOWN πŸ€·β€β™€οΈ.

The complete and up-to-date list gets maintained in "Assigned Numbers" πŸ“–, so check there for the latest names πŸ’œ.
πŸ“¦ where this page comes from