Digital Signage
This document contains notes for a digital signage solution based on Saltcorn. This solution is by extension suitable for both dynamic (content is updated live based on input and environment; for instance showing the local weather or position in a queue) and interactive (user can interact with signage via a touchscreen or keypad). Here for simplicity we will however restrict to the example of showing a repeating slideshow based on uploaded images. If you want interactive content, add buttons or links to your views and use a touch screen; for dynamic content, you can use table data in your views.
The strategy is to have a Saltcorn server which has a page which contains the digital signage content. The client which is connected to the screen is set up to display this page on system startup
Server setup
We created a simple table structure with a table that has an image field (type File) and a running field (type Bool, for pausing induividual slides). For admin puposes we create List and Edit views for this table. We also create a Show view which simply shows the image (Field component, field image, fieldview Show Image.
Create a page for your digital signage which will be loaded by the client. For full screen, put a container at the top level of the page. In this container set Display -> Expand to full page width to checked. Drop any views in this container
To create a slideshow, use the carousel view pattern. In the Carousel configuration, set the view and interval as required. You should probably leave show controls, show indicators and hover pause unchecked. To check for changes to the slides (if required, to allow for frequent changes, check the "Reload cycled" option.
To avoid any scrollbars on the final page (if present) insert this as custom CSS under site settings (changing MyPageName as required):
body.page_MyPageName { overflow: hidden; /* Hide scrollbars */ }
Check your solution by visiting your page in a Private/Incognito tab on a desktop browser
Client setup
The client is here assumed to be either a Raspberry Pi or a lightweight Debian x86 server. We have tested this with a $100 Intel N3350 4GB RAM server and a Raspberry Pi 4 2GB running Raspberry PI OS
Looks like we are following this guide. Alternative guides: 1
Create a user, e.g. signage
Install system packages:
apt install sudo xorg chromium openbox lightdm unclutter
As root, edit lightdm config with nano /etc/lightdm/lightdm.conf - This should have
[SeatDefaults]
autologin-user=signage
user-session=openbox
[Seat:*]
Check that after a reboot you get logged in to a openbox graphical UI automatically. IF not you may need to run
sudo systemctl enable lightdm
sudo systemctl set-default graphical.target
As signage user,
mkdir -p $HOME/.config/openbox
nano $HOME/.config/openbox/autostart
This should be:
xset s off
xset s noblank
xset -dpms
unclutter &
sleep 5
#xrandr -o right # uncomment this line for vertical (portrait) displays
chromium \
--no-first-run --test-type \
--disable \
--disable-translate \
--disable-infobars \
--disable-suggestions-service \
--disable-save-password-bubble \
--start-maximized \
--kiosk "https://saltcorn.com" &
Change saltcorn.com to your servers website including the path to signage page.
For portrait mode see this or this. xrandr -o right (or left) should be sufficient.
Signage Content
The content is created in Canva by the organisation deploying the digital signage solution.