See https://askubuntu.com/questions/630118/ and https://askubuntu.com/questions/328463/.
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.