Ubuntu Server disrgards console-setup when rebooting in VirtualBox

I found this weird behavior. In VirtualBox, Ubuntu Server 12.04 uses this font:

enter image description here

I find that hard to read. Now I can run dpkg-reconfigure console-setup fine, and set the font to Fixed, then it looks like this:

enter image description here

That is also how it looks by default in VMWare; much better in my opinion. Interestingly, the boot manager font also looks like that (i.e. loads correctly).

dpkg-reconfigure console-setup correctly updates the /etc/default/console-setup file, but after a reboot, all settings are gone. For some reason, it doesn't load console-setup.

Does anyone have an idea where the problem might be? Or better yet, where I could start looking?


This is a bug:Console font does not get set, and you can see the patch from here.It's been fixed in 12.10, but the patch haven't been ported back to 12.04 by now.

So you can fix it by creating the upstart job /etc/init/console-font.conf with the following content:

# console-font - set console font
#
# Set the console font, in case the similar udev rule races with Plymouth
# and thus fails to do it.

description "set console font"

start on starting plymouth-splash

task

exec /lib/udev/console-setup-tty fbcon  

See ubuntu vivid disrgards-console-setup after reboot and https://unix.stackexchange.com/questions/198791/.

This problem seems to be caused by a mismatch in the naming of fonts that console-setup expects vs what are in /usr/share/consolefonts/, and thus copied to /etc/console-setup/ when you pick a font to use (using dpkg-reconfigure console-setup).

If you go to a console and do an strace /lib/udev/console-setup-tty fbcon, you can see that it is trying to open fonts like this:

/etc/console-setup/Lat15-TerminusBold11x22.psf

But if you look in /etc/console-setup/, there are only a handful of fonts in there (the ones you picked), and they look more like this:

/etc/console-setup/Lat15-TerminusBold22x11.psf.gz

One has height x width, and the other has width x height.

The problem can be fixed in a few ways.

(1) /lib/udev/console-setup-tty could be fixed - This is the more permanent, upstream solution.

(2) You could manually change /etc/default/console-setup, reversing the height and width in FONTSIZE. This will need to be done each time you change the fonts using dpkg-reconfigure console-setup. But when the machine reboots, that preference is kept.

(3) You could install the fonts that console-setup-tty expects. This is what I call the "overkill" option. I did it like this:

In /etc/rc.local:

# install console fonts and then set up console
/etc/console-setup/fonts.sh install
/lib/udev/console-setup-tty fbcon

Create a script called /etc/console-setup/fonts.sh:

#!/bin/bash

action=$1

srcdir="/usr/share/consolefonts"
parent="/etc/console-setup"
subdir="fonts"

case "$1" in
    install)
        # console fonts are not named properly in Ubuntu 15.04, compensate
        [[ -d $parent/$subdir ]] || mkdir $parent/$subdir
        for x in $( cd $srcdir ; ls -1 ) ; do
           # rearrange the two numbers from HHxWW to WWxHH
           y=$(echo "$x" | sed -e 's/^\([^-]*\)-\([^0-9]*\)\([0-9]*\)x\([0-9]*\).psf.gz/\1-\2\4x\3.psf.gz/g')
           # whether the pattern above matches or not, we'll be uncompressing here
           z=${y/.psf.gz/.psf}
           [[ ! -f $parent/$subdir/$z ]] && zcat $srcdir/$x > $parent/$subdir/$z
           [[ ! -L $parent/$z ]] && ln -sv $subdir/$z $parent/$z
        done
        ;;
    uninstall)
        rm -rf $parent/$subdir
        # only remove broken links (links to the fonts we removed above)
        rm $(find -L $parent -type l)
        ;;
    *)
        echo "$(basename $0) install|uninstall"
        ;;
esac

exit 0

For a quick pragmatic solution, I'd do #2, with a comment in the file that it may be need to be re-done if you choose a different font (assuming the comment does not also get overwritten).

But #3 works well with minimal fuss or mess.