Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Ubuntu on Acer Aspire Switch 10

Ubuntu on Acer Aspire Switch

The problem

What's the problem with this tablet? Why can't I just insert the USB and mash F12 until it boots? The tablet is made to run Windows 8.1 and Windows 8.1 only. Some absolute genius at Acer decided to put a 32-bit UEFI on a 64-bit system, which no reasonable Linux distro supports out-of-the-box.

NOTE: This guide focuses on installing Ubuntu alongside Windows. If you're trying to replace Windows, then I assume you know enough about Linux to know which parts to change.

What works:

  • Keyboard
  • Trackpad
  • Touchscreen
  • Sound (usually)
  • Backlight control (with a patch)

What doesn't work:

  • HDMI output
  • Micro SD reader (read only)

Requirements

Before you start, there's a few things you need:

  • USB flash drive (at least 4GB)
  • USB OTG adapter (not always necessary, but recommended)
  • 32-bit GRUB UEFI binary (explained below)
  • 64-bit Ubuntu ISO
  • BIOS v1.20 installed (required for backlight fix - you can only update BIOS from Windows, so do it now!)
  • Rufus (or an equivalent image writer)
  • USB WiFi or Ethernet card (in case your Wi-Fi doesn't work)

Preparing the USB stick

Installing the ISO (Rufus)

  1. Open Rufus
  2. Select the correct USB Stick
  3. Select "GTP for UEFI computers" as the partition table (if available)
  4. "Select the Ubuntu 64-bit iso
  5. Click "Create"

Building the 32-bit UEFI GRUB bootloader

If you trust me (and the owner of that repo), you can just download the file here, but remember, downloading binaries from random strangers on the internet is not a good idea.

Building it yourself

To build GRUB, run the following commands in a Linux shell:

# Install build dependencies and tools
sudo apt-get install git bison libopts25 libselinux1-dev autogen m4 autoconf help2man libopts25-dev flex libfont-freetype-perl automake autotools-dev libfreetype6-dev texinfo
# Clone the GRUB repo
git clone git://git.savannah.gnu.org/grub.git
cd grub
# Configure GRUB
./autogen.sh
export EFI_ARCH=i386
./configure --with-platform=efi --target=${EFI_ARCH} --program-prefix=""
make
cd grub-core
# Build the GRUB image
../grub-mkimage -d . -o bootia32.efi -O i386-efi -p /boot/grub ntfs hfs appleldr boot cat efi_gop efi_uga elf fat hfsplus iso9660 linux keylayouts memdisk minicmd part_apple ext2 extcmd xfs xnu part_bsd part_gpt search search_fs_file chain btrfs loadbios loadenv lvm minix minix2 reiserfs memrw mmap msdospart scsi loopback normal configfile gzio all_video efi_gop efi_uga gfxterm gettext echo boot chain eval

This will create a file called "bootia32.efi".

Copy "bootia32.efi" to "/EFI/Boot/" on your flash drive.

Booting from the USB

  1. Open the "BIOS" (F2 when you see the Acer logo)
  2. Under "Security" set a supervisor password
  3. Under "Boot" set "Secure boot" to disabled
  4. Set the USB stick to boot first
  5. Press F10 to save changes and reboot

If your USB doesn't show up, try to plug it in to the body directly using an OTG adapter, not via the keyboard dock).

Installing Ubuntu

  1. The laptop should automatically boot into GRUB
  2. In the GRUB menu choose "Try Ubuntu without installing"
  3. Open the terminal and run ubiquity --no-bootloader to start the installer (--no-bootloader isn't usually necessary, but if your installation fails with some bootloader-related error, try this)
  4. When prompted, select "Something else" to manually partition the drive
  5. Add a root (ext4, "/") and swap (swap, "swap") partition
  6. Finish the installation and hope for the best

Booting Ubuntu

In order to boot the Ubuntu we just installed, we need to use the USB GRUB again. Just let the laptop automatically boot from the USB. When in GRUB, press C to open a command line. Run the following commands:

set root=(hd1,gpt5)
linux /vmlinux root=/dev/mmcblk0p5
initrd /initrd.img
boot

If it doesn't work, try with /dev/mmcblk1p5 and/or booting without an SD card inserted.

Permanently installing GRUB

Obviously we can't use the USB GRUB to boot forever. Let's install GRUB: Open the terminal and run the following commands:

# Get the 32-bit UEFI GRUB package
sudo apt-get install grub-efi-ia32 grub-efi-ia32-bin 
# Mount your EFI partition 
mkdir /boot/efi # if the dir already exists, skip the mount command
sudo mount /dev/mmcblk0p1 /boot/efi
# Install GRUB
grub-install --target=i386-efi --efi-directory=/boot/efi/

If the 32-bit grub package doesn't exist, you can compile it yourself like this:

# Get build dependencies
sudo apt-get install autoconf
# Get the GRUB source
git clone git://git.savannah.gnu.org/grub.git
# Compile 32-bit UEFI GRUB
cd grub/
./autogen.sh
./configure --with-platform=efi --target=i386
# Install GRUB
sudo grub-install --target=i386-efi --efi-directory=/boot/efi/

Adding GRUB to the bootloader

Reboot the laptop and press F12 to go into the boot menu. If you see an option called "ubuntu" and it works, you can skip this part.

  1. Go into BIOS
  2. Under "Boot" set "Secure boot" to enabled
  3. Press F10 to save changes and reboot
  4. Go into BIOS again
  5. Under "Security", click "Add trusted executable"
  6. Navigate to *\HD0\EFI\ubuntu* and select grubia32.efi
  7. Enter the name for the bootloader entry and press OK
  8. Press F10 to save changes and reboot
  9. Go into BIOS for the last time
  10. Under "Boot" set "Secure boot" to disabled
  11. Press F10 to save changes and reboot

You should not see the entry in the boot menu (F12)

Making things actually work

Screen backlight

See this comment. Note that this will only work if you're on BIOS v1.20.

Wireless

A lot of this has since been upstreamed, so if it works for you, you can safely skip this section.

BRCM80211

I don't have it so if someone got it working, please comment below so I can add it

RTL8723BS

The drivers for this card have been merged into the kernel, so it should work automatically.

If it doesn't work for you:
# Clone the driver repo - if you don't have a wifi card, do this step onto a USB stick from another device
git clone https://github.com/hadess/rtl8723bs
# Build and install the driver
cd rtl8723bs
make
sudo make install
sudo modprobe r8723bs

If it doesn't work immediately, reboot.

Keyboard

Not required on modern kernels

To make the keyboard work you need to modify the kernel source and recompile it. Before compiling the kernel, open the file include/linux/hid.h and change the value of MAX_HID_USAGES (default is 12288) to 65536 (On aproximately line 346). Then compile and install the kernel.

To see how to do this, read my other guide.

Sources

@nicknesh
Copy link

Fedora 33 kernel 5.10.9 - suspend/resume - display is OK. Display rotation is OK. Unfortunately after suspend, when close lid computer wakes up. Hibernate is OK, but after restart WiFi id down.

@funder7
Copy link

funder7 commented Jan 24, 2021

Fedora 33 kernel 5.10.9 - suspend/resume - display is OK. Display rotation is OK. Unfortunately after suspend, when close lid computer wakes up. Hibernate is OK, but after restart WiFi id down.

Maybe the problem comes from the network device, you can check that it's configured properly, lspci can help you to find the network device name

@dbeley
Copy link

dbeley commented Mar 13, 2021

Thanks a lot for those instructions!

I managed to install xubuntu on my Acer Aspire Switch 10, I didn't followed them exactly here are some notes if anybody need them:

  • I booted into a xubuntu USB key (followed the instructions)
  • I installed xubuntu normally (I did a clean install so wiped out my windows install)
  • I started my new installation with the grub of the USB key (my root was (hd0,gpt2) and my device was named /dev/mmcblk1p2)
  • From there I connected to the internet and installed the grub 32 bit (I needed to uninstall first the grub 64 bit package, then install the grub 32 bit ones, also the boot partition was already mounted)
  • Then followed exactly the same instructions to add the UEFI executable (with the BIOS/Secure Boot stuff)

It's quite similar to the instructions but they assume you're doing a dual boot, also I didn't bother and ran the installation with the booloader installation (didn't use ubiquity -b).

Everything is working properly and I have a clean partition scheme with only two partitions (1 boot 1 linux root)

@ScumCoder
Copy link

Hi guys,
for anyone still interested in this convertible - there is a way to get backlight working! It saves battery life in a big way (and your eyes too).
On Ubuntu 20.04 just download kernel from ubuntu mainline ppa v5.7 (maybee v5.6 is enough) (https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.7.9/).

Download custom dsdt img from Hans de Goede
(https://fedorapeople.org/~jwrdegoede/initramfs-acer-sw10-sw5-012-dsdt-overlay.img)

There is an extremely important thing that everyone planning to replace Windows with Linux on this tablet should know: this hack only works with BIOS v1.20, and it's impossible to update BIOS unless Windows is installed.
See the original article by Hans de Goede for details.
Unless you want to install Windows back just to update BIOS and finally get your backlight PWM working, update BIOS before installing Ubuntu.

@Kizoky
Copy link

Kizoky commented May 4, 2021

See the original article by Hans de Goede for details.

No wonder my WiFi didn't work... I tried different Linux distros until I finally gave up and reinstalled Windows so I could have internet connection with it
Gotta love Acer

@KeremKoksal
Copy link

Thanks for the guide

I've installed Linux Mint 20.3 Mate Edition without a problem.
You might want to read this guide too.

Follow the guide until Installing Ubuntu step

Installing Mint

  1. The laptop should automatically boot into GRUB
  2. In the GRUB menu choose "Try without installing"
  3. Open the terminal and run:
apt update
apt install grub-efi-ia32 grub-efi-ia32-bin
  1. Start install
  2. I've choosen a clean, auto install (erase and install)
  3. After install follow Adding GRUB to the bootloader step.
    You might want to enter bios one last time and rearrange the boot order. It take a lot of time to pass network boot :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment