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.
|
|