Quick tutorial for setting up Raspberry as Digital Signage and stream a video to it. It includes setup of a customised splash screen during boot, configuration of a light Windows Manager on Linux and auto-launch of Chrome browser to browse the vide.
Kick off installation with:
apt-get update apt-get install apache2 php5 php5-gd chromium vlc fbi scrot apt-get install matchbox chromium x11-xserver-utils xorg sqlite3 libnss3
X Org/Chromium on Start Up
First thing to do is set the screen resolution for full range;
cd /boot/ cp config.txt config.txt.20150210 vi config.txt
Add this to the config.txt;
# uncomment to force a console size. By default it will be display's size minus # overscan. disable_overscan=1 framebuffer_width=1920 framebuffer_height=1080 framebuffer_depth=32 framebuffer_ignore_alpha=1 hdmi_pixel_encoding=1 hdmi_group=2
Next add the following to /etc/rc.local so that it recognizes the config set;
# Wait for the TV-screen to be turned on... while ! $( tvservice --dumpedid /tmp/edid | fgrep -qv 'Nothing written!' ); do bHadToWaitForScreen=true; printf "===> Screen is not connected, off or in an unknown mode, waiting for it to become available...\n" sleep 10; done; printf "===> Screen is on, extracting preferred mode...\n" _DEPTH=32; eval $( edidparser /tmp/edid | fgrep 'preferred mode' | tail -1 | sed -Ene 's/^.+(DMT|CEA) \(([0-9]+)\) ([0-9]+)x([0-9]+)[pi]? @.+/_GROUP=\1;_MODE=\2;_XRES=\3;_YRES=\4;/p' ); printf "===> Resetting screen to preferred mode: %s-%d (%dx%dx%d)...\n" $_GROUP $_MODE $_XRES $_YRES $_DEPTH tvservice --explicit="$_GROUP $_MODE" sleep 1; printf "===> Resetting frame-buffer to %dx%dx%d...\n" $_XRES $_YRES $_DEPTH fbset --all --geometry $_XRES $_YRES $_XRES $_YRES $_DEPTH -left 0 -right 0 -upper 0 -lower 0; sleep 1;
Restart the server and ensure the display shows correctly on monitor attached.
Next add a new file called xinitrc in the /boot/ directory;
Add the following;
#!/bin/sh while true; do # Clean up previously running apps, gracefully at first then harshly killall -TERM chromium 2>/dev/null; killall -TERM matchbox-window-manager 2>/dev/null; sleep 2; killall -9 chromium 2>/dev/null; killall -9 matchbox-window-manager 2>/dev/null; # Clean out existing profile information rm -rf /home/pi/.cache; rm -rf /home/pi/.config; rm -rf /home/pi/.pki; # Generate the bare minimum to keep Chromium happy! mkdir -p /home/pi/.config/chromium/Default sqlite3 /home/pi/.config/chromium/Default/Web\ Data "CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR); INSERT INTO meta VALUES('version','46'); CREATE TABLE keywords (foo INTEGER);"; # Disable DPMS / Screen blanking xset -dpms xset s off # Reset the framebuffer's colour-depth fbset -depth $( cat /sys/module/*fb*/parameters/fbdepth ); # Hide the cursor (move it to the bottom-right, comment out if you want mouse interaction) xwit -root -warp $( cat /sys/module/*fb*/parameters/fbwidth ) $( cat /sys/module/*fb*/parameters/fbheight ) # Start the window manager (remove "-use_cursor no" if you actually want mouse interaction) matchbox-window-manager -use_titlebar no -use_cursor no & # Start the browser (See http://peter.sh/experiments/chromium-command-line-switches/) chromium --app=http://localhost/myvideo.mp4 #/var/www/scripts/runapp.sh done;
Copy your favourite video (in this case myvideo.mp4) to /var/www assuming that this is your root www document directory.
cp /boot/xinitrc /home/pi/.xinitrc
Next, let’s get X started straight after boot by editing /etc/rc.local:
# Boot X on start up if [ -f /boot/xinitrc ]; then ln -fs /boot/xinitrc /home/pi/.xinitrc; su - pi -c 'startx' & fi
Install Video Streaming for Apache
Follow howto instructions to install Video Streaming
Splash Screen
Copy your favourite logo (mylogo.png) to the tmp directory on the server. This will section will force your logo to show on boot instead of server startup script;
cp /tmp/mylogo.png /etc/splash.png
vi /etc/init.d/asplashscreen and add the following to file
#! /bin/sh ### BEGIN INIT INFO # Provides: asplashscreen # Required-Start: # Required-Stop: # Default-Start: S # Default-Stop: # Short-Description: Show custom splashscreen # Description: Show custom splashscreen ### END INIT INFO do_start () { /usr/bin/fbi -T 1 -noverbose -nofitwidth /etc/splash.png exit 0 } case "$1" in start|"") do_start ;; restart|reload|force-reload) echo "Error: argument '$1' not supported" >&2 exit 3 ;; stop) # No-op ;; status) exit 0 ;; *) echo "Usage: asplashscreen [start|stop]" >&2 exit 3 ;; esac
Set image file permissions:
chmod a+x /etc/init.d/asplashscreen insserv /etc/init.d/asplashscreen
Backup original boot line text and then amend to below in cmdline.txt:
cd /boot/ cp cmdline.txt cmdline.txt.20150210 vi cmdline.txt
This should look something like:
dwc_org.1pm_enable=0 console=ttyASMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Change it to:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait logo.nologo
Thats it, restart and check it out!!