Linux Kiosk Tablet From Acer Aspire Switch 10 (Baytrail)

5,291

5

17

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.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

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

Be the First to Share

    Recommendations

    • Made with Math Contest

      Made with Math Contest
    • Multi-Discipline Contest

      Multi-Discipline Contest
    • Robotics Contest

      Robotics Contest

    17 Discussions

    0
    None
    asimkalkan

    Question 4 months ago

    Can i use its own keyboard(also has usb port) instead of usb hub?

    7 answers
    1
    None
    Tod-SoSasimkalkan

    Reply 4 months ago

    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!!



    0
    None
    asimkalkanTod-SoS

    Reply 3 months ago

    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

    0
    None
    Tod-SoSasimkalkan

    Reply 3 months ago

    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.

    0
    None
    asimkalkanTod-SoS

    Reply 3 months ago

    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

    0
    None
    asimkalkanTod-SoS

    Reply 3 months ago

    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

    0
    None
    asimkalkanTod-SoS

    Reply 3 months ago

    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?

    0
    None
    asimkalkanasimkalkan

    Reply 3 months ago

    and are there any way i can communicate with you? email maybe?

    0
    None
    МиленЦ

    Question 6 months ago

    Where can we find these EFI files?
    Although nice tutorial.

    1 answer
    0
    None
    Tod-SoSМиленЦ

    Reply 6 months ago

    I attached one to the instructable. You can also google "bootia32.efi" and choose one from someone you trust.

    Good luck!

    0
    None
    asimkalkan

    Question 7 months ago

    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

    1 answer
    1
    None
    Tod-SoSasimkalkan

    Answer 7 months ago

    It should work. You might have to go to a previous version then do-release-upgrade.

    Just stop after Step 5.

    0
    None
    NoSiRoseD

    9 months ago

    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?

    1 reply
    0
    None
    iLui

    Question 7 months ago on Introduction

    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?

    1 answer
    1
    None
    Tod-SoSiLui

    Answer 7 months ago

    I used Lubuntu 17.10 (not 18.10 like you did). I'd recommend to first try 17.10 just to verify that it works. Other suggestions:

    Make sure you do the "apt update" in step 3. Even consider an "apt-get update --fix-missing" and make sure you have done the "sudo su -" to elevate the entire session to root rather than command-by-command (yup, I'm lazy and my directions reflect that).

    Good luck and let me know how you make out -- I'm probably going to do 18.10 soon, but likely via do-release-upgrade (also an option for you: 17.10 install then upgrade to 18.10).

    0
    None
    tomatoskins

    1 year ago

    Wonderful Linux project! Thanks for sharing!