Serial as console on Linux

Linux Serial Console HOWTO

Borrowed from Van Emery


Step 1: Check your system\’s serial support

First, let\’s make sure that your operating system recognizes serial ports in your hardware. You
should make a visual inspection and make sure that you have one or more serial ports on your motherboard
or add-in PCI card. Most motherboards have two built-in ports, which are called COM1: and COM2: in the
DOS/Windows world. You may need to enable them in BIOS before
the OS can recognize them. After your system boots, you can check for serial ports with the following
commands:

[root@oscar root]# dmesg | grep tty

ttyS0 at 0x03f8 (irq = 4) is a 16550A
ttyS1 at 0x02f8 (irq = 3) is a 16550A

[root@oscar root]# setserial -g /dev/ttyS[01]
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3

As you can see, the two built-in serial ports are /dev/ttyS0 and /dev/ttyS1.

Step 2: Configure your inittab to support serial console logins

The required /etc/inittab additions are highlighted in red:

id:3:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6


# Run agetty on COM1/ttyS0 and COM2/ttyS1
s0:2345:respawn:/sbin/agetty -L -f /etc/issueserial 9600 ttyS0 vt100
s1:2345:respawn:/sbin/agetty -L -f /etc/issueserial 38400 ttyS1 vt100
#s1:2345:respawn:/sbin/agetty -L -i 38400 ttyS1 vt100


# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon

agetty options explained:

  • -L force line to be local line with no need for carrier detect (when you have no modem).
  • -f alternative /etc/issue file. This is what a user sees at the login prompt.
  • -i do not display any messages at the login prompt.
  • 9600 serial line rate in bps. Set this to your dumb terminal or terminal emulator line rate.
  • ttyS0 this is the serial port identifier.
  • vt100 is the terminal emulation. You can use others, but VT100
    is the most common or “standard”. Another widely used termial type is VT102.

Possible serial line rates (sometimes called baud rates) for the 16550A UART:

  • 110 bps
  • 300 bps
  • 1200 bps
  • 2400 bps
  • 4800 bps
  • 9600 bps
  • 19,200 bps
  • 38,400 bps
  • 57,600 bps
  • 115,200 bps

Now, you must activate the changes that you made in /etc/inittab. This is done with the following command,
which forces the init process to re-read the configuration file:

[root@oscar root]# init q

Now, let\’s make sure that the agetty process is listening on the serial ports:

[root@oscar root]$ ps -ef | grep agetty
root       958     1  0 Dec13 ttyS0    00:00:00 /sbin/agetty -L -f /etc/issueserial 9600 ttyS0 vt100
root      1427     1  0 Dec13 ttyS1    00:00:00 /sbin/agetty -L -f /etc/issueserial 38400 ttyS1 vt100

Step 3: Test serial port login with an external dumb terminal or terminal emulator

Terminal settings: should be 19200, N, 8, 1.
Terminal emulation should be set to VT100 or VT102. Turn flow control off. If you
want to use the 38,400 bps serial port on ttyS1, then your settings should be adjusted to
38400, N, 8, 1.

Cable: To connect a laptop to the serial port on the Linux host, you need to have a null-modem
cable. The purpose of a null-modem cable is to permit two RS-232 DTE devices to communicate with each
other without modems between them. While you can construct this yourself, a good, sturdy manufactured
null-modem cable is inexpensive and will last longer.

Note: If you want to be able to login via serial console as the root user, you will need to edit the
/etc/securetty config file. The entries to add are highlighted in red:

console

ttyS0
ttyS1
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
vc/9
vc/10
vc/11
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8
tty9
tty10
tty11

Optional: Configure serial port as THE system console

You can use options in /etc/grub.conf to redirect console output to one of your serial ports.
This can be handy if you do not have a keyboard or monitor available for the Linux host in question. You
can also see all of the bootup and shutdown messages from your terminal.
In this example, we will make the /dev/ttyS1 port be the console. The text to add to the config
file is highlighted in red:

# grub.conf generated by anaconda
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.20-24.9)
        root (hd0,0)
        kernel /vmlinuz-2.4.20-24.9 ro root=LABEL=/ console=ttyS1,38400
        initrd /initrd-2.4.20-24.9.img

Now, if you drop your system into single user mode with the “init 1” command, you will still
be able to administer the system from your serial-connected terminal. No monitor or keyboard is required!

Warning!: The kudzu hardware detection program may “choke” on boot
when the serial port becomes the console, instead of the video adapter. To remedy this situation, you should
disable kudzu (assuming that your hardware is configured properly and won\’t be changing). This
is how you would do that:

[root@oscar root]# chkconfig kudzu off
[root@oscar root]# chkconfig --list kudzu
kudzu           0:off   1:off   2:off   3:off   4:off   5:off   6:off

You should also know how to break into the Grub bootloader during system startup and
edit the kernel line. By deleting the console argument from the kernel line, you can boot the system with
the standard console, which uses the video card and attached keyboard. You have been warned!


Leave a Reply