Pop search terms in here.

Feed the Birds

Show Me Something

Computers and their windowing systems are all very clever. But sometimes it'd be nice to take an image and just chuck it at the screen. No window furniture, just barf pixels from a file straight into the framebuffer.

The context for this is that I'm experimenting with turning an OpenFrame into a TRMNL client device. The latter are usually E Ink displays with an ESP32 stuck to them. They don't have much processing power, but they can certainly fetch a bitmap from the internet and interface with the display's controller to have it show that image in all its 1-bit glory.

Graphically speaking that's all the OpenFrame needs to do too, and there's a strong BYOD (Bring Your Own Device) culture around TRMNL with support in the official server dashboard for selecting various device models. Plugins generate the content according to a playlist, which is rendered server-side, then the TRMNL client just fetches that bitmap and displays it. In the OpenFrame's case this is a task it'll barely notice doing, leaving plenty of CPU time to run other services in the background; usually something audio-related in my case.

More of all that another day.

Framebuffer Imageviewer

The Debian builds I maintain for OpenFrame devices are deliberately minimal, to optimise for drive space and minimise processing load. The idea is that the base image can be flashed, and be moderately useful, on the 1 GB of storage the OpenFrame 1 has internally. This means there is no X Window System installed, just you and the frame buffer, so the fbi command is a decent starting place.

Adding fbi is just the usual sudo apt install fbi, but I also found it necessary to tweak the tty permissions a little, like this:

KERNEL=="tty[0-9]*", MODE="0660", GROUP="tty"

I saved that into /etc/udev/rules.d/99-tty.rules. On one of the earlier version of Debian I also got a "permission denied" error, which was corrected with:

sudo setcap 'cap_sys_tty_config+ep' $(which fbi)

Then you can chuck things at the screen:

fbi -vt 1 -noverbose tilly_holiday.jpg

It whinges a bit when issuing the command over SSH, but it works.

Photograph of an OpenFrame 1 showing a colourful picture of our cockapoo, Tilly, dressed in Hawaiian shirt, with flowers and sunglasses, looking cool and seeming to be unusually patient.

X Windows Server Required

You know what doesn't work, though? Power saving.

Though we get full control of the backlight dimming without the X server being installed, control of DPMS to turn the backlight fully off just doesn't work without xset. I dug into this for a while, but never came up with a reasonable non-X solution. If you have one, please do let me know.

We chuck X server on to the OpenFrame with a quick:

sudo of-install xserver

This installs all of the required packages and a few default settings to make things play nice on this hardware.

Then install three important things; ImageMagick, to give us its handy display command; Matchbox Window Manager; and Unclutter, to hide the pointer.

sudo apt install imagemagick matchbox-window-manager unclutter

Next step is to give the X server an .xinitrc file in the home directory of the user who'll be running it, which will contain the commands issued once X is up. We'll use the default user of in these examples.

A quick nano ~/.xinitrc will create or open the file, where you can set whatever you need:

unclutter -idle 0 -root &         # immediate pointer vanishing act
xset dpms 0 0 10                  # set a 10 second display power off
matchbox-window-manager           # run the window manager (required)

Other useful xset commands are:

xset dpms q                       # query current status
xset dpms 0 0 0                   # leave backlight on
xset dpms 0 0 10                  # turn backlight off after 10 seconds
xset dpms force on                # turn backlight on
xset dpms force off               # turn backlight off

Finish everything up with:

sudo of-settings autostartx of

Now you'll have an OpenFrame which boots to a blank display. Marvellous!

display -window root tilly_grass.jpg

Photograph of an OpenFrame 1 showing a picture of our cockapoo, Tilly, lying down in the grass, panting after a good frisbee session. The photo is taken from a low level, with a few blades of green grass out of focus in the foreground. The sky is clear blue, her tongue is sticking out, and it looks like she has a smile on her face.

Using the -window root flag sets the image behind everything else, a bit like a desktop background picture, so you can use the window manager to place other things on the screen should you wish. Oh, and the touchscreen works.

But that's far more than is required for my little project.

Good dog, Till.

← Recent Articles
October 08, 2025