Ubuntu Serial or USB Console

For systemd, (Xenial, Stretchm etc. try this recipe

Make desktop system into a server

If you want to neuter your desktop install (all that may be available for xenial or stretch, t

Be sure /etc/network/interfaces is properly configured and test it!


# apt-get purge network-manager\*

Tell systemd you want a text, not graphical, console

The voodoo for telling systemd that you want a text console instead of X11 is:

# systemctl set-default


Edit /etc/default/grub to have

GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,9600n8"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

If you set GRUB_TERMINAL to serial instead of console, the GRUB boot dialog should show up on the serial console.

You can toss glorp in to change the name of the ethers to good old ethN

GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 console=tty0 console=ttyS0,9600n8"

And reconfigure grub

# update-grub

At this point you should reboot, because the GRUB configuration doesn't have much effect until the next boot.

Sometimes the above is insufficient, as systemd needs to be further pacified. Try the reboot first, but if that doesn't work:

cat > /lib/systemd/system/ttyS0.service << EOF
Description=Serial Console Service

ExecStart=/sbin/getty -L 115200 ttyS0 vt102


systemctl daemon-reload
systemctl enable ttyS0
systemctl start ttyS0


systemd will automatically start a getty on the console if it thinks the console exists. If there's no getty, it's probably because systemd doesn't think that's the console. In wp's case, systemd was right about this: a serial port that doesn't exist probably is not the console.

For upstart-based systems


Hack a new /etc/default/grub, being sure to run update-grub

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,9600n8"

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)

# Uncomment to disable graphical terminal (grub-pc only)

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux

# Uncomment to disable generation of recovery mode menu entries

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

Be sure to run update-grub


Hack /etc/init/ttyS0.conf as follows"

# ttyS0 - getty

start on stopped rc or RUNLEVEL=[12345]
stop on RUNLEVEL=[!12345]


exec /sbin/getty -L 115200 ttyS0

For trusty, just try

start ttyS0

If you have an /etc/inittab, uncomment

T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100

And you can kick off the getty without reboot

start ttyS0

For Non_Ganeti (Old)

This is old. See The Official Ubuntu Hack for modern penguins.

Assuming there is also a video card you want to support, edit /boot/grub/grub.cfg to add

console=tty0 console=ttyS0,9600n8

as in

        linux   /boot/vmlinuz-3.5.0-40-generic root=UUID=11b8206e-6eed-4adf-83d8-e03e712d4c51 ro console=tty0 console=ttyS0,9600n8

If it is a USB console, it will be

console=tty0 console=ttyUSB0,9600n8

Now, next boot of the server should be visible on the serial (and video) console.

To get a normal getty running, create /etc/event.d/ttyS0 with the following content:

# ttyS0 - getty
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.
start on runlevel 2
start on runlevel 3
start on runlevel 4
start on runlevel 5
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
exec /sbin/getty -L 9600 ttyS0 vt102

Analogously for /etc/event.d/ttyUSB0.

Of course, baud rate should be adjusted to taste.

Last modified 3 years ago Last modified on Jul 21, 2017, 8:41:11 AM