For Factorify we wanted to create a touch screen where an employees could log their attendance. We got a cheap all-in-one PC from China (PiPO X9) with pre-installed Windows 10 Home and RFID card reader.
Our application is an web page. We wanted to start an application in a browser automaticaly and to prevent users from exiting it or doing anything harmful on the PC. At least users without a keyboard.
Configuration steps:
-
Create an user with limited permissions. So in case that anything goes horribly wrong he wouldn't be able to destroy the system.
-
Configure the system to automaticaly login as the newly created user. To do this you need to start a
neplwiz
application, select the user and disable the "users must enter a user name and password to use this computer" option. -
Then, disable the Windows shell (tiles). To do this I decided to run a "dummy" program instead of explorer.exe, on system startup.
Go to regedit and set the value for the following path:
HKEY_CURRENT_USER/Software/Microsoft/Windows NT/CurrentVersion/Winlogon/Shell = rundll32
-
We added the value under the
HKEY_CURRENT_USER
because changing the value inHKEY_LOCAL_MACHINE
would disable shell for all users using the computer. -
Parameter
Shell
won't be probably present so you will need to create one. -
Empty vaule doesn't work. So instead we execute
rundll32
which actually does nothing.
-
-
Create a task in Task Scheduler that will start Chrome browser as soon as internet connection is available. To do this, start the Task Scheduler and create a new task. Configure "start only if the following network connection is available" option.
Then define an action:
cmd /C "chrome --incognito --disable-pinch --kiosk http://www.factorify.me/"
-
Chrome is executed by
cmd
so its started as a "different" process. That is because when connection gets unavailable the Task Scheduler actually kills the process it started. -
Parameter
--incognito
prevents Chrome from showing an "application crashed bubble" in case of incorrect application exit. Incognito mode is good for kiosk mode anyway. -
--disable-pinch
disallows an user to zoom the page using multi-touch gestures.
-
-
Then fine-tune the system.
-
Disable the swipe gesture that can load a page from history. Do it by setting Chrome's
chrome://flags/#overscroll-history-navigation
parameter to disabled. -
Configure an English keyboard layout so RFID reader can work properly.
-
Connect the PC to the internet.
-
Flaws, possible improvements:
-
Disable automatic Windows updates by turning off the update service.
-
PiPO X9 doesn't have any sort of internal battery. So when electricity goes off, your kiosk goes off as well. Newer version of the machine, the PiPO X10 solves the problem.
-
My original plan was to use Android system for the task. PiPO X9 actually has two system preinstalled. Windows 10 and Android 4.4. Unfortunately to create a kiosk in Android older than 5.x is kind of problematic. PiPO X10 ships with Android 5.1 and that should solve the problem.
-
There is a custom boot-loader that will let you chose a operating system on start of the machine. I did not manage to turn this off, so when restarted the machine will always show you system-select menu. The last started system is automatically selected after 10 seconds or so, but you have to wait.
-
I did not introduce any kind of health status monitoring of the machine and applications running on it. But, one thing that comes to my mind is: you can configure the URL where Chrome will send crash reports in case of fail. That would be useful, I guess.