Linux Kiosk Tablet From Acer Aspire Switch 10 (Baytrail)

21K731

Intro: Linux Kiosk Tablet From Acer Aspire Switch 10 (Baytrail)

I needed a tablet for the home automation system in my vacation rental property (http://www.SoS-OBX.us/). After buying and testing a few different tablets (HP Stream 7/8, Samsung Slate, rooted Kindle Fire) I finally settled on an Acer Aspire Switch 10 (SW5-012). It's sturdy and flexible, it has an extra button that I re-purposed to a home page button, and it features Gorilla Glass which makes for a very strong display that should easily withstand a pounding from the renters.

But it wasn't easy to set up. With the Intel Atom Baytrail system, I had to contend with a 32-bit UEFI coupled with a 64-bit OS. Fortunately, linux has started to provide excellent kernel support for these machines. Using Lubuntu 17.10, I was able to turn this into a workable kiosk. I also managed to streamline some of the directions to make the overall process a lot easier -- no more endless reboots, grub commands, or module compilation!!

Now, I get that this is not technically a tablet (a full Switch 10 includes a detachable keyboard), but I found 4 on eBay for about $80 each, so I bought them all.

STEP 1: Parts

For this instructable, you'll need:

  • Acer Aspire Switch 10 (SW5-012) -- might also work with other models and with the Switch 11, but those were not tested. It is important that you have the version with the Broadcom wifi. I was not able to test with the Realtek wifi version.
  • A multiport USB hub with a MicroUSB connector. Don't use a USB OTG connector for the SW5-012.
  • A USB mouse and keyboard
  • A flash drive with 2GB or more of storage
  • A working knowledge of Ubuntu-based installations and linux in general

You will also need a machine to create the bootable image. That machine should have and ISO image of the latest version of Lubuntu (I used v 17.10.1, available at https://lubuntu.net/downloads/) and a copy of Rufus (https://rufus.akeo.ie/) if it's Windows-based, otherwise dd will work for *nix.

Hook everything into the USB hub, then plug it into the Switch 10.

STEP 2: Prepare Bootable USB Device and Boot It

I'm going to assume that you already have the skills to make a bootable USB drive using Rufus. That said, make sure you choose "MBR Partition Scheme for UEFI" under "Partition scheme and target system type."

After you've created the bootable drive, you'll also need to drop a 32-bit UEFI boot file into the \EFI\BOOT directory. I've attached one to this project but you can get them from many places online or you can build your own using linux if you need to.

Once you have a bootable USB, start the Switch 10 by pressing "Volume up" and "Power" at the same time and holding until the tablet starts. The buttons are on the right side.

Once the machine powers up into BIOS, you'll want to navigate to "Security" and set a Supervisor Password. This machine requires this in order to change the UEFI settings. Once you've set a password, navigate to "Boot" and set "Secure Boot" to DISABLED. Also change the boot order so that "USB HDD" is first. Save changes and reboot.

STEP 3: Boot Into Lubuntu, Prepare the System for Install

Choose "Try lubuntu without installing" and boot into a working lubuntu. You'll need to do some prep work before you begin the installation. Specifically, you'll need to get the wifi device running and you'll want the 32-bit UEFI binaries pre-loaded so that the install can complete without errors.

First, open a terminal and elevate to su with:

sudo su -

To load the wifi drivers, first determine what firmware failed to load:

dmesg | grep brcm

You'll probably see something like this:

brcmfmac mmc0:0001:1: Direct firmware load for brcm/brcmfmac43241b4-sdio.txt failed with error -2

This means the NVRAM firmware for the device needs a template to load. Configure one using:

cp /sys/firmware/efi/efivars/nvram-74b00bd9-805a-4d61-b5f1-43268123d113 /lib/firmware/brcm/brcmfmac43241b4-sdio.txt

The firmware template name should match whatever you saw in the dmesg output. Then, reload the driver using:

modprobe -r brcmfmac && modprobe brcmfmac

Wait a few seconds (5-10) and you should be prompted to join a wifi network.

Next, make sure aptitude is updated

apt update

then, install the grub 32-bit UEFI drivers:

apt install grub-efi-ia32 grub-efi-ia32-bin

Your system is now ready for a reasonably seamless install.

STEP 4: Install Lubuntu

If you're familiar with an Ubuntu desktop install, this will look very similar. When prompted for partitioning, select "Something else" and partition manually. My device has a 50GB SSD, so I chose the following partitions:

mmcblk1p1 - EFI  - 256MB
mmcblk1p2 - ext2 - 256MB mount as /boot 
mmcblk1p3 - ext4 - 47.5GB mount as /
mmcblk1p4 - swap - rest of space, but not less than 2GB

Also, install the "device for bootloader installation" should be the EFI partition. Make sure you allow Lubuntu to download updates during the install (not required, but highly desirable).

When the install is complete, reboot, but leave the USB drive inserted (one more step before this is bootable without it).

STEP 5: Make System Bootable Without USB Drive

Turn the system off, then start into BIOS (Volume Up / Power). You'll be prompted for the Supervisor password you entered before.

In BIOS, go to "Boot" and re-enable Secure Boot, then go to "Security" and select "Select an UEFI file as trusted for executing." From the provided menu, navigate through HDD1\EFI\ubuntu and choose "grubia32.efi" then give it a name in the next prompt (whatever name you want -- it'll only show up in BIOS) then click OK.

Go back to "Boot" and disable Secure Boot then save changes.

Remove the USB flash drive and reboot the system. It should boot to Lubuntu!!!

STEP 6: Add Other Components, Change Preferences

A few other components you'll want to ease management of this tablet:

apt install openssh-server chromuim-browser unclutter

Chromium is the L/Ubuntu version of Chrome that is installable from Aptitude.

In "Preferences" I disable any hibernation and shutdown modes, remove the screen locking, and set screen blanking to 5 minutes (battery) and 10 minutes (plugged in). Also set up the user to log in automatically.

STEP 7: Set Up Login to Launch Browser

First, open Chromuim then set the home page to your home automation system. On my network (both at home and at the vacation home) is "http://home/"

SSH into the tablet and create a directory (if it does not already exist) under the autologin user -- mine is called "kiosk" -- called ~/.config/autostart then create a file called "kiosk.desktop" with the following content:

[Desktop Entry]
Type=Application Name=Kiosk Exec=/home/kiosk/kiosk.sh X-GNOME-Autostart-enabled=true

Then create the script file at /home/kiosk/kiosk.sh with the following content:

#!/bin/bash

# Run this script in display 0 - the monitor export DISPLAY=:0

# Hide the mouse from the display
unclutter &

# If Chromium crashes (usually due to rebooting), clear the crash flag so we don't have the annoying warning bar
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/kiosk/.config/chromium/Default/Preferences
sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /home/kiosk/.config/chromium/Default/Preferences

# Delay to allow wireless to connect
/bin/sleep 5s

# Run Chromium and open tabs
/usr/bin/chromium-browser --kiosk --window-position=0,0 http://home/ &

STEP 8: Remap "Windows" Key to Browser Home Page

Now, almost everything works, but sometimes I want to launch emby on my HA tablet. Because I don't have a keyboard or an address bar, I need some easy way to return to the browser home page. Remember that little Windows logo key on the side of the tablet? I'll re-purpose that to send "Crtl-Home" to the browser and return me to the home page.

Let's create a script called chromiumHome.sh and put it in the kiosk user's home directory:

#!/bin/bash
xdotool keyup Super_L; xdotool key alt+Home

#NOTE: You should also be able to use the --clearmodifiers parameter of xdo tool and remove the first command of the two-parter above

Then we'll use one of Openbox's features to remap the keys. Open ~/.config/openbox/lubuntu-rc.xml and find the section labelled "<keyboard>" and add the following text:

  <keybind key="0x85">
<action name="Execute">
<execute>/home/kiosk/chromiumHome.sh</execute>
</action>
</keybind>

This code will remap the Windows key (aka the "SUPER" key) to run the chromiumHome.sh script. Reboot the tablet and try it!

Now you have a neat little tablet for your home automation system. The tablet is durable (not "rugged" but durable) has a decent battery life (3+ hours), and with the aluminum stand I got for it, makes a very finished looking piece for your home theater.

STEP 9: Other Things to Consider and Develop Further

There is still room for improvement. Here's a list of things I plan to fix:

  • Move "kiosk" to a non-administrative user so that the wifi connection can be shared but the wifi password is invisible
  • Shutdown still shows the shutdown menu instead of just shutting down the tablet (even though I changed the behavior in Preferences from "Ask" to "Shutdown")
  • Put some better logos targeted to my vacation rental branding (it's called "Shades of Summer") instead of the Acer and Lubuntu logos
  • Maybe spend some time trying to get sound and bluetooth working (not critical, but nice to have)
  • Add a battery life indicator to the web page (because the task bar is hidden, the user doesn't know the battery is low until an alert pops up)
  • Change the boot order back to use the HDD as primary to prevent any guest from launching a USB device on my tablet

STEP 10: References and Acknowledgements

One of the amazing effects of the OpenSource movement is the ability for guys like me to stand on the shoulders of giants when I try to put together something to meet my specific needs where the market has either failed to produce or wants way more than I'm willing to pay. So, I'd like to add the following references where I found all the knowledge I needed:

https://gist.github.com/franga2000/2154d09f864894b... - information on how the 32-bit bootloader works on these devices

https://wiki.debian.org/InstallingDebianOn/Asus/T1... - info on how to get wifi working on a Baytrail system

http://openbox.org/wiki/Help:Bindings - Key binding info for Openbox

https://github.com/baskerville/sxhkd/issues/86 - help on solving the keymapping problem

22 Comments

I've used Linux Mint 20.3 MATE Edition.
1. Creat USB with rufus. Partition scheme GPT, Target System UEFI
2. Copy bootia32.efi to /EFI/BOOT
3. Boot following the guide (Step 2)
4. Wifi worked without a problem
5. Open terminal and run the following
apt update
apt install grub-efi-ia32 grub-efi-ia32-bin
6. Start installing. I choose to do a clean, auto partition. (erase and install)
7. Boot to installed os following the guide (Step 5)
I was following this guideline when I was installing Lubuntu 21.10 desktop. The issue with wifi was solved by following https://hansdegoede.livejournal.com/24132.html. Only issue I have now is with audio card. Device got stuck after some time (few minutes). Kill pulseaudio helps but that is not an (permanent) option.
Thanks for this step-by-step. And yet, I never managed to make it work. The grub part fails whatever I try. The VERY weird thing is that everything works so fine from the USB live, and all goes south from the hd install. And whatever step-by-step procedure I try, wether yours or the githb carsenf one, i never manage to get it to boot properly. If your linux oriented friend has a hot-line, I'd pay to help him set this up ! Thanks again.
(by the way I tried with lubuntu 20 iso image with the 32bit uefi. When the live usb boots, everything works out of the box : wifi, keyboard, sound, touch screen, it's the hard isntall that fails)
I just did a lubuntu 20.04.2 live cd and it worked perfectly. Sound, wifi, volume keys -- everything worked out of the box. If you're not booting, it is most likely a problem with your uefi.

Let me know if this is still a problem and we can probably switch to email or something to try a step-by-step install. I ended up buying 6 of these tablets and I've installed 4 with no problems.
Sorry for the typos ! And I meant I'd pay your frien to help me set up this device.
Can i use its own keyboard(also has usb port) instead of usb hub?
Yes, it can!! I recently installed Lubuntu 19.04 and it also simplifies the process. I plan on posting a new Instructable covering this, but in the meantime, if you use Lubuntu 19.04 and the Switch attachable keyboard, the steps are modified as follows:

Step 1: The Switch keyboard replaces the keyboard, the mouse, and the USB hub. Also, note that Etcher will *not* work with the Lubuntu image -- you need to use Rufus
Step 3: No need to install drivers for wifi. So, you can skip the steps for copying the NVRAM firmware and the modprobe. Go from booting to the super user (su), then apt update and install the 32 bit bootloader (you still need this)
Step 4: Let Lubuntu auto-partition instead of making your own partition table. You don't need to leave the USB stick inserted.

And, sound works with a base Lubuntu 19.04 install!! Make sure you change the output device from "headphones" to "speakers."

I should get the new Instructable posted within the next week.


thnx!!



Oh thank you very much about your detailed answer, im going to try and install lubuntu today. And looking forward to see your new instructables.

kudos
If you can see it, you can connect. Possibly a password issue? For me, it connected, but the wifi icon didn't even change color (so it looked like it didn't work). But when I opened a browser window, the Interwebs came to life :)

Post some contact info and I'll reach out to you.
Okay i solved the wifi issue, after several restarts it started to work lol. but i noticed that i cant get audio, i even plugged in headphones and tried it, but no sound.


and yes i changed headphones to speakers in pulseaudio volume control
I dont know, i also tried to connect my mobile phone hotspot but couldnt. definitely not password issue, i actually figured everything out except wifi, will work on it and write the result here
i just installed. and yaay it worked. also wifi works BUT i can see wifi networks but i cant connect. i write password but it doesnt connect. any solutions?
and are there any way i can communicate with you? email maybe?
Where can we find these EFI files?
Although nice tutorial.
I attached one to the instructable. You can also google "bootia32.efi" and choose one from someone you trust.

Good luck!
i plan to use a light linux distro on my slow aspire switch 10. can i use same steps and not use it as kiosk? any advices? thankx
It should work. You might have to go to a previous version then do-release-upgrade.

Just stop after Step 5.
Thank for this. I was working on getting Linux Mint onto my Switch 10 but it wouldn't boot after installing. Installing the efi ia32 package beforehand and adding the UEFI Secure Boot File did the trick. Do you have a solution for the audio?
Hey there,

i'm following your guide and it works until about 81% of the installation i always get the following message:

Installation Failed

External command finished with errors.
Command apt install -y --no-upgrade -o Acquire::gpgv::Options::=--ignore-time-conflict grub-efi-$(if grep -q 64 /sys/firmware/efi/fw_platform_size; then echo amd64-signed; else echo ia32; fi) finished with exit code 100. Output: WARNING: apt does not have a stable CLI interface. Use with caution in scripts. Reading package lists... Building dependency tree... Reading state information... The following additional packages will be installed: grub-efi-ia32-bin Recommended packages: grub-efi-ia32-signed The following packages will be REMOVED: grub-gfxpayload-lists grub-pc The following NEW packages will be installed: grub-efi-ia32 grub-efi-ia32-bin 0 upgraded, 2 newly installed, 2 to remove and 0 not upgraded. Need to get 0 B/682 kB of archives. After this operation, 4831 kB of additional disk space will be used. Get:1 cdrom://Lubuntu 18.10 _Cosmic Cuttlefish_ - Release amd64 (20181017.2) cosmic/main amd64 grub-efi-ia32-bin amd64 2.02+dfsg1-5ubuntu8 [635 kB] Get:2 cdrom://Lubuntu 18.10 _Cosmic Cuttlefish_ - Release amd64 (20181017.2) cosmic/main amd64 grub-efi-ia32 amd64 2.02+dfsg1-5ubuntu8 [47.1 kB] dpkg-preconfigure: unable to re-open stdin: No such file or directory E: Can not write log (Is /dev/pts mounted?) - posix_openpt (19: No such device) (Reading database ... 243251 files and directories currently installed.) Removing grub-gfxpayload-lists (0.7) ... Removing grub-pc (2.02+dfsg1-5ubuntu8) ... Selecting previously unselected package grub-efi-ia32-bin. (Reading database ... 243231 files and directories currently installed.) Preparing to unpack .../grub-efi-ia32-bin_2.02+dfsg1-5ubuntu8_amd64.deb ... Unpacking grub-efi-ia32-bin (2.02+dfsg1-5ubuntu8) ... Selecting previously unselected package grub-efi-ia32. Preparing to unpack .../grub-efi-ia32_2.02+dfsg1-5ubuntu8_amd64.deb ... Unpacking grub-efi-ia32 (2.02+dfsg1-5ubuntu8) ... Setting up grub-efi-ia32-bin (2.02+dfsg1-5ubuntu8) ... Processing triggers for man-db (2.8.4-2) ... Setting up grub-efi-ia32 (2.02+dfsg1-5ubuntu8) ... Unknown terminal: qterminal Check the TERM environment variable. Also make sure that the terminal is defined in the terminfo database. Alternatively, set the TERMCAP environment variable to the desired termcap entry. debconf: whiptail output the above errors, giving up! dpkg: error processing package grub-efi-ia32 (--configure): installed grub-efi-ia32 package post-installation script subprocess returned error exit status 255 Errors were encountered while processing: grub-efi-ia32 E: Sub-process /usr/bin/dpkg returned an error code (1)

I just don't get it. It's stuck at the grub packages i installed previously as you mentioned + it seems to have problems writing some logs + it doesn't seem to be able to start qterminal? Doesn't make sense to me.

Do you have any clue how to solve this?
More Comments