I’ve mostly automated the setup of the software for the Life display frame software. You can find the scripts here on GitHub . Running this requires a Linux system with ansible and git installed.
This uses the lite version of Raspberry Pi OS without a GUI. You should download the correct one for your hardware, expand the image, and write it to an SD Card:
unxz 2023-05-03-raspios-bullseye-armhf-lite.img.xz sudo dd if=/home/bcl/Downloads/2023-05-03-raspios-bullseye-armhf-lite.img of=/dev/sdX bs=1M
Make sure you have the right device as the
of=/dev/sdX argument. You can
easily destroy your running system if you are in a hurry and use the wrong one.
blkid can be helpful in showing the attached devices, or look at the last few
sudo dmesg output after plugging in the card for the device name.
Mount the partitions so that you can set things up before first boot:
sudo mkdir -p /mnt/d1/boot /mnt/d1/root sudo mount /dev/sdX1 /mnt/d1/boot sudo mount /dev/sdX2 /mnt/d1/root
Partition 1 will be the /boot partition and 2 will be the root filesystem.
Now run the
setup.sh script and then edit
setup access to your local WiFi access point using the SSID and shared passphrase.
sudo ./setup.sh /mnt/d1/ sudo vim /mnt/d1//boot/wpa_supplicant.conf
If you forget this step it will boot but you won’t be able to log in. If you
forget, just shut it off, mount the /boot partition again, copy over
./configs/wpa_supplicant.conf manually, edit it, and reboot with the new
Change the default password for the `life’ user by running:
openssl passwd -6
And copying the output into
/mnt/d1/boot/userconf, replacing the part after the
sudo vim /mnt/d1/boot/userconf
/mnt/d1/root, put the SD card into the Pi and
boot it. It is best to do this with a display and keyboard so you can see what
IP address is assigned, or deal with any unexpected errors. The Pi OS will
resize the partition, expand the root filesystem and setup the WiFi AP
credentials on first boot, you will see some dialogs on screen as it does this.
The IP should be printed at the login prompt, depending on how fast the WiFi
setup is. You may have to login to check the output of
ip a if it shows
You should now be able to ssh to the Pi as the
The next step is to run the ansible playbook, edit the
hosts file and replace the
IP address with the IP address of the Pi. And run:
ansible-playbook -v -k ./setup.yml
life user’s password when prompted for the
SSH password: and wait for the
playbook to finish.
Now the system is ready to build the sdl2-life program. Cross-compiling to
armhf is a pain when using the sdl2 library so the playbook installs everything
you need to build it on the Pi. Just log in as the
life user again and run:
cd /opt/sdl2-life go build -x
Go mow the lawn, do the dishes, fold the laundry, watch Bladerunner and it should be done building before you know it.
To test it out before rebooting you can run
/home/life/run-life-server and it
should take over the display and run! The only thing left to do is to reboot
and make sure it starts automatically.
If everything is running you can disable the boot messages by editing the
/boot/cmdline.txt file and adding
logo.nologo console=null quiet to it. But
this does make it difficult to debug things if something goes wrong.