I've done a lot of quite complex digital signage projects in the past, mainly using Raspberry Pis but also some other platforms, talking to box office systems, scheduling systems, providing dynamic wayfinding etc but a recent project called for something simple.
We need a few screens that can be easily updated by anyone, without much technical knowledge, from multiple places, static images no video, no dynamic content.
Everything I've used before would be overkill and whilst off-the-shelf offerings like PiSigngage, Concerto, Yodeck etc can all achieve this there's a cost associated with all of them and it's hard to use the pi for anything else.
Simple. This script will read a .txt file (in this case upstairs.txt), whcih it expects to find a simple CSV with a filename and a duration in seconds e.g.
It will then show each of these images for the duration given (slide1.png for 10s, slide2.png for 6s etc)
This couldn't be simpler, all static files, no databases, all stored locally on a pi, just works.
So I then considered building a tool (probably in php) to upload images, manage slides etc etc... but there's a simpler way.
What do we already use?
Dropbox. The entire team uses Dropbox already to collaborate on various things, and everyone shares files on Dropbox, so rather than introduce a new tool we created a "Signage" directory on Dropbox and then all the clever bit is on the Pi.
To change the slides, anyone in the team just needs to put a file in that directory and edit the text files of the screens they want it to appear on, no additional software required, no new user interface to learn, no logins to worry about.
rclone application will sync Dropbox to a specified directory on the pi, so we run this by cron every couple of minutes
*/2 * * * * rclone sync dropbox:/Signage /var/www/html/assets/signage_imgs >> /dev/null 2>&1
Now if we got to the Pi's IP address the slideshow will load and use whatever file(s) are in that directory.
Making the Pi auto-boot to the slideshow
There are literally 100s of ways of making a "kiosk mode" Pi. Use whatever means suits you best.
The simplest way I've found is as follows;
Install the following;
apt-get install --no-install-recommends xserver-xorg x11-xserver-utils xinit openbox chromium-browser
/etc/xdg/openbox/autostart and put the following in it;
xset s off xset s noblank xset -dpms setxkbmap -option terminate:ctrl_alt_bksp sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' ~/.config/chromium/'Local State' sed -i 's/"exited_cleanly":false/"exited_cleanly":true/; s/"exit_type":"[^"]\+"/"exit_type":"Normal"/' ~/.config/chromium/Default/Preferences while true ; do chromium-browser --fast --fast-start --start-fullscreen --kiosk --noerrdialogs --disable-translate --no-first-run --disable-pinch --overscroll-history-navigation=disabled --disable-features=TouchpadOverscrollHistoryNavigation --disable-restore-session-state --disable-infobars --kiosk 'http://127.0.0.1'; sleep 1; done;
~/.bash_profile and put the following in it;
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && startx -- -nocursor
/email@example.com/autologin.conf and replace the existing ExecStart line with
ExecStart=-/sbin/agetty --skip-login --noclear --noissue --login-options "-f pi" %I $TERM (change pi to your username if not using the default)
To make it a little cleaner, edit
/boot/config.txt and add the line
/boot/cmdline.txt and at the end of the first line add
silent quiet splash loglevel=0 logo.nologo vt.global_cursor_default=0 also replace
Reboot your Pi
Reboot the pi and after the normal (hopefully quieter than usual) boot sequence, your slide show will start.
To change the slides, just upload new ones to the dropbox (1920x1080 pixels) and update the corresponding .txt file.