Closed sapnho closed 2 weeks ago
Ok, I have started the check. Downloaded and installed Bookworm with Desktop on a Pi 4. So far so good. Screen Blanking is D4 now (was D2 before) but that doesn't matter.
Heading over to my blog article on the installation of Pi3D.
sudo raspi-config nonint do_boot_behaviour B2 && sudo raspi-config nonint do_memory_split 512 && sudo raspi-config
needs to have the do_memory_split 512
removed. Can't find that anymore in the raspi config menu. Maybe this is automatic now?
When I then enter the first installation command
pi@pi4test:~ $ sudo python3 -m pip install -U pip
I get
error: externally-managed-environment
× This environment is externally managed ╰─> To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
For more information visit http://rptl.io/venv
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages. hint: See PEP 668 for the detailed specification.
So, I guess, there's some work to do to get Pi3D running on Bookworm...
So, it seems like Python packages in Bookworm must now be installed in a virtual environment.
I did
python3 -m venv myenv
andsource myenv/bin/activate
which then allows me to pip install picframe
.
This resulted in Successfully installed IPTCInfo3-2.1.4 Pillow-9.5.0 PyYAML-6.0.1 defusedxml-0.7.1 ninepatch-0.1.22 numpy-1.26.1 paho-mqtt-1.6.1 pi-heif-0.13.0 pi3d-2.49 picframe-2023.7.26.post1
So far, so good.
Entering picframe -i .
however, then results in a mouthful.
Traceback (most recent call last):
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/core/init.py", line 24, in
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/init.py", line 130, in
IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
Importing the numpy C-extensions failed. This error can happen for many reasons, often due to issues with your setup or how NumPy was installed.
We have compiled some common reasons and troubleshooting tips at:
https://numpy.org/devdocs/user/troubleshooting-importerror.html
Please note and check the following:
and make sure that they are the versions you expect. Please carefully study the documentation linked above for further help.
Original error was: libopenblas.so.0: cannot open shared object file: No such file or directory
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/pi/myenv/bin/picframe", line 5, in
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/pi/myenv/lib/python3.11/site-packages/numpy/init.py", line 130, in
IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
Importing the numpy C-extensions failed. This error can happen for many reasons, often due to issues with your setup or how NumPy was installed.
We have compiled some common reasons and troubleshooting tips at:
https://numpy.org/devdocs/user/troubleshooting-importerror.html
Please note and check the following:
and make sure that they are the versions you expect. Please carefully study the documentation linked above for further help.
Original error was: libopenblas.so.0: cannot open shared object file: No such file or directory
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/pi/myenv/bin/picframe", line 5, in
Forcing virtual env seems like a big departure from previously. There will need to be a massive rewrite of documentation all over the place, not just for picframe and pi3d!
Could tools like Replin help in the conversion? I was generating and testing several Python scripts with ChatGPT yesterday to see how well they work, and I was blown away by the result.
Also, just checked out Replin, which is like Copilot but (apparently) a lot better. It even has a free option.
Forcing virtual env seems like a big departure from previously. There will need to be a massive rewrite of documentation all over the place, not just for picframe and pi3d!
What is the biggest impact of this virtual environment?
Virtual envs good for doing different things with a computer (especially different dependencies or python versions). However for a dedicated application like picframe they're an extra layer of complexity.
The main issue will be all the documentation and examples on line where pip install x
stops working
Hmm, that's a bummer. I guess then at the moment, there is no way to use Pi3D with the current RPI OS anymore.
It's astonishing how many breaking changes OS changes introduce.
It doesn't seem too bad. There might be one or two things needing to be fine tuned, but I have just done this and it all seems OK:
1. Put
~bullseye~bookworm on an SD card then stick it in an RPi4
2. Log in, open a terminal and git clone pi3d and pi3d_demos
3. cd to pi3d_demos and python3 RunTests.py
Not sure about FPS but didn't look too bad, obviously should have set GPU driver, memory and all the other fine details, but it seems a positive start.
Paddy
Hmm. As you say, these OS upgrades are full of breaking changes.
I've tried pip installing pi3d and, as you discovered, this has now become non-trivial. I had to use venv
and had to specify source on github: python -m pip install git+https://github.com/tipam/pi3d
having gradually discovered that python
has changed from being an alias for python2
to python3
. However the dependency in pi3d.setup.py
for numpy downloads and installs version 1.26.1
although 1.24
is already installed with bookworm. And the pip installed version of numpy is missing the compiled libraries for blas... Surely this problem will have happened with lots of other people! Anyway, I think we need to specify the debian python3-numpy
rather than whatever pip dredges up!
PS Some progress: At least with testing pi3d as above, if I delete the environment I created earlier and recreate it using the --system-site-packages option it seems to work (I didn't change my user name as instructed during setup!)
(venv) pi@raspberrypi:~ $ deactivate
pi@raspberrypi:~ $ rm -r venv
pi@raspberrypi:~ $ python -m venv --system-site-packages venv
pi@raspberrypi:~ $ source /home/pi/venv/bin/activate
(venv) pi@raspberrypi:~ python -m pip install git+https://github.com/tipam/pi3d
NB To stop the demos using the version of pi3d in /home/pi/pi3d, if you cloned it there, you need to $ mv ~/pi3d_demos/demo.py ~/pi3d_demos/demo.tmp
This does mean there will probably need work-arounds for picframe installation because we ask for specific version number of some packages, possibly not using the debian site package. More testing, then, when picframe seems to work I will start to see if we can manage without the desktop!!
Paddy
One quirk I've found, that might be related to @helgeerbe's work getting pi3d to run on the mac, is that I have to set use_glx=True
if I try to start a demo program over SSH. Most demos will run if started locally even without use_glx
apart from TriceratopsModel which just hangs. One or two, such as TigerTank start but then freeze the process inescapably.
One quirk I've found, that might be related to @helgeerbe's work getting pi3d to run on the mac, is that I have to set
use_glx=True
if I try to start a demo program over SSH. Most demos will run if started locally even withoutuse_glx
apart from TriceratopsModel which just hangs. One or two, such as TigerTank start but then freeze the process inescapably.
I guess the key is to get it going on the Pi, so that's probably a sacrifice to make. :-)
Ok, so I just did a clean install with bullseye on a Pi 4.
I encountered the first difference
In the raspi-config module, go to 6 Advanced Options > A2 GL Driver > Choose G2 GL Fake KMS.
There is no fake driver anymore. Just an experimental Wayland backend.
Pi3D installation seems to have worked but gave a few warnings:
pi@pi4bullseye:~ $ sudo python3 -m pip install -U pip Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Requirement already satisfied: pip in /usr/lib/python3/dist-packages (20.3.4) Collecting pip Downloading https://www.piwheels.org/simple/pip/pip-23.3-py3-none-any.whl (2.1 MB) |████████████████████████████████| 2.1 MB 1.1 MB/s Installing collected packages: pip Attempting uninstall: pip Found existing installation: pip 20.3.4 Not uninstalling pip at /usr/lib/python3/dist-packages, outside environment /usr Can't uninstall 'pip'. No files were found to uninstall. Successfully installed pip-23.3
pi@pi4bullseye:~ $ sudo python3 -m pip install pi-heif Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting pi-heif Downloading pi_heif-0.13.1-cp39-cp39-manylinux_2_28_armv7l.whl.metadata (6.1 kB) Collecting pillow>=9.1.1 (from pi-heif) Downloading https://www.piwheels.org/simple/pillow/Pillow-10.1.0-cp39-cp39-linux_armv7l.whl (1.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 3.9 MB/s eta 0:00:00 Downloading pi_heif-0.13.1-cp39-cp39-manylinux_2_28_armv7l.whl (625 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 625.3/625.3 kB 5.4 MB/s eta 0:00:00 DEPRECATION: gpg 1.14.0-unknown has a non-standard version number. pip 24.0 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of gpg or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063 Installing collected packages: pillow, pi-heif Attempting uninstall: pillow Found existing installation: Pillow 8.1.2 Uninstalling Pillow-8.1.2: Successfully uninstalled Pillow-8.1.2 Successfully installed pi-heif-0.13.1 pillow-10.1.0 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
pi@pi4bullseye:~ $ sudo pip3 install picframe Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting picframe Downloading https://www.piwheels.org/simple/picframe/picframe-2023.7.26.post1-py3-none-any.whl (3.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2/3.2 MB 3.8 MB/s eta 0:00:00 Collecting Pillow==9.5.0 (from picframe) Downloading https://www.piwheels.org/simple/pillow/Pillow-9.5.0-cp39-cp39-linux_armv7l.whl (1.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 3.9 MB/s eta 0:00:00 Collecting defusedxml (from picframe) Downloading https://www.piwheels.org/simple/defusedxml/defusedxml-0.7.1-py2.py3-none-any.whl (25 kB) Collecting pi3d>=2.49 (from picframe) Downloading https://www.piwheels.org/simple/pi3d/pi3d-2.49-py3-none-any.whl (270 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 270.8/270.8 kB 4.0 MB/s eta 0:00:00 Requirement already satisfied: PyYAML in /usr/lib/python3/dist-packages (from picframe) (5.3.1) Collecting paho-mqtt (from picframe) Downloading https://www.piwheels.org/simple/paho-mqtt/paho_mqtt-1.6.1-py3-none-any.whl (75 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 75.6/75.6 kB 3.0 MB/s eta 0:00:00 Collecting IPTCInfo3 (from picframe) Downloading https://www.piwheels.org/simple/iptcinfo3/IPTCInfo3-2.1.4-py3-none-any.whl (12 kB) Requirement already satisfied: numpy in /usr/lib/python3/dist-packages (from picframe) (1.19.5) Collecting ninepatch (from picframe) Downloading ninepatch-0.1.22-py3-none-any.whl (16 kB) Requirement already satisfied: pi-heif>=0.8.0 in /usr/local/lib/python3.9/dist-packages (from picframe) (0.13.1) DEPRECATION: gpg 1.14.0-unknown has a non-standard version number. pip 24.0 will enforce this behaviour change. A possible replacement is to upgrade to a newer version of gpg or contact the author to suggest that they release a version with a conforming version number. Discussion can be found at https://github.com/pypa/pip/issues/12063 Installing collected packages: paho-mqtt, IPTCInfo3, Pillow, defusedxml, pi3d, ninepatch, picframe Attempting uninstall: Pillow Found existing installation: Pillow 10.1.0 Uninstalling Pillow-10.1.0: Successfully uninstalled Pillow-10.1.0 Successfully installed IPTCInfo3-2.1.4 Pillow-9.5.0 defusedxml-0.7.1 ninepatch-0.1.22 paho-mqtt-1.6.1 pi3d-2.49 picframe-2023.7.26.post1 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
pi@pi4bullseye:~ $ picframe -i . INFO:start.py:starting ['/usr/local/bin/picframe', '-i', '.'] This will configure /home/pi/picframe_data/config/configuration.yaml To keep default, just hit enter Enter picture directory [~/Pictures]: Enter picture directory [~/DeletedPictures]: Enter locale [en_GB.UTF-8]: created /home/pi/picframe_data
Starting Pi3D with
pi@pi4bullseye:~ $ sudo xinit /usr/bin/python3 /home/pi/picframe_data/run_start.py /home/pi/picframe_data/config/configuration.yaml
gave this:
X.Org X Server 1.20.11 X Protocol Version 11, Revision 0 Build Operating System: linux Raspbian Current Operating System: Linux pi4bullseye 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 Kernel command line: coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_headphones=0 snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_hdmi=0 video=HDMI-A-1:1920x1080M@60 smsc95xx.macaddr=E4:5F:01:8D:66:33 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000 console=ttyS0,115200 console=tty1 root=PARTUUID=1dcecdd5-02 rootfstype=ext4 fsck.repair=yes rootwait Build Date: 30 March 2023 01:46:14PM xorg-server 2:1.20.11-1+rpt3+deb11u6 (https://www.debian.org/support) Current version of pixman: 0.40.0 Before reporting problems, check http://wiki.x.org to make sure that you have the latest version. Markers: (--) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice, (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown. (==) Log file: "/var/log/Xorg.0.log", Time: Sat Oct 21 10:22:59 2023 (==) Using config directory: "/etc/X11/xorg.conf.d" (==) Using system config directory "/usr/share/X11/xorg.conf.d" error: XDG_RUNTIME_DIR not set in the environment. DRM_IOCTL_MODE_CREATE_DUMB failed: Cannot allocate memory Failed to create scanout resource (EE) Fatal server error: (EE) AddScreen/ScreenInit failed for driver 0 (EE) (EE) Please consult the The X.Org Foundation support at http://wiki.x.org for help. (EE) Please also check the log file at "/var/log/Xorg.0.log" for additional information. (EE) (EE) Server terminated with error (1). Closing log file. xinit: giving up xinit: unable to connect to X server: Connection refused xinit: server error
I guess that's a result of the graphic driver.
OK I've been looking a bit more into bookworm as that's got the new wayland back end. As I said above it works to some extent but not all the time and with issues, especially over SSH. Also the frames 'tear' which is probably due to pi3d not waiting for the full render to complete before allowing the next. This didn't seem to be a problem with the old drivers but it is now - I can probably fix it by just adding a single line in DisplayOpenGL.py.
I couldn't get pi3d to work from the 'lite' version of bookworm following the instructions from @thomasedoff it probably either needs wayland related installs or the switch in raspi-config needs to be set to X11 instead of wayland.
However SDL2 for bookworm will render to the screen without the desktop, at least using rust_pi3d. So I'm going to try setting up SDL2 as the windowing system for python pi3d and see how that goes.
PS to test the SDL2 option I started with the 'lite' bookworm SD then
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install libsdl2-dev
#### install rust
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
$ sudo reboot
#### download and compile rust_pi3d
$ sudo apt install git
$ git clone https://github.com/paddywwoof/rust_pi3d
$ cd rust_pi3d/pi3d
$ cargo build --release --examples
#### run examples: minimal, game, forest_walk, farris, picture_frame, shader_in_src, ship_demo, tsp - ESC to quit
$ rust_pi3d/pi3d/target/release/examples/minimal
PS It looks like I already did much of this work four years ago!! https://github.com/tipam/pi3d/compare/master...sdl2
So this is what I did next, and pi3d seems to run OK (though nowhere near the FPS of rust_pi3d)
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install libsdl2-dev python3-numpy python3-pil python3-pip git
$ python -m pip install pysdl2 --break-system-packages ## really should use venv or some other option!*
$ cd ~
$ git clone https://github.com/tipam/pi3d
$ cd pi3d
$ git checkout sdl2 ## use sdl2 branch
$ cd ~
$ git clone https://github.com/pi3d/pi3d_demos
$ cd pi3d_demos
## edit ForestWalk.py, say, and change
DISPLAY = pi3d.Display.create(x=100, y=100, frames_per_second=30, use_sdl2=True)
##
$ python ForestWalk.py
PS spoke too soon... works well on RPi3 but not on RPi4. No error, keyboard input seems to work (probably mouse too) but no graphics. NB this is only starting without the desktop, if I open a terminal from RPi4 desktop the SDL2 branch works
PPS there is an option to sudo apt install python3-sdl2
I've got a workable system: For the Pi up to and including 3 I can run from the command line with SDL2, for the Pi 4 (and 5, who knows?) it runs using xinit
.
Once we've tested it, the sdl2 branches will be merged into main so the local install steps will be simplified. However the new system of venv
seems fraught and I couldn't get it to work without scrambling the modules, so used --break-system-packages
, which doesn't sound very promising but seems to work.
sudo apt update
sudo apt upgrade
sudo apt install python3-numpy python3-pil python3-pip git
2.a. install libraries for SDL2 with Pi <3 - obviously this could be added to above command
sudo apt install libsdl2-dev python3-sdl2
2.b install X11 libraries and xinit application if Pi is 4 or 5
sudo apt install xserver-xorg xserver-xorg-legacy xinit
git clone https://github.com/tipam/pi3d
cd pi3d
git checkout sdl2
cd ..
git clone https://github.com/helgeerbe/picframe
cd picframe
git checkout sdl2
nano pyproject.toml
# change dependency to "Pillow>=9.4.0"
cd ..
python -m pip install file:///home/pi/pi3d --prefer-binary --break-system-packages
python -m pip install file:///home/pi/picframe --prefer-binary --break-system-packages
/home/pi/.local/bin/picframe -i /home/pi/ # accept defaults
mkdir {Pictures,DeletedPictures}
6.a Set config to use SDL2 and run in Pi <3
nano ~/picframe_data/config/configuration.yaml
# use_sdl2: True
python /home/pi/.local/bin/picframe /home/pi/picframe_data/config/configuration.yaml
6.b Can still set configuration use_sdl2: True but not needed for Pi 4+
sudo nano /etc/X11/Xwrapper.config
# change
allowed_users=anybody
needs_root_rights=yes
# save
xinit /usr/bin/python /home/pi/.local/bin/picframe /home/pi/picframe_data/config/configuration.yaml
Thanks, Paddy. Will try this on the weekend.
Newbie alert! I am running it on Model 3B cat /proc/cpuinfo | grep ^Model Model : Raspberry Pi 3 Model B Rev 1.2
Here are a few minor issues Issue 1: Unable to set locale to en_US.UTF-8 ERROR:model.Model:error trying to set locale to en_US.UTF-8
Issue 2: mkdir {Pictures, DeletedPictures} doesn't work. It's creating 2 directories "{Pictures" and "DeletedPictures}"
Issue 3: Typo on 6.a filename coonfiguration.yaml should be configuration.yaml
After fixing those minor issues, it is running fine. Thanks everyone for all the hard work!
@rock-meister thanks for testing and sorry for the typos which I've fixed. It's rather a 'work in progress' as git cloning, changing branch then pip installing locally is very clunky. (I'm not sure about the en_US but it should be possible to set this up at an earlier stage in raspi-config
). I would really like to find a way for the SDL2 route to work on RPi 4 and 5 which would simplify the whole thing further. Short term it's really helpful of you to test the system on different setups.
Just installed it on a Pi4 with Bookworm (64-bit with Desktop (the recommended version)) and it works. Will let it run for a while to see if it's stable. Thanks, @paddywwoof !
The only unusual thing I can notice at this point, is when I add pictures on the fly while Pi3D is running, the I get this error
WARNING:get_image_meta.GetImageMeta:Cause: cannot identify image file '/home/pi/Pictures/2021. 09.15 - 12.46. 24 Fnatenrahmen.jpg'
However, the image is shown and the metadata are correct. And I think the error message came with the old version as well.
@paddywwoof Can you test if the performance is the same? Not sure how would you measure it.
Hi, I will check out that error, might be more checking for various things.. especially getting video working after a fashion.
I can test the frame rate on the RPi3 in the kitchen then update it to new stem and try that.
BTW, this sudo apt install python3-numpy python3-pil python3-pip git
does not seem to be necessary with the recommended Bookworm version. I get
python3-numpy is already the newest version (1:1.24.2-1). python3-pil is already the newest version (9.4.0-1.1+b1). python3-pil set to manually installed. python3-pip is already the newest version (23.0.1+dfsg-1+rpt1). git is already the newest version (1:2.39.2-1.1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
And sudo apt install xserver-xorg xserver-xorg-legacy xinit
only xserver-xorg-legacy
needs to be installed.
xserver-xorg is already the newest version (1:7.7+23). xinit is already the newest version (1.4.0-1). The following NEW packages will be installed: xserver-xorg-legacy 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
The only unusual thing I can notice at this point, is when I add pictures on the fly while Pi3D is running, the I get this error
WARNING:get_image_meta.GetImageMeta:Cause: cannot identify image file '/home/pi/Pictures/2021. 09.15 - 12.46. 24 Fnatenrahmen.jpg'
However, the image is shown and the metadata are correct. And I think the error message came with the old version as well.
I think this comes up because the file analysis is triggered before the full transfer of the file has actually taken place.
I have started an post with your new instructions, @paddywwoof here: https://www.thedigitalpictureframe.com/how-to-build-a-gorgeous-digital-picture-frame-with-a-raspberry-pi-based-on-2023-bookworm/
Haven't tested it on the Pi3 yet.
Does this 2.a. install libraries for SDL2 with Pi <3
include the Pi 3 is it just for the Pi2?
Hi, yes you're right, that should be Pi <=3
or Pi<4
Are you using the lite version of bookworm? I suppose it's not the end of the world if they're already there.
I am using Raspberry Pi OS (64-bit) with the Raspberry Pi Desktop, which has "Recommended" in brackets. I always try to stay as close to the default settings, which avoids issues when readers try to follow the instructions.
And definitely not the end of the world. :-))))
Just made a fresh install on a Pi 3. Also works as it should! :-)
Hi, sorry I was away on a longer trip and hadn't time to write.
This is my shortest setup guide to run picframe on bookworm:
Install bookworm desktop. I configured it as host=raspberrypi , user=pi and using wifi
After first boot open terminal and run:
sudo apt-get update
sudo apt-get full-upgrade
sudo reboot
sudo raspi config
Install picframe using a virtual environment for python
mkdir pvenv
python –v venv /home/pi/pvenv
source pvenv/bin/activate
pip install picframe
picframe –i .
5 create startscript that activates virtual python env
nano start_picframe.sh
#!/bin/bash
source /home/pi/pvenv/bin/activate # activate phyton virtual env
picframe & #start picframe
make script executable
chmod +x start_picframe.sh
create wayfire autostart
nano .config/wayfire.ini
and add or extend autostart section
[autostart]
picframe = bash $HOME/start_picframe.sh
create user systemd service to start picframe on boot
mkdir ~/.config/systemd/user/ -p
nano ~/.config/systemd/user/picframe.service
[Unit]
Description=PictureFrame on Pi3
[Service] ExecStart=/usr/bin/wayfire Restart=always
[Install] WantedBy=default.target
8. Controlling the service
You have the following options:
- Enable service `systemctl --user enable picframe.service`
- Disable service `systemctl --user disable picframe.servcie`
- Start service `systemctl --user start picframe.service`
- Stop service `systemctl --user stop picframe.service`
- Stop restart `systemctl --user restart picframe.service`
- Check logfiles `journalctl --user-unit picframe.service`
Good: Easy setup. Starting stopping service works over ssh
Bad: Before the first image is displayed, you will see the desktop for a short time.
THanks much, @helgeerbe ! Is this for both Pi 3 and 4?
Helge, that's great fixing the issues with venv.
In latest news: I've found the cause of SDL2 not working on the RPi 4+. Basically trying to set the depth buffer to 24 bits causes the problem, I'll check why, but it works without specifying anything. So that would mean one set of instructions and no need for any desktop, X11 or otherwise... However I've not yet found a way to blank the screen without X11. Hmm😕
THanks much, @helgeerbe ! Is this for both Pi 3 and 4?
I tested it on Pi3. But there is nothing special, so I would assume this works with a Pi 4 as well.
But this setup uses xWayland. So its still an X application.
If @paddywwoof get the SDL support ready and we set SDL_VIDEODRIVER=wayland. It should run completely natively on wayland.
Anyhow, I found some hickups in my setup:
sudo reboot
as a workaroundjournalctl
. You have to set the log path in configuration.ymlPerformance seems to be (on Pi 3) the same, as under bulleseye.
I've updated the SDL2 branch so it works with Piv4+ and, once I've done a little more testing I will merge into main and bump to v2.51.
I got a bit of a lead here https://forums.raspberrypi.com/viewtopic.php?t=358689 but doesn't seem to work so far. There is an option in SDL to enable and disable screen blanking so maybe we can set it to a short period in the setup then toggle with SDL... Who knows!
@paddywwoof I tested the sdl branches and it works, without using X11 anymore.
What have I done:
pip install pysdl2-dll
so python can import sdl. (Maybe you don't need to install the libsdl2-dev python3-sdl2)use_sdl2: True
start_picframe.sh
so sdl videodriver is wayland and not xWalyand anymore
#!/bin/bash
source /home/pi/pvenv/bin/activate # activate phyton virtual env
export SDL_VIDEODRIVER=wayland # sdl has to use wayland
picframe & #start picframe
I would assume that the same setup would work for Pi3, Pi4 and Pi5. Would be good, if someone can confirm this.
If this is working we should:
Maybe we should find out, what additional packages are needed, if you install the lite version
commands to blank screen under wayland on/off are
wlr-randr --output HDMI-A-1 --off
wlr-randr --output HDMI-A-1 --on
@rock-meister thanks for testing and sorry for the typos which I've fixed. It's rather a 'work in progress' as git cloning, changing branch then pip installing locally is very clunky. (I'm not sure about the en_US but it should be possible to set this up at an earlier stage in raspi-config
). I would really like to find a way for the SDL2 route to work on RPi 4 and 5 which would simplify the whole thing further. Short term it's really helpful of you to test the system on different setups.
@helgeerbe I've started trying to follow your instructions with a new SD but I can't really get past first base. I had to insert a step sudo apt install python3-venv
but after pip install picframe
I don't have any usable modules. numpy
is missing the openblas library, PIL is missing various components, pi3d can't find the OpenGL libraries... What am I missing to make it work?
Also, do you get screen blanking with wlr-randr
? I just get failed to connect to display
and if I run as root XDG_RUNTIME_DIR is invalid or not set in the environment
If I run setterm
from a keyboard on the RPi then it will blank and wake up but it doesn't work either on the remote picframe.
@paddywwoof which image are you using?. I used
Raspberry Pi OS with desktop
Release date: October 10th 2023 System: 64-bit Kernel version: 6.1 Debian version: 12 (bookworm) Size: 1,093MB
wlr-randr
does not work remotely (ssh) and wayfinder (compositor) has to be running. To test ist run it from a terminal on the desktop:
wlr-randr --output HDMI-A-1 --off; sleep 10; wlr-randr --output HDMI-A-1 --on
I am using 2023-10-10-raspios-bookworm-armhf-lite
32 bit... but the first SD I burned was the desktop version and I think I had the same error messages when I tried to pip install numpy
in a venv. (I've now over written that SD with the new lite version!)
I was running wlr-randr in a python subprocess.run()
on the picframe RPi but I hadn't got the wayfinder compositor running (is that right or should it be wayfire, I can't find much info on either on line)
I also can't get Helge's instructions to work. Using a Pi 4 with Bookworm Desktop (Recommended). Does it work through Terminal? I don't have a keyboard connected to my Pi and it's not really the way people would configure their picture frame.
I assume, that lite is missing too many packages. I would go with desktop, to show that it's working. Using lite we have to identify the missing packages.
Wayfinder must be running. Using wayland, the compositor provides the api. If we are happy, we could replace wafinder with cage. Cage is a compositor for a single kiosk application. But for now, I would use the raspberry standard tools.
@sapnho I don't have a spare pi4. But yes, you should be able to do the configuration through a terminal. Only starting the service through a terminal seems not to work.
Tomorrow I will do a clean set up and will document each step again.
picframe itself runs fine on lite with only libsdl2-dev
, python3-sdl2
, python3-numpy
, python3-pil
and the other modules needed by picframe the problem is getting python3-venv working. I did a very basic venv just install numpy and it was impossible to load. Surely that shouldn't happen! Maybe it's a bug in pywheels.org?
Yes it's running. But you are using xWayland (even with sdl). xWayland is a xServer layer in wayland for legacy applications. The future is to get rid of X completely.
I hadn't any issue creating the python virtual environment. So I could just run pip install picframe
and all dependencies were installed from pypi.org
Helge, yes you are right. Even on RPi 4 it's using xWayland. It would be nice if SDL could 'automatically' start wayland like it does for X11 but it doesn't seem to, if the SDL_VIDEODRIVER is set to wayland it fails. I think wayfire needs to be started in another process. Somehow!
I can't decide whether using using the pip route for things like numpy, pill and pysdl2 is the best route. I know we've had problems in the past and needed to specify versions current 32 bit armhf lite pip packages seem to be in disarray. Just looking at the piwheels.org website for numpy it says you need to
sudo apt install libgfortran5 libopenblas0-pthread
pip3 install numpy
so why not just sudo apt install python3-numpy
instead? There is an option when creating a venv to use --system-site-packages
Hi, I reinstalled picframe on bookworm. Using native Wayland (no X). I created a wiki page, that can be edited more easily:
https://github.com/helgeerbe/picframe/wiki/Setup-guide-Bookworm-and-Wayland
Hi @paddywwoof I could install all dependent packets with a simple pip install picframe
. Using a virtual environment we can control even the versions of the packets which are required by picframe.
@helgeerbe that works great. The SD burning and OS loading is significantly more time consuming than the lite versions but that only really matters during testing where I'm doing it lots of times. The average user will just do it once. I'm in the process of merging pi3d sdl2 branch to main but in the mean time I found I could replace switching branches section with
pip uninstall picframe
pip uninstall pi3d
pip install git+https://github.com/tipam/pi3d@sdl2
pip install git+https://github.com/helgeerbe/picframe@sdl2
pip install pysdl2
i.e. it's possible to pip install directly from a git branch, which I didn't realise before!
Now we just need to figure out how to launch wayfire without all the desktop stuff. Thanks again for sorting this out.
Paddy
PS I'm running on RPi 4
I have just been contacted by a blog reader who told me that Raspberry Pi Buster is no longer available for download.
I will start experimenting with Bookworm on a Pi4 this weekend to see what still works and what might be broken in Pi3D PictureFrame.