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:
- http://tuxdiary.com/2014/11/05/linux-distros-for-kiosks/
- https://www.how2shout.com/tools/free-open-source-linux-kiosk-distros-browsers.html
Porteus Kiosk
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
- product page: https://www.kioware.com/android.aspx
- Play Store download: https://play.google.com/store/apps/details?id=com.adsi.kioware.client.mobile.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
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:
- Install tinyproxy via apt-get and change its config file to include:
FilterURLs On
FilterDefaultDeny Yes
Filter "/etc/tinyproxy/whitelist"
- Create a whitelist with only the domains that you want the user to see.
- 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.
- Set localhost:8888 as the proxy server in the admin interface.
- 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/