In current stable kernels (i.e. the latest 2.0.xx release or even one of the 1.2.xx series) and current shared libraries (libc version 5.x) there should be no bug to interfere with this software.
If you have a really old Linux system, notice that Linux kernel versions prior to 0.99pl15 have a bug in the serial handshake code, that is, if the ‘CRTSCTS’ flag is set, software flow control (XON/XOFF) won’t work. The alarm() call is broken in 4.1 and 4.4.2 libraries, which sometimes results in aborting the fax receiving.
On very recent systems using the GNU Libc, you must use mgetty 1.1.10 or higher, as the timeout handling on all previous versions doesn’t work under glibc. Unfortunately, this means that the version of mgetty shipped with RedHat 5.0 (1.1.9) won’t work. Upgrade!
Hardware handshake (RTS+CTS) on Linux works flawlessly (but only if mgetty
is compiled with POSIX_TERMIOS, but that is default on Linux
anyway). Nevertheless, the
scrts.c program in contrib/ is
still provided, it has some other uses, too.
Linux has no poll(S), so, don’t #define
USE_POLL, and the default,
USE_SELECT, will be used.
Important note: Use the /dev/ttyS* devices for getty and
for dial-out (that is, for kermit, uucico, cu, seyon, ...) - never
use /dev/cua*. Dialing out on /dev/cua* will result in the
error message “device busy”. (There are reasons why
use the “ttyS* vs. cua* kernel locking mechanism”, see
below). If all programs agree on using /dev/cua* only,
it will work, too - but they have to agree on one variant.
For some background about ttyS vs. cua, you might want to read a mail from the author of the Linux serial drivers, Ted Ts’o, posted to the Linux-PPP mailing list. I have included it in doc/ttyS-cua.txt.
Some guys seemingly can’t resist posting misinformation to the net all the
time, don’t believe ’em. The /dev/cua* devices are not
different from the /dev/ttyS* devices concerning data flow or modem
control lines. The only difference is how the device reacts if you do an
open(): Opening /dev/ttyS* normally blocks until the “carrier
detect” line goes active (unless
open() is called with the
mgetty and all dial-out programs do that), and
opening /dev/cua* will return an error message (
if another process has the device already open, thus preventing
dial-out on /dev/cua* if
mgetty is active on
We use /dev/ttyS* all the time for dial-in and for dial-out, and believe me, it works, and it’s the only combination that will work properly. The kernel locking mechanism only works if you use modem auto-answer (the getty process sleeps until the modem gets a carrier), and mgetty uses manual answer (it waits for the RING message from the modem), which will save your callers a lot of grief because their calls will only be answered if your computer is ready to receive a call. Part of the motivation for writing mgetty was being tired of losing lots of money for useless calls to a hung machine.
I’d recommend against using /dev/modem as a link to the real
device, but if you do that, make it a hard link to the
appropriate /dev/ttyS*. A soft link will cause problems with the
device ownership because of a peculiarity in the linux
implementation (that I refuse to work around).
If you get into trouble with write permissions on ttySx, you may add
a new group ‘dialout’ to /etc/group, then
chown .dialout /dev/ttySx your device, and add your users to
the dialout group. Don’t forget to add the system user ‘uucp’ to
that group (UUCP needs to have modem access), and make sure,
port-group in mgetty’s configuration file is set up correctly.
The concept of such a dialout group is already used in most Linux
There are various different
last programs out there,
some work with mgetty, some don’t. If you get some strange output from
last and are using a different
sysv init, try to define
-DNO_SYSVINIT. That should
I’ve been told that it’s necessary to do that if you use the
Anyway, I can only strongly recommend to switch over to
SysVinit if you use
simple init, since the latter seems to
be severely broken regarding utmp and controlling tty handling.
If you have problems because of an uninitialized
variable (which really isn’t getty’s job, but
getty_ps insists on
doing it, and people rely on it), use the
term … config file
option to set it according to your needs.
If you’re experiencing problems with hanging
Recently, I have received a number of bug reports concerning operation in systems using one or more Cyclades serial boards. There is some incompatibility between the standard Cyclades driver and the GNU CC 2.7.2, which can result in system lockups. Upgrade to the very latest Linux driver, which can be found on ftp.cyclades.com. I have received reports that the driver version 2.1 works fine (85 modems on one system, connected to 3 Cyclom Ye boards!).