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.