TSET(1) General Commands Manual TSET(1)
tset, reset - establish or restore terminal characteristics
tset [ -InQrsS ] [ -ec ] [ -kc ] [ -m [port-ID
[ baudrate] : type ] ... ] [type]
reset [ - ] [ -ec ] [ -I ] [ -kc ] [ -n ]
[ -Q ] [ -r ] [ -s ] [ -S ] -m [ indent ]
[ test baudrate ]: type ] ... [ type ]
tset sets up your terminal, typically when you first log in. It does
terminal dependent processing such as setting erase and kill charac-
ters, setting or resetting delays, sending any sequences needed to
properly initialized the terminal, and the like. tset first determines
the type of terminal involved, and then does necessary initializations
and mode settings. The type of terminal attached to each port is spec-
ified in the /etc/ttytab database. Type names for terminals may be
found in the termcap(5) database. If a port is not wired permanently
to a specific terminal (not hardwired) it is given an appropriate
generic identifier such as dialup.
reset clears the terminal settings by turning off CBREAK and RAW modes,
output delays and parity checking, turns on NEWLINE translation, echo
and TAB expansion, and restores undefined special characters to their
default state. It then sets the modes as usual, based on the terminal
type (which will probably override some of the above). (See stty(1V)
for more information.) All arguments to tset may be used with reset.
reset also uses the rs= and rf= (reset string and file) instead of the
initialization string and file from /etc/termcap. This is useful after
a program dies and leaves the terminal in a funny state. Often in this
situation, characters will not echo as you type them. You may have to
type `LINEFEEDresetLINEFEED' since `RETURN' may not work.
When no arguments are specified, tset reads the terminal type from the
TERM environment variable and re-initializes the terminal, and performs
initialization of mode, environment and other options at login time to
determine the terminal type and set up terminal modes.
When used in a startup script (.profile for sh(1) users or .login for
csh(1) users) it is desirable to give information about the type of
terminal you will usually use on ports that are not hardwired. These
ports are identified in /etc/ttyab as dialup or plugboard, etc. Any of
the alternate generic names given in /etc/termcap may be used for the
identifier. Refer to the -m option under OPTIONS for more information.
If no mapping applies and a final type option, not preceded by a -m, is
given on the command line then that type is used; otherwise the type
found in the /etc/ttytab database is used as the terminal type. This
should always be the case for hardwired ports.
It is usually desirable to return the terminal type, as finally deter-
mined by tset, and information about the terminal's capabilities, to a
shell's environment. This can be done using the -, -s, or -S options.
(Refer to OPTIONS for more information.)
For the Bourne shell, put this command in your .profile file:
eval `tset -s options...`
or using the C shell, put this command in your .login file:
eval `tset -s options...`
With the C shell, it is also convenient to make an alias in your .cshrc
alias tset 'eval `tset -s \!*`'
This also allows the command:
to be invoked at any time to set the terminal and environment. Note to
Bourne Shell users: It is not possible to get this aliasing effect with
a shell script, because shell scripts cannot set the environment of
their parent. If a process could set its parent's environment, none of
this nonsense would be necessary in the first place.
Once the terminal type is known, tset sets the terminal driver mode.
This normally involves sending an initialization sequence to the termi-
nal, setting the single character erase (and optionally the line-kill
(full line erase)) characters, and setting special character delays.
TAB and NEWLINE expansion are turned off during transmission of the
terminal initialization sequence.
On terminals that can backspace but not overstrike (such as a CRT), and
when the erase character is `#', the erase character is changed as if
-e had been used.
- The name of the terminal finally decided upon is output on the
standard output. This is intended to be captured by the shell
and placed in the TERM environment variable.
-ec Set the erase character to be the named character c on all ter-
minals. Default is the backspace key on the keyboard, usually
^H (CTRL-H). The character c can either be typed directly, or
entered using the circumflex-character notation used here.
-ic Set the interrupt character to be the named character c on all
terminals. Default is ^C (CTRL-C). The character c can either
be typed directly, or entered using the circumflex-character
notation used here.
-I Suppress transmitting terminal-initialization strings.
-kc Set the line kill character to be the named character c on all
terminals. Default is ^U (CTRL-U). The kill character is left
alone if -k is not specified. Control characters can be speci-
fied by prefixing the alphabetical character with a circumflex
(as in CTRL-U) instead of entering the actual control key
itself. This allows you to specify control keys that are cur-
-n Specify that the new tty driver modes should be initialized for
this terminal. Probably useless since stty new is the default.
-Q Suppress printing the `Erase set to' and `Kill set to' messages.
-r In addition to other actions, reports the terminal type.
-s Output commands to set and export TERM and TERMCAP. This can be
eval `tset -s ...`
to bring the terminal information into the environment. Doing
so makes programs such as vi(1) start up faster. If the SHELL
environment variable ends with csh, C shell commands are output,
otherwise Bourne shell commands are output.
-S Similar to the -s option, but produces two strings containing
suitable values for the (environment) variables TERM and TERM-
CAP, respectively, and can be used as follows:
set t=(`tset -S ...`)
setenv TERM $t
setenv TERMCAP "$t"
Since -s loads these values, its use is preferred. If the SHELL
environment variable does not end with csh, -S produces the same
Bourne shell commands that -s does.
-m [port-ID[baudrate]:type] ...
Specify (map) a terminal type when connected to a generic port
(such as dialup or plugboard) identified by port-ID. The bau-
drate argument can be used to check the baudrate of the port and
set the terminal type accordingly. The target rate is prefixed
by any combination of the following operators to specify the
conditions under which the mapping is made:
>> Greater than
@ Equals or ``at''
<< Less than
! It is not the case that (negates the above opera-
? Prompt for the terminal type. If no response is
given, then type is selected by default.
In the following example, the terminal type is set to adm3a if
the port is a dialup with a speed of greater than 300 or to dw2
if the port is a dialup at 300 baud or less. In the third case,
the question mark preceding the terminal type indicates that the
user is to verify the type desired. A null response indicates
that the named type is correct. Otherwise, the user's response
is taken to be the type desired.
tset -m 'dialup>>300:adm3a' -m 'dialup:dw2' -m 'plug-
To prevent interpretation as metacharacters, the entire argument
to -m should be enclosed in single quotes. When using the C
shell, exclamation points should be preceded by a backslash (\).
These examples all use the `-' option. A typical use of tset in a
.profile or .login will also use the -e and -k options, and often the
-n or -Q options as well. These options have been omitted here to keep
the examples short.
To select a 2621, you might put the following sequence of commands in
your .login file (or .profile for Bourne shell users).
eval `tset -s 2621`
If you have an h19 at home which you dial up on, but your office termi-
nal is hardwired and known in /etc/ttytab, you might use:
eval `tset -s -m dialup:h19`
If you have a switch which connects to various ports (making it imprac-
tical to identify which port you may be connected to), and use various
terminals from time to time, you can select from among those terminals
according to the speed or baud rate. In the example below, tset will
prompt you for a terminal type if the baud rate is greater than 1200
(say, 9600 for a terminal connected by an RS-232 line), and use a Wyse
50 by default. If the baud rate is less than or equal to 1200, it will
select a 2621. Note the placement of the question mark, and the quotes
to protect the >> and ? from interpretation by the shell.
eval `tset -s -m 'switch>>1200:?wy' -m 'switch<<=1200:2621'`
All of the above entries will fall back on the terminal type specified
in /etc/ttytab if none of the conditions hold. The following entry is
appropriate if you always dial up, always at the same baud rate, on
many different kinds of terminals, and the terminal you use most often
is an adm3a.
eval `tset -s unset noglob
If the file /etc/ttytab is not properly set up and you want to make the
selection based only on the baud rate, you might use the following:
eval `tset -s -m '>>1200:wy' 2621`
The following example quietly sets the erase character to BACKSPACE,
and kill to CTRL-U. If the port is switched, it selects a Concept 100
for speeds less than or equal to 1200, and asks for the terminal type
otherwise (the default in this case is a Wyse 50). If the port is a
direct dialup, it selects Concept 100 as the terminal type. If logging
in over the TCP/IP, the terminal type selected is a Datamedia 2500 ter-
minal or emulator. (Note the backslash escaping the NEWLINE at the end
of the first line in the example.)
eval `tset -e -k^U -Q -s -m 'switch<<=1200:concept100' -m \
'switch:?wy' -m dialup:concept100 -m arpanet:dm2500`
/etc/ttytab port name to terminal type mapping database
/etc/termcap terminal capability database
TAB setting sequences for various terminals.
Pointed to by termcap entries.
csh(1), sh(1), stty(1V), vi(1), environ(5V), termcap(5), ttytab(5)
Once the terminal's size has been initialized, further invocations of
tset will not affect it. To correct this, do the following:
example% stty rows 0 colums 0
and then run tset normally.
The tset command is one of the first commands a user must master when
getting started on a UNIX system. Unfortunately, it is one of the most
complex, largely because of the extra effort the user must go through
to get the environment of the login shell set. Something needs to be
done to make all this simpler, either the login program should do this
stuff, or a default shell alias should be made, or a way to set the
environment of the parent should exist.
This program cannot intuit personal choices for erase, interrupt and
line kill characters, so it leaves these set to the local system stan-
It could well be argued that the shell should be responsible for ensur-
ing that the terminal remains in a sane state; this would eliminate the
need for the reset program.
18 December 1989 TSET(1)