Serial Console

From Segfault
Jump to: navigation, search

GRUB

To use GRUB on the serial console, we have to configure the serial line and the output device[1]

serial --unit=0 --speed=115200
terminal_input serial; terminal_output serial

Or, for GRUB Legacy:

serial --unit=0 --speed=115200
terminal --timeout=5 serial console

On most distributions, GRUB can be configured via /etc/default/grub:[2]

GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200"
GRUB_TERMINAL="serial console"
  • If the arrow keys do not work through your serial console, try CTRL+P resp. CTRL+N instead.[3]
  • Add --dumb to GRUB_SERIAL_COMMAND if your terminal is not VT100 compatible.

FreeBSD

The FreeBSD boot process, in short:[4][5][6][7][8]

boot0 → boot2 → loader → kernel

To output to the serial console[9], we can configure each stage to do just that.

For the boot2 stage, use boot.config[10]:

$ cat /boot.config
-P                                                  # Or is it "-D"?[9]

For the loader stage, use loader.conf:

$ cat /boot/loader.conf
[...]
console="comconsole,vidconsole"                     # Output on serial & video console, in that order
boot_multicons="YES"                                # Output on both devices

Once booted, the userland needs a serial console too:

$ grep ttyu0 /etc/ttys
ttyu0   "/usr/libexec/getty std.9600"  vt100  onifconsole secure

Linux

Kernel

To see the boot messages, add the following to the kernel command line:[11]

console=ttyS0,115200 console=tty0

This will display boot messages both to the first serial port and the VGA console. Both will be usable for login after the system has booted.

SysV

 $ grep ttyS0 /etc/inittab /etc/securetty 
 /etc/inittab:S:2345:respawn:/sbin/agetty 115200 ttyS0         # Or "../getty -L ttyS0 115200 vt100" for getty 
 /etc/securetty:ttyS0
 
 $ init q

Upstart

 # grep ^[a-z] /etc/init/ttyS0.conf
 start on stopped rc RUNLEVEL=[2345]
 stop on runlevel [!2345]
 respawn
 exec /sbin/getty -L 115200 ttyS0 xterm
 
 # initctl start ttyS0

SystemD

To enable[12] the serial console in an OpenSUSE or Debian system:

$ sudo systemctl enable serial-getty@ttyS0
ln -s '/usr/lib/systemd/system/serial-getty@.service' '/etc/systemd/system/getty.target.wants/serial-getty@ttyS0.service'

$ sudo systemctl start serial-getty@ttyS0
$ ps auxw | grep tt[y]
root      8247  0.0  0.1   4444  1460 tty1     Ss+  00:23   0:00 /sbin/agetty --noclear tty1 linux
root      8608  0.0  0.1   4724  1708 ttyS0    Ss+  00:29   0:00 /sbin/agetty --keep-baud ttyS0 115200 38400 9600 vt102

Adjust the console name as needed, e.g. use hvc0 for Xen VMs.

NetBSD

The serial console can be configured via boot.conf:

$ cat /boot.cfg
consdev com0

Once in the boot prompt, various other output parameters[13] can be changed.

OpenBSD

The serial console can be configured[14] via boot.conf:

$ cat /etc/boot.conf                                                                                                                                                                               
set timeout 10
set tty com0

Once in the boot prompt, the console output device can be changed to e.g. pc0 again.

Solaris

$ eeprom ttya-mode='115200,8,n,1,-'

$ cat /rpool/boot/grub/menu.lst 
serial --unit=0 --speed=115200
terminal serial console
timeout 10
default 0

title Oracle Solaris 11 Express snv_151a
findroot (pool_rpool,0,a)
bootfs rpool/ROOT/solaris
kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS,console=ttya -v
module$ /platform/i86pc/$ISADIR/boot_archive

$ grep ^console: /etc/ttydefs 
console:115200 hupcl opost onlcr:115200::console

$ svcadm restart svc:/system/console-login:default

How to send a BREAK

Here's how to send a BREAK via telnet(1):

 # telnet 10.0.0.30
 Trying 10.0.0.30...
 Connected to terminalserver.
 Escape character is '^]'.
 
 ser2net port 2002 device /dev/ttyUSB0 [9600 N81]
 
 solaris console login: 

OK, now we're at the console prompt. Press ^] to get to the telnet prompt and do:

 telnet> send break
 Type  'go' to resume
 {3} ok printenv

References