intr = ^C; quit = ^; erase = ^?; kill = ^U; eof = ^D; eol = ‹undef›;
eol2 = ‹undef›; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon
-ixoff -iuclc -ixany -imaxbel
-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0
bs0 vt0 ff0
-isig -icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop
-echoprt echoctl echoke
A description of the most important of these flags is given in Table 4.2. Each of these flags is enabled by supplying it to stty and disabled by supplying it to stty with the - character in front of it. Thus, to disable hardware handshaking on the ttyS0 device, you would use:
$ stty -crtscts -F /dev/ttyS0
Table 4.2: stty Flags Most Relevant to Configuring Serial Devices
Flags | Description |
---|---|
N | Set the line speed to N bits per second. |
crtsdts | Enable/Disable hardware handshaking. |
ixon | Enable/Disable XON/XOFF flow control. |
clocal | Enable/Disable modem control signals such as DTR/DTS and DCD. This is necessary if you are using a 'three wire' serial cable because it does not supply these signals. |
cs5 cs6 cs7 cs8 | Set number of data bits to 5, 6, 7, or 8, respectively. |
parodd | Enable odd parity. Disabling this flag enables even parity. |
parenb | Enable parity checking. When this flag is negated, no parity is used. |
cstopb | Enable use of two stop bits per character. When this flag is negated, one stop bit per character is used. |
echo | Enable/Disable echoing of received characters back to sender. |
The next example combines some of these flags and sets the
$
stty 19200 cs8 -parenb crtscts -echo -F /dev/ttyS0
Serial Devices and the login: Prompt
It was once very common that a Unix installation involved one server machine and many 'dumb' character mode terminals or dial-up modems. Today that sort of installation is less common, which is good news for many people interested in operating this way, because the 'dumb' terminals are now very cheap to acquire. Dial-up modem configurations are no less common, but these days they would probably be used to support a SLIP or PPP login (discussed in Chapter 7, Serial Line IP and Chapter 8, The Point-to-Point Protocol) than to be used for a simple login. Nevertheless, each of these configurations can make use of a simple program called a getty program.
The term getty is probably a contraction of 'get tty.' A getty program opens a serial device, configures it appropriately, optionally configures a modem, and waits for a connection to be made. An active connection on a serial device is usually indicated by the Data Carrier Detect (DCD) pin on the serial device being raised. When a connection is detected, the getty program issues a login: prompt, and then invokes the login program to handle the actual system login. Each of the virtual terminals (e.g.,
There are a number of different getty implementations, each designed to suit some configurations better than others. The getty that we'll describe here is called mgetty. It is quite popular because it has all sorts of features that make it especially modem-friendly, including support for automatic fax programs and voice modems. We'll concentrate on configuring mgetty to answer conventional data calls and leave the rest for you to explore at your convenience.
Configuring the mgetty Daemon
The mgetty daemon is available in source form from ftp://alpha.greenie.net/pub/mgetty/source/, and is available in just about all Linux distributions in prepackaged form. The mgetty daemon differs from most other getty implementations in that it has been designed specifically for Hayes-compatible modems. It still supports direct terminal connections, but is best suited for dialup applications. Rather than using the DCD line to detect an incoming call, it listens for the RING message generated by modern modems when they detect an incoming call and are not configured for auto-answer.