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!