
FullPageOS – A RaspberryPi distro to display a full page browser on boot - sandebert
https://github.com/guysoft/FullPageOS
======
CommanderData
I've achieved this with a few lines of bash on the default Pi distro. I don't
really see the benefit unless there's added advantage of Chromium being
accelerated? (Last time I checked it was not. Not only that HTML5 Audio was
missing too).

For anyone interested heres a dirty bash script I had:

1\. Auto Login & Disable Screen Blanking:
[http://www.raspberrypi.org/phpBB3/viewtopic.php?f=66&t=18200](http://www.raspberrypi.org/phpBB3/viewtopic.php?f=66&t=18200),
[http://elinux.org/RPi_Debian_Auto_Login](http://elinux.org/RPi_Debian_Auto_Login)

3\. Adjust Overscan and force HDMI hotplug: nano /boot/config.txt
disable_overscan hdmi_force_hotplug

4\. Install Chromium, Matchbox, unclutter: sudo apt-get -y install unclutter
matchbox chromium-browser

5\. Add a start up script:

unclutter & xset -dpms xset s off

matchbox-window-manager & while true; do sudo rm -r /etc/chromium su -c
"chromium-browser --kiosk --incognito [http://localhost"](http://localhost")
-s /bin/sh pi done

The script logs in and starts x with matchbox (better performance than LXDE
default), opens Chromium to localhost (nginx would show a page).

I remember I added a few other things to 'sed' replace Pi config files to
display a mp4 splash screen I made in AE (it looked marvelous). At one point I
had a front end that could manage Wifi and do some other basic tasks. Using
PHP and Nginx. Shamefully hackey.

~~~
r3bl
It can be even easier by just autostarting:

    
    
        iceweasel "https://www.google.com"
    

...and installing something like [https://addons.mozilla.org/en-
us/firefox/addon/r-kiosk/](https://addons.mozilla.org/en-
us/firefox/addon/r-kiosk/)

 _Or_ , you can take advantage of this almost two years old bug related to
full screen mode:
[https://bugzilla.mozilla.org/show_bug.cgi?id=1049807](https://bugzilla.mozilla.org/show_bug.cgi?id=1049807)

It takes ~1 minute for my RPi2 to boot and start IceWeasel, but it gets the
job done in the quickest way possible.

~~~
CommanderData
Works well, Iceweasel has better HTML5 support on the Pi than Chromium.

Though struggled getting Iceweasel to start in full screen from command line,
afaik there no flags, one way was to close in fullscreen state or install a
plugin. Further IW shows first run dialogs. Annoying if your deploying several
Pis, then theres the cursor which unclutter package helps to solve. Lastly
matchbox x uses less ram than LXDE which was important in my use case.

Chromium is better if you want to seamlessly deploy Pi's without spending too
much time configuring them, theres a trade off somewhere - the official
Chromiums package is old and IW is newer with less API.

You may want to consider wrapping your command inside the while loop in the
script above. I added did this after I experienced IW and Chromiums
unexpectedly closing sometimes. Helped alot.

------
thenewwazoo
I built something like this[0] at a past job based on Yocto Linux and Midori.
I targetted at the SolidRun CuBox because shipping an RPi to customer site
didn't communicate the level of professionalism we were looking for. :)

My goals were small size and building something very secure, and I think I
pulled it off. The resulting disk image is on the order of a couple hundred
megabytes, iirc (X is very big), and it does not permit interactive login by
default (no ssh). It also runs the root filesystem in read-only mode. As a
bonus, you get the entire Yocto ecosystem.

[0] [https://github.com/luciddg/kiosk-yocto](https://github.com/luciddg/kiosk-
yocto)

------
PanMan
I have experimented a bit with the raspberry pi to drive some TV's around our
office. Stock Raspberian OS with different browsers. Unfortunately I was kind
of underwhelmed by the performance: tv.giphy.com already is kind of too heavy,
and even geckoboard is to heavy to run on a raspberry.. Or am I missing some
great performance tweaks?

~~~
JimmyAustin
Just out of curiosity, which Pi have you been using?

~~~
mdm_
Where I work, over the past 2-3 years we've used B+, Pi 2, and Pi 3 (all
running Raspbian) for public display screens and browser performance is
terrible on all of them. Even the Pi 3 is unable to play YouTube videos
without freezing for 10-30 seconds while it buffers and skipping a ton of
frames throughout.

If you have video files or use e.g. youtube-dl and then play video back with
omxplayer it's nice and smooth (although using the --loop option seems to make
the video freeze after several hours/days; memory leak?). Our solution was a
2-line bash script to start a new omxplayer instance when the previous one
finishes ad infinitum until you Ctrl+C, and that's run for 7 or 8 months now
without a hitch.

------
shireboy
Oh wow. A while back I made a Raspi boot to Chromium full screen to load my
Trello+Weather+StatusCake dashboard
([https://gist.github.com/danroot/7610103](https://gist.github.com/danroot/7610103)).
I felt it was way harder than it should have been, though to be fair much of
the issue was that I had a line in the wrong place in some boot script. Still,
I remember thinking at the time that I'd like a distro where I could easily
put in Wifi and URLS, then boot directly to it. May have to revisit that
now...

------
GuySoft
Hey guys, developer of FullPaveOS here, just mentioning there is a new RC out
with lots of new cool things:
[https://github.com/guysoft/FullPageOS/issues/18](https://github.com/guysoft/FullPageOS/issues/18)

------
mnutt
My company did something similar to this for our dashboards, great to see
someone open source it. At the time the challenge was finding a new-ish
version of Chromium, which at the time was years behind in the Raspbian
distro. It looks like this one is Chromium 51?

------
rcarmo
Did a similar thing a few years back, with playlist support and uzbl as the
browser (which is much faster and lighter than chromium) and omxplayer to
play/stream full screen video.

Just a Python script with playlist support, really:

[https://github.com/sapo/digital-signage-
client](https://github.com/sapo/digital-signage-client)

We eventually gave up on using Pis due to lack of decent hardware acceleration
on the browser (still missing, BTW) and I then built this:

[https://github.com/sapo/android-signage-
client](https://github.com/sapo/android-signage-client)

Plenty of videos and samples at both links.

------
jsingleton
I wonder if something based on RISC OS [0] would be more lightweight and boot
quicker? I believe NOOBS is based on this and it loads very quickly. Linux is
great but Raspbian may be overkill for something like this.

[0] [https://www.riscosopen.org/content/downloads/raspberry-
pi](https://www.riscosopen.org/content/downloads/raspberry-pi)

------
Zekio
1GB distro to display a full screen browser seems a bit excessive

Edit: there is a lite version at 557MB, didn't notice at first due to it
having two dates in the name

~~~
heegemcgee
I don't understand the effort here. Making an image implies supporting it;
does the author really think it's going to be worth his time to "support" what
is surely a couple of bash scripts wrapped up in 600MB of OS?

It seems like a simple how-to blog post would have been more appropriate.

~~~
Alupis
It requires you provide it with a zipped Raspbian image. It takes that image,
and injects a few scripts, and configures them to run at boot.

Here's the scripts:

[https://github.com/guysoft/FullPageOS/blob/devel/src/fullpag...](https://github.com/guysoft/FullPageOS/blob/devel/src/fullpageos)

[https://github.com/guysoft/FullPageOS/blob/devel/src/common....](https://github.com/guysoft/FullPageOS/blob/devel/src/common.sh)

[https://github.com/guysoft/FullPageOS/blob/devel/src/config](https://github.com/guysoft/FullPageOS/blob/devel/src/config)

~~~
GuySoft
Indeed, its what lets us release a new version in OctoPi within hours of
announcements on raspberrypi.org. I am also working on adding other devices
support using Armbian.

------
kriro
A bit disappointed since I read the headline (it has distro in the headline
somehow my brain stopped at xxxxOS) and thought it was an OS developed from
scratch (I was ready to get impressed by writing/porting a browser for it as
well). Alas it seems to use Raspbian. Still a fun project but I'd probably
tackle that with a startup script or something.

------
riebschlager
I'll throw in another "Hey, you could do it THIS way!" You could just make a
fullscreen Electron app. [1]

I was just messing around with this on a Raspberry Pi 3 this morning and it
works really well.

[1] [https://github.com/electron/electron-quick-
start](https://github.com/electron/electron-quick-start)

~~~
gregmac
I was thinking of doing this, with the specific added feature of ensuring the
page is displayed, and periodically refreshed.

In case of server returning non-200 response, it should wait a few seconds and
refresh. In case of network disconnected (especially when using wifi), same
thing - refresh the page.

The periodic refresh is necessary for pages that don't refresh, but even for
wallboard-designed content that stays updated, scripts break and things go
wrong. The browser itself refreshing is a fail-safe. You should never have to
touch these things once they're installed, and that includes doing a hard
reboot.

Another nice-to-have feature: turning off the display signal at night (letting
the display sleep) and turning it back on in the morning. With computer
monitors this is easy, with TVs it probably needs HDMI-CEC, but seems
possible.

------
hoodoof
Are there Linux distros dedicated to kiosk mode?

~~~
krasin
There's [https://www.google.com/work/chrome/devices/for-
kiosks/](https://www.google.com/work/chrome/devices/for-kiosks/) but I never
tried it.

------
bedros
this is awesome for irrigation system, or home automation

------
kevincox
This would be fantastic if it supported automatic updates. I want to forget
about the machine and just have a webpage on the screen.

~~~
GuySoft
Can you be more specific what needs to be updated? OctoPrint does something
like that using pip packages.

~~~
kevincox
Well security updates mostly. Something like how ChromeOS handles them would
be user nice (maybe a scheduled reboot time to apply)

~~~
GuySoft
You could just run apt-get update ; apt-get upgrade. The chromium is a
package. You welcome tp contribute code.

