Firefox fullscreen kiosk machine

By thomas, 10 December, 2005
Update (2 Dec 2005): kiosk extension is broken, I'm now using a hacked browser.jar (version 1.0.7), I made a few changes to xinitrc-common as well Simple kiosk implementation, not entirely thorough, but enough for our purposes. Machine boots and gdm logs into a user without a password, firefox starts fullscreen and opens our homepage. Simple to implement.
  • kiosk extension is incomplete, you can open a new browser window and circumvent the chrome security, I changed my browser.jar file to take away this functionality, here is a patch: kiosk.patch browser.jar
  • kiosk extension
    [root@host] # firefox -install-global-extension
    /full/path/to/kiosk_browser_symbio_technologies_-1.0-fx-linux.xpi
  • patched kiosk1.xul to open homepage (add loadOneOrMoreURIs after Startup):
    cd /usr/lib/firefox-*/extensions/{*}/chrome
    patch -p0
    homepage.patch: --- content/kiosk1.xul.loadHome 2005-11-28 11:21:53.000000000 -0500 +++ content/kiosk1.xul 2005-11-28 11:23:30.000000000 -0500 @@ -31,7 +31,7 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" - onload="Startup()" onunload="Shutdown()" onclose="return WindowIsClosing();" + onload="Startup();loadOneOrMoreURIs('http://www.ias.edu')" onunload="Shutdown()" onclose="return WindowIsClosing();" contenttitlesetting="true" title="&mainWindow.title;" titlemodifier="&mainWindow.title;"
  • patched browser.js in browser.jar to redirect file:/// resource:/// and about:/// requests to home page as seen on this site
    cd /usr/lib/firefox-*/chrome
    TMPDIR=`mktemp -d`
    unzip -q browser.jar -d $TMPDIR
    pushd $TMPDIR
    patch -p0 /usr/local/etc/browser-js-location.patch
    zip -q -r -D browser.jar *
    popd
    rm -rf browser.jar
    mv $TMPDIR/browser.jar .
    rm -rf $TMPDIR
    browser-js-location.patch:
    --- content/browser/browser.js_kiosk    2005-11-28 11:11:43.000000000 -0500
    +++ content/browser/browser.js  2005-11-28 11:12:43.000000000 -0500
    @@ -2857,7 +2857,14 @@
    this.setOverLink("", null);
    
    var location = aLocation.spec;
    -
    +    if (location.match(/^file:/) ||
    +       location.match(/^//) ||
    +       location.match(/^chrome:/) ||
    +       location.match(/^resource:/) ||
    +       (!location.match(/^about:blank/) &&
    +       location.match(/^about:/))) {
    +       loadURI("http://www.math.ias.edu");
    +    }
    if (location == "about:blank")
    location = "";
  • patch langpacks to open our home page:
    #!/bin/sh
    
    FIREFOX_LIBDIR=/usr/lib/firefox-1.0.7
    
    # set homepage to www.math.ias.edu
    cd $FIREFOX_LIBDIR/chrome
    for i in `ls *.jar`; do
    rm -rf locale
    LANGPACK=`basename $i .jar`
    TMPDIR=`mktemp -d`
    unzip -q $LANGPACK.jar -d $TMPDIR
    pushd $TMPDIR
    perl -pi -e "s|browser.startup.homepage=.*$|browser.startup.homepage=http://www.ias.edu|g;" locale/browser-region/region.properties
    zip -q -r -D $LANGPACK.jar *
    popd
    rm -rf $LANGPACK.jar
    mv $TMPDIR/$LANGPACK.jar .
    rm -rf $TMPDIR
    done
  • configure gdm to login automaticaly to a specific user, do not give the user a password.
    useradd kiosk
    /etc/X11/gdm/gdm.conf:
    AutomaticLogin=kiosk
    TimedLogin=kiosk
    
  • hack xinitrc-common to start metacity and a firefox kiosk window. /etc/X11/xinit/xinitrc-common:
    --- xinit/xinitrc-common_firefoxonly    2005-11-28 11:48:40.000000000 -0500
    +++ xinit/xinitrc-common        2005-11-28 11:52:08.000000000 -0500
    @@ -61,3 +61,5 @@
    DBUS_LAUNCH=
    [ -x /usr/bin/dbus-launch -a -z "$DBUS_SESSION_BUS_ADDRESS" ] && DBUS_LAUNCH="/usr/bin/dbus-launch --exit-with-session"
    
    +/usr/bin/metacity --sm-disable &
    +# remove lock file (incase we crashed)
    +/bin/rm -f /home/kiosk/.mozilla/firefox/*.default/lock
    +exec firefox -fullscreen -chrome chrome://kiosk1/content/kiosk1.xul
  • modify localstore.rdf to always start firefox fullscreen this part is manual, startup your machine and wait for firefox to start, this will create the user kiosk's profile dir go to a virtual console and stop gdm
    [root@host] # init 3
    [root@host] # cd ~kiosk/.mozilla/firefox/*/
    [root@host] # chown root localstore.rdf
    edit localstore.rdf and set sizemode="maximized"
     rdf:description rdf:about="chrome://kiosk1/content/kiosk1.xul#main-window">
    width="610"
    height="450"
    screenX="89"
    screenY="40"
    sizemode="maximized" />  /rdf:description>
    For the main window without kiosk:
     rdf:description rdf:about="chrome://browser/content/browser.xul#main-window">
    width="610"
    height="450"
    screenX="89"
    screenY="40"
    sizemode="maximized" />  /rdf:description>
    With sed:
    [root@kiosk]# sed -e 's/(sizemode=\").*\"/1maximized\"/' ~kiosk/.mozilla/firefox/*.default/localstore.rdf
    since localstore.rdf is owned by root, firefox can't overwrite this setting (this probably introduces other problems, but none that we've seen yet...), you can also put this in localstore.rdf in the firefox lib dir, but the user's localstore.rdf will override this.