Latest posts of series Himblick: Raspberry Pi as a digital signage box
Himblick one day later
This is part of a series of posts on the design and technical steps of creating Himblick, a digital signage box based on the Raspberry Pi 4.
One day after the first deploy, we went to check how the system was doing, and noticed some fine tuning to do, some pretty much urgent.
Raspberry Pi 4: force video mode at boot
This is part of a series of posts on the design and technical steps of creating Himblick, a digital signage box based on the Raspberry Pi 4.
Another surprise hits us at the last moment: if the system boots without an
HDMI monitor plugged in, no framebuffer device is ever created,
and X will not start, lightdm
will give up after some tries, and even if one
plugs in a monitor afterwards, it will stay blank until a reboot or some kind
of manual intervention.
As a workaround, one can configure the bootloader to force a specific HDMI configuration. This post documents how we did it.
Creating a Raspberry PI SD from tar files
This is part of a series of posts on the design and technical steps of creating Himblick, a digital signage box based on the Raspberry Pi 4.
Provisioning a SD card starting from the official raspbian-lite is getting quite slow, since there are a lot of packages to install.
It would be significantly faster if we could take a SD card, partition it from scratch, then untar the boot and rootfs partition contents into them.
Here's how.
Making a frozen raspbian repository
This is part of a series of posts on the design and technical steps of creating Himblick, a digital signage box based on the Raspberry Pi 4.
A month later, we tried building an himblick image and it stopped playing video with vlc, only showing a black screen.
Although we're working with Rasbian Buster, and Debian Buster is stable, it looks like Raspbian Buster is not stable at all.
Time to learn how to freeze a partial raspbian mirror.
Stopping libreoffice
This is part of a series of posts on the design and technical steps of creating Himblick, a digital signage box based on the Raspberry Pi 4.
We've started implementing reloading of the media player when media on disk changes.
One challenge when doing that, is that libreoffice doesn't always stop. Try this and you will see that the presentation keeps going:
$ loimpress --nodefault --norestore --nologo --nolockcheck --show example.odp
$ pkill -TERM loimpress
It turns out that loimpress forks various processes. After killing it, these processes will still be running:
/usr/lib/libreoffice/program/oosplash --impress --nodefault --norestore --nologo --nolockcheck --show talk.odp
/usr/lib/libreoffice/program/soffice.bin --impress --nodefault --norestore --nologo --nolockcheck --show talk.odp
Is there a way to run the media players in such a way that, if needed, they can easily be killed, together with any other process they might have spawned meanwhile?
systemd-run
Yes there is: systemd provides a systemd-run command to run simple commands under systemd's supervision:
$ systemd-run --scope --slice=player --user \
loimpress --nodefault --norestore --nologo --nolockcheck --show media/talk.odp
This will run the player contained in a cgroup with a custom name, and we can simply use that name to stop all the things:
$ systemctl --user stop player.slice
Resulting python code
The result is this patch which simplifies the code, and isolates and easily kills all subprocesses run as players.
Read only rootfs
This is part of a series of posts on the design and technical steps of creating Himblick, a digital signage box based on the Raspberry Pi 4.
Another nice to have in a system like Himblick is the root filesystem mounted readonly, with a volatile tempfs overlay on top. This would kind of always guarantee a clean boot without leftovers from a previous run, especially in a system where the most likely mode of shutdown is going to be pulling the plug.
This won't be a guarantee about SD issues developing over time in such a scenario, but it should at least cover the software side of things.
Temporarily suspending automount on a device
This is part of a series of posts on the design and technical steps of creating Himblick, a digital signage box based on the Raspberry Pi 4.
After seeing lots of automatic mount/umount notifications during provisioning, we wondered if it would be possibile to temporarily disable them while we're working on the SD card.
It turns out that it's possible, and here's a convenient python context manager
to do it cleanly, based on /usr/lib/udisks2/udisks2-inhibit
, but adding the
possibility of inhibiting automounting only on one specific device:
himblick media player
This is part of a series of posts on the design and technical steps of creating Himblick, a digital signage box based on the Raspberry Pi 4.
Finally, we have enough pieces to start working on the media player. It's been way more work that expected getting to this point, and I hope that this series of posts could help others getting a faster start.
To begin with, we'd like to be able to show:
- PDF files automatically looping through the pages
- Image galleries automatically looping
- Looping videos
- ODP presentations
X autologin
This is part of a series of posts on the design and technical steps of creating Himblick, a digital signage box based on the Raspberry Pi 4.
When powered on, the Pi units should go straight into X, and start the media player.
X autologin has long been a gripe of mine, and surprisingly hard to do right and reliably, integrating well with PAM, with no greeters or switches to text mode flashing quickly on the screen, and so on.
ssh setup
This is part of a series of posts on the design and technical steps of creating Himblick, a digital signage box based on the Raspberry Pi 4.
Time to setup ssh. We want to have admin access to the pi
user, and we'd like
to have a broader access to a different, locked down user, to use to manage
media on the boxes via sftp.