If you work at several kinds of terminals, terminal setup can be tough.
For instance, my X terminal sends a backspace character when I push the
upper-right key, but the same key on another terminal sends
a delete character-I
want
stty erase
(5.9
)
to set the right erase character automatically.
Maybe you want a full set of calendar programs started when you log in to
the terminal at your desk, but not when you make
a quickie login (2.5
)
from somewhere else.
Here are some ideas for changing your login sequence automatically.
Some examples are for the C shell and use that shell's
switch
(47.6
)
and
if
(47.3
)
.
Examples for Bourne-type shells use
case
(44.5
)
and
if
(44.8
)
.
If you use the other type of shell, the idea still applies; just switch
the syntax.
If all you want to do is initialize your terminal (set the
TERM
variable (5.10
)
,
set your erase character, etc.),
the
tset
(5.3
)
command may be all you need.
If your TERM
environment variable is set differently on each terminal,
you can add a test like this to your .login
file:
switch ($TERM)
case vt100:
...do commands for vt100
breaksw
case xxx
:
...do commands for xxx
breaksw
default:
...do commands for other terminals
breaksw
endsw
and so on.
If you
log in from other hosts (1.33
)
or from hosts running the
X window system (1.31
)
,
the who am i
command will probably show a hostname and/or window
information in parentheses:
bash$ who am i
jpeek pts/6 Jul 17 10:30 (www.jpeek.com:0.0)
(Long hostnames may be truncated.
Check yours before you write this test.)
If the information in parentheses will help,
add commands like these to your .profile
file:
case
\(..\) \1
|
case "`who am i | sed -n 's/.*(\(.*\))/\1/p'`" in
*0.0) ...do commands for X display 0
;;
mac2*) ...do commands for the host mac2.foo.com
;;
"") ...no output (probably not a remote login)
;;
*) ...do commands for other situations
;;
esac
|
That uses
sed
(34.24
)
to give
the text between the parentheses for that remote host to the case
.
This *0.0
case matches lines ending with 0.0
, the
mac2
case matches lines that start with mac2
,
an empty string means sed
probably didn't find any parentheses,
and the *
case catches everything else.
If you know that certain port numbers are used for certain kinds of
logins, you can test that.
For example, many systems use ttyp0
, ttyq1
, etc. as network
ports for
rlogin
and telnet
(1.33
)
.
This test will branch on the port name:
case "`tty`" in
/dev/tty[pqrs]?)
# rlogin, telnet:
...
/dev/tty02)
# terminal on my desk:
...
"not a tty") ;; ...not a terminal login session; do nothing
esac
Certain systems set certain environment variables.
For example, the X Window System sets a DISPLAY
environment variable.
(If you aren't sure about your system, use the
env
or printenv
command (6.1
)
to look for changes in your environment at different systems.)
You can test that:
if
$?
|
if ($?DISPLAY) then
# on X window system
...
else if ($?WIN_PARENT) then
# on SunView system
...
else
...
endif
|
Your system may have a /etc/ttytab
or
/etc/ttys
file that lists the type of each terminal port.
Lines in the file look something like this:
console "/usr/etc/getty std.9600" vt100 on local
tty00 "/usr/etc/getty std.9600" dialup off local
tty01 "/usr/etc/getty std.9600" plugboard off local
...
ttyp0 none network off
...
(For example, port ttyp0
is network
, the type used by
xterm
(1.31
)
,
telnet
(1.33
)
,
and so on.)
You can match the output of the
tty
(3.8
)
command, which shows your current tty, to the first column of that
file.
The output of tty
starts with /dev
or /dev/pts
.
So, to match your current tty to the file, you need to strip the
name to its tail.
For example, in bash
and ksh
, these three lines would
put the terminal port type (vt100
, plugboard
, etc.)
into the ttykind
shell variable:
${..#..}
awk
|
tty=`tty`
ttytail=${tty#/dev/}
ttykind=`awk '$1 == "'$ttytail'" {print $3}' /etc/ttys`
|
You can also deal with many of these cases using the venerable but
obscure
tset
(5.3
)
program to select and initialize the correct terminal type.
Another program you can use to set the terminal type is
qterm
(5.5
)
,
available on the CD-ROM.
|
|