first adventures in 9front: rpi3b
here is my collection of notes as I navigate and get oriented with 9front. they are written to my future self, assuming that I'm using a raspberry pi 3b as I am now, and I try to refer my future self to relevant manuals and documentation where applicable unless that would be otherwise tedious.
firmware
at time of writing (2026-05-22) it seems that the FQA section 1.3.1.2 "New Hardware Support" does not accurately reflect the state of the wifi support: the wifi chipset on the 3b is a bcm43438, which is definitely supported by the ether4330 driver! it does require brcmfmac43430 firmware to be installed, and the driver appears to be picky about what version you use specifically (borrowing Armbians caused me some very opaque bugs, the #cat-v folk in IRC were very helpful). thankfully, 9front maintains a firmware repository with the right stuff!
git.9front.org/plan9front/firmware
automatic wifi connection
have a look at the cpurc(8) manual, and add wifi configuration to the machine specific boot script. make sure this script handles the ip configuration too! you might also need to add the credentials to factotum before the wifi connection.
cpu server
the 9front wiki has a useful tutorial about this:
wiki.9front.org/cpu-setup
however, there are a couple things to note:
- the pi port does not use plan9.ini, it uses cmdline.txt in the pidos partition. cmdline.txt must have no linebreaks.
- cmdline.txt also must set the nvram path, as the correct path is not determined automatically on the pi.
- the boot partition is named /dev/sdN0 on the pi, not /dev/sdF0.
- the pi images use hjfs, not cwfs. see hjfs(8) manual.
the first time I tried this, I ignored the stuff about making a new user, and just used glenda. this bit me! glendas default lib/profile differs from the one generated by the newuser script, in some problematic ways. most notably, it does not properly set the environment up for drawterm connections. so -- make a new user! (or just rerun newuser as glenda or otherwise fix the profile, whatever)
drawterm
wayland-devel wayland-protocols-devel libdecor-devel libxkbcommon-devel libX11-devel libXt-devel pipewire-devel
by default, make CONF=linux will build for wayland. for x11, GUI=x11 must be specified, i.e. make CONF=linux GUI=x11.
as of writing, drawterm is on commit 234c4a4e. building for x11 will fail without modifying Make.linux, -lX11 must be appened to LDADD: sed -i '/^LDADD/ s/$/ -lX11/' Make.linux
fonts
the default font, VGA, is very cute. but on a large monitor at a distance (such as at my workbench), very hard to read due to its small size. check out fontsel(1). after determining what font you would like, set the font environment variable in lib/profile.