digital sign system
A complete, self-hosted digital signage solution designed for Raspberry Pi and other Debian-based systems. This project provides a central web-based server to manage media content and multiple client devices that display the scheduled content in a secure, full-screen kiosk mode.
The entire system can be installed and configured using two simple installer scripts.
- Web-Based Management UI: Control the entire system from a clean, modern web interface.
- Dynamic & User-Specific Installation: Installs and configures all services under the name of the user who runs the installation script.
- Multi-File Upload: Upload multiple images and videos at once.
- Media Scheduling: Set start and end times for media to automatically control when content is displayed.
- Client Management: Register and manage multiple client devices, assigning unique settings like screen orientation and playlist randomization.
- Media Assignment: Assign specific media items to individual clients or to all clients at once.
- Remote Server Updates: A secure interface to upload and execute update scripts, allowing for easy system maintenance.
- Backup & Restore: Create a full backup of all media and database settings, and restore the system from a backup file with a single click.
- System Control: Change the server's timezone and reboot the system directly from the WebUI.
- Kiosk Mode Display: Launches Firefox ESR in a locked-down, full-screen mode to prevent user interaction and display only the signage content.
- Automatic Content Sync: Periodically syncs with the server to download new media and delete old content.
- Local WebUI: Each client hosts its own local web interface for configuration and troubleshooting.
- Remote Configuration:
- Configure the client name and server URL.
- Set up Wi-Fi connections by scanning for and connecting to networks.
- Configure static IP or DHCP settings for network interfaces.
- Remote Client Updates: Just like the server, clients have a secure page in their WebUI to upload and apply updates.
- System Control: Reboot the client device from its local WebUI.
- Automated Display Setup: Scripts automatically attempt to configure the display for a standard 1080p @ 60Hz output, ideal for most commercial screens.
- Operating System: Debian or a Debian-based OS like Ubuntu or Raspberry Pi OS (formerly Raspbian).
- Hardware (Recommended):
- Server: A Raspberry Pi 4 (2GB+), or any small server/VM.
- Client: A Raspberry Pi 3B+,Raspberry Pi 4 or Raspberry Pi5.
The server script installs a Flask application served by Gunicorn and Nginx. It dynamically sets up all files and permissions for the user running the script.
-
Download the Script: Get the
server_install_script_v6.4.1.shfile onto your server machine. -
Make it Executable:
chmod +x server_install_script_v6.4.1.sh
-
Run with
sudo: The script must be run withsudoby a regular user (e.g., a user namedpioradmin). Do not run it directly as therootuser.sudo ./server_install_script_v6.4.1.sh
The script will install all dependencies and set up the application in
/home/<your_username>/signage-server/. -
Reboot (Recommended): After the installation is complete, a reboot is recommended to ensure all services start correctly.
sudo reboot
-
Access the WebUI: Open a web browser and navigate to the server's IP address:
http://<your_server_ip>.- Default Username:
admin - Default Password:
adminYou will be required to change these credentials on your first login.
- Default Username:
The client script installs the display software and a local configuration WebUI. It should be run as the regular user who will "own" the client process.
-
Download the Script: Get the
Client Installer V7.8.shfile onto your client machine (e.g., your Raspberry Pi). -
Make it Executable:
chmod +x "Client Installer V7.8.sh" -
Run as a Regular User: Do not use
sudofor this command. Run the script as the user you'll be logged in as../"Client Installer V7.8.sh" -
Configure Sudoers (CRITICAL STEP): At the end of the installation, the script will print a multi-line command block. You must copy this entire block and run it in your terminal. This command securely grants the WebUI the permissions it needs to manage network settings and system reboots without a password.
-
Reboot: After configuring
sudoers, reboot the client.sudo reboot
Upon rebooting, the client should automatically start in kiosk mode.
This is your central command center.
- Dashboard: View all uploaded media, their status, and assignments.
- Upload Media: Upload new images and videos. You can select multiple files at once.
- Manage Clients: Add new client devices that will be checking in for content.
- System Settings: Access advanced features like Backup/Restore, Timezone configuration, and the Server Update page.
Each client has its own local web panel for on-site configuration.
- Dashboard: View the status of the main display script and restart it if needed.
- Client Config: This is the most important page. Set the unique Client Name (which must match a name you created on the server) and the Server URL.
- System -> Network Settings: Configure Wi-Fi, Static IP, or DHCP.
- System -> Client Update: Upload and apply update scripts for the client software.
Both the Server and Client can be updated remotely through their respective WebUIs.
- Navigate to the "Server Update" or "Client Update" page.
- Upload the provided
.shupdate script (e.g.,server_update_v6.4.1.sh). - Click the "Execute" button to apply the update. The system will handle the rest, including restarting services.
If you encounter issues, check the log files.
- Application Log:
sudo journalctl -fu signage.service - Nginx Access/Error Logs:
/var/log/nginx/signage/ - Update/Restore Logs:
/tmp/signage_*.log
- Main Client Log:
/home/<user>/signage-client/client.log - X Session Start Log:
/home/<user>/signage-client/xinitrc_exec.log - WebUI Helper Logs:
/tmp/signage_CLIENT_helper_*.log - Update Log:
/home/<user>/signage-client/tmp_client_updates/last_client_update_execution.log