ubuntu vivid disrgards-console-setup after reboot
An earlier question at Ubuntu Server disrgards console-setup when rebooting in VirtualBox relates to Ubuntu version 12. The (one) answer talks about installing an upstart job in /etc/init/console-font.conf
.
I have Ubuntu version 15, on a physical machine not a virtual one (although that possibly isn't relevant). That file exists, but of course Ubuntu 15 boots with systemd not upstart and the upstart job is completely ignored.
So what's the fix for this problem for Ubuntu version 15 with systemd? How do I get Ubuntu to retain the font set with dpkg-reconfigure console-setup
over a reboot?
See https://unix.stackexchange.com/questions/198791/ and Ubuntu Server disrgards console-setup when rebooting in VirtualBox
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.