Kiosk Resources and Notes - steenjd/museum-kiosk GitHub Wiki

Kiosk Resources and Notes

App Architecture

Build the interactive app using modern HTML and JavaScript, in files that will be stored locally on each kiosk and loaded automatically by the kiosk's web browser at startup. This is the "JS app" referred to later in this document. For added security, kiosks will not have network connections. The app files will be stored on USB flash drives or SD cards that can be unplugged and updated manually on the computer that has the new app code.

HTML+JS development does not require such highly specialized app devleopment tools as native app development (e.g., Android, iOS) would require. Apps can be tested on any modern web browser. The popularity of open-source HTML+JS frameworks, such as React.js and AngularJS, means that software developers will be relatively easy to find.

The kiosk is assumed to have a touchscreen display as the only user interface, no mouse or keyboard. The user should be prevented from "breaking out" of the app and into the kiosk operating system. The browser and the JS app will run fullscreen. The kiosk may require a museum attendant to launch the app initially on system startup, but thereafter should require no administrative intervention until the kiosk is next restarted.

Kiosk kits

Lists and comparisons:

Porteus Kiosk

https://porteus-kiosk.org

Buy a mini PC with an amd64/x86_64 type processor architecture (the most common for Windows PCs) and attach it to a touchscreen monitor. Might need to buy speakers if JS app uses audio. Buy two USB sticks per kiosk, or one USB stick and one SD card.

Customizable and has add-on packages for Firefox, Chrome, Java, fonts, printing, SSH server. Can disable keyboard, mouse, and mouse pointer.

Store the OS on one removable medium (USB or SD Card). Store the JS app(s) on the other medium.

Can be configured so that Firefox loads without the nav bar, and so that the index.html JS app launcher is its home page, e.g., file:///media/apps/index.html. Can be configured also to open a new browser tab when the JS app USB stick is plugged in.

Configuration parameters (a set of params can be saved and reused instead of going through the setup wizard when building a new kiosk image):
https://porteus-kiosk.org/parameters.html

If the kiosk will be used offline (no network connection), configure the wired network connection with a static IP address. If you were to use DHCP instead of static IP, you would get a "Gateway not found" error after a one-minute delay during boot.
Source: http://porteus-kiosk.org/faq.html#19

Suggested configuration to use in the Porteus Kiosk Wizard (import as a config file at an early wizard step) — use hide_mouse=2 if you are testing the kiosk system without a touchscreen:

connection=wired
ip_address=192.168.253.253
netmask=255.255.255.255
browser=firefox
enable_file_protocol=yes
homepage=file:///media/apps/index.html
disable_navigation_bar=yes
disable_zoom_controls=yes
search_engine=duckduckgo
removable_devices=yes
default_sound_card=0.0
hide_mouse=yes
right_mouse_click=no
additional_components=uefi.zip 06-fonts.xzm

KioWare for Android Kiosk App

Buy an Android tablet. 12-13" tablets cost $300-400. The KioWare app costs $45 per tablet.

Lock down the tablet so only the browser can be accessed, and have it load the index.html JS app launcher on startup.

Raspberry WebKiosk

Raspberry WebKiosk runs on Raspberry Pi.

Buy a Raspberry Pi for about $50 and connect it to a touchscreen monitor.

Web browser is very basic, uses Chromium, maybe doesn't support fullscreen (tabs, address bar, toolbar are visible), but a JS app can launch fullscreen when the admin starts it up and launches the app.

Webconverger

https://webconverger.org/

Available on x86, Android, Raspberry Pi.

Configuration options (includes fullscreen, hiding pointer, custom browser homepage, and more):
https://webconverger.org/API/

Linutop Kiosk

http://www.linutop.com/solutions.en.html

documentation: https://doc.linutop.com/

OpenKiosk (MozDev Group)

http://openkiosk.mozdevgroup.com/developer.html

Not maintained anymore?

Network restrictions

TinyProxy

Tip from Raspberry WebKiosk FAQ: use tinyproxy with a config like this:

  1. Install tinyproxy via apt-get and change its config file to include:
FilterURLs On
FilterDefaultDeny Yes
Filter "/etc/tinyproxy/whitelist"
  1. Create a whitelist with only the domains that you want the user to see.
  2. Change the default error page at /usr/share/tinyproxy/default.html to do a 0 second redirect to http://127.0.0.1/home.php.
  3. Set localhost:8888 as the proxy server in the admin interface.
  4. Hint: when displaying your website(s), make sure no resource loading is blocked by the whitelist; use the Chromium’s developer console for the purpose.

Many thanks to Louis DeRobertis.

Touchscreen keyboards

xvkbd

xvkbd is what Porteus Kiosk uses in X during setup.

HTML/JavaScript in-app module

Implement a faux keyboard overlay in HTML/JS that provides only alphanumerics and basic symbols and shift and backspace, no special modifiers. Arrange letters alphabetically so kids can find them easily. Use faux text input fields too so that a system keyboard isn't triggered by a real text input UI element; when a character key is pressed, it

Linux Guest login

Ubuntu guest login configuration:
https://help.ubuntu.com/community/CustomizeGuestSession

Writing ISOs/images to USB flash drives

Win32 Disk Imager:
https://sourceforge.net/p/win32diskimager/wiki/Home/