I recently dug up my HP Chromebook 11 again
and wanted to install a BSD or Linux on it
to use as a lightweight
and distraction-free development environment.
I used splat to install Arch Linux ARM
which worked flawlessly.
To the distraction-free end,
I decided not to install X.Org
and stick to the console.
It’s not the most comfortable
environment by default,
but it can actually be configured
in many of the same ways
as graphical terminal emulators!

Printk
First,
let’s get an annoyance out of the way.
The kernel likes to log message to the console,
for example whenever the wifi card does a thing.
Those messages badly interfere
with curses applications.
This would normally be solved
by adding quiet
to the kernel command line,
but in the Chromebook’s case
I’m not sure how to control that.
What the quiet
option does
is set the kernel.printk
parameter,
documented in sysctl/kernel.txt
and syslog
.
By default,
console_loglevel
is set to 7
for debug logging,
but quiet
sets it to 4
for warning logging.
The parameter can be set manually
with the sysctl
command,
and made permanent in sysctl.d
:
sysctl kernel.printk='4 5 1 4'
echo 'kernel.printk = 4 5 1 4' > /etc/sysctl.d/printk.conf
Font
Bitmap fonts for the console
can be found in /usr/share/kbd/consolefonts
,
and can be loaded
with the setfont
command.
A simple shell for loop can be used
to try each font.
The -16
option to setfont
selects the 16-pixel high variant
in files which contain several sizes:
for font in *.gz; do
read
echo "$font"
setfont -16 "$font"
done
Most of the fonts are DOS-nostalgic,
but there are a few quirky ones
such as cybercafe
,
and a nice version of Terminus
called Lat2-Terminus16
.
A few extras might be packaged
in your distribution of choice.
The console font can be set permanently
in /etc/vconsole.conf
:
echo 'FONT=Lat2-Terminus16' >> /etc/vconsole.conf
Colours
The palette used by the console
for each of the 16 terminal colours
can be set using escape sequences
documented in console_codes
.
The relevant sequence is ESC ] P nrrggbb
,
which sets colour n
to a hex RGB value.
I wrote console.sh
,
which sets Gruvbox colours
then clears the screen.
Without clear
,
the palette would only apply
to newly printed characters.
The easiest way to make these colours permanent
is to add the escape sequences to /etc/issue
,
which gets printed before the login prompt
on every TTY:
./console.sh > issue.new
cat /etc/issue >> issue.new
sudo install --mode 644 issue.new /etc/issue
Cursor
By default,
the hardware cursor blinks,
which can be annoying.
It can be disabled
by writing 0
to /sys/class/graphics/fbcon/cursor_blink
.
It can be made permanent
by writing a file in tmpfiles.d
:
echo 'w /sys/class/graphics/fbcon/cursor_blink - - - - 0' > /etc/tmpfiles.d/cursor_blink.conf
The default cursor shape
is an underline,
but can be changed to a block
with an escape sequence.
The terminfo database
defines the capabilities
cnorm
, civis
and cvvis
for normal,
invisible
and “very visible” cursor,
respectively.
These are loosely defined,
but “very visible” on the console
results in a block cursor.
The tput
command
prints escape sequences
from the terminfo database.
Running tput cvvis
directly on a console
sets the cursor to block temporarily,
but curses applications reset it with cnorm
.
In tmux,
cvvis
doesn’t do anything at all.
However,
tmux has an option
for overriding terminfo,
which can be used to set cnorm
to the sequence for cvvis
:
set -g terminal-overrides "linux:cnorm=\e[?25h\e[?8c"
Keymap
Keymaps control
how the raw input
from the keyboard
is translated to logical key presses.
Similar to fonts,
default layouts are in /usr/share/kbd/keymaps
and can be loaded with the loadkeys
command.
As described
in the keymaps(5)
manual page,
keymaps can inherit from each other
using the include
directive.
This makes it easy to add overrides,
for example,
to the default US QWERTY layout
in i386/qwerty/us.map.gz
.
The showkey
command
can be used to observe
the raw keyboard input.
The layout I use
has caps lock mapped to escape
and many keys
swapped with their shifted counterparts.
My custom.map
file looks like this:
include "/usr/share/kbd/keymaps/i386/qwerty/us.map.gz"
keycode 2 = exclam one
keycode 3 = at two
keycode 4 = numbersign three
…
keycode 100 = Compose
keycode 125 = Escape
I also mapped right alt
to compose key,
which I didn’t know
was supported on the console.
The default sequences are listed
in include/compose.latin1
,
and more can be added
in keymap files.
In the same way as the font,
the keymap can be set permanently
in /etc/vconsole.conf
:
echo 'KEYMAP=/home/june/Code/dotfiles/custom.map' >> /etc/vconsole.conf
Applications
As a final note,
these are the applications
I use on the console: