I recently needed a cheap 2 in 1 laptop, both for having a smaller lightweight astrophotography laptop, and for general usage. I chose the iOTA 360, currently on Amazon for less than 200£.

It was a bet, since looking around I couldn't find anyone claiming a successful GNU/Linux installation on it, but with some work I managed to get pretty much everything working.

The following guide should help you installing any recent version of Ubuntu on the iOTA 360.

A lot of these instructions/tools (including EFI 32bit bootloader, and Screen Rotator) can apply to other 2in1 laptops as well

Disclaimer

I can't take responsibility if any of the following instruction will damage in any way your hardware.

The following guide will assume basic knowledge about how to install an operating system, accessing your BIOS, partitioning your hard drive, and backing up your data. I suggest you backup your iOTA Windows installation before starting.

What's needed

  • The iOTA 360, obviously
  • USB drive as installation media (any size, as we're gonna use the minimal ISO).
  • An USB-ethernet adapter, or a mobile phone to use for tethering.

Create a Boot disk

As many 2 in 1 laptops, the iOTA 360 will require a 32bit EFI bootloader.

Ubuntu installation disk currently ships with a 64bit version, so you have to create your own.

Start by downloading a Minimal Ubuntu ISO. I couldn't get the full featured ISO to work, but you can install any Ubuntu flavour with the minimal ISO, given you have network access.

Firstly, you need to format your USB drive as FAT32, and extract the content of the minimal ISO inside it.

Then create a GRUB2 standalone EFI-32bit executable.

On an existing Linux installation, run the following command:

echo 'search --set=root -f /boot/grub/grub_ia32_standalone.efi'> /tmp/grub.cfg
echo 'configfile ${cmdpath}/grub.cfg' >> /tmp/grub.cfg
grub-mkstandalone -d /usr/lib/grub/i386-efi/ -O i386-efi --modules="efi_gop efi_uga part_gpt part_msdos" --locales="en@quot" --themes="" -o "grub_ia32_standalone.efi" "boot/grub/grub.cfg=/tmp/grub.cfg" -v

Now just copy the grub_ia32_standalone.efi file into the /boot/grub/ directory of your USB bootable drive.

Safetly remove it, and plug it into the (turned off) iOTA laptop.

Installation

Power on the iOTA, and keep pressing the DEL or ESC key until the EFI Bios starts.

Go to the last page, Save & Exit.

In the Boot Override section, start the UEFI: Built-in EFI Shell entry.

You will be presented with a DOS-like interface. You will need to find the right drive with your USB Installation media. In this example, it's fs3. Check the filesystem with the ls command to verify that you are on the right drive. Then, start the grub standalone executable.

fs3:
ls
# (among other things, you should see the "linux" file
cd boot
cd grub
grub_ia32_standalone.efi

Chose the install menu entry, and press Enter to boot the installation media.

You will now enter the Ubuntu Minimal installation wizard. You can install the system according to your preferences (refer to Ubuntu docs for how to do it).

Just keep in mind the following points:

  • You will need a network connection. The wifi won't work. You can either use a USB Ethernet adapter, or your mobile phone in USB tethering mode. If you do the latter, make sure your phone is connected to a Wifi network, since downloading an entire distribution with your mobile network will result in massive data consumption (and probably a massive bill as well).
  • The ubuntu minimal ISO can resize partitions for dual booting. Just choose Manual to have more flexibility over the partitions size, since the iOTA disk is very small.
  • I really recommend to clean up your windows partition and erase as much "garbage" (preinstalled apps, updates backups) as possible before repartitioning, in order to save as much space as possible.
  • You can install the flavour you prefer between Ubuntu, Kubuntu, Xubuntu, Lubuntu.. there are a few more options available. If you're looking for a personal recommandation, I'd go for either Kubuntu if you want a rich desktop environment, or Xubuntu if you prefer a light performant desktop. They need a bit more work than Ubuntu to get everything supported, but Ubuntu feels incredibly slow and slugghish, so avoid it if you can.

Desktop environments comparison

The predefined Ubuntu desktop environment, Gnome, has the main advantage of automatically supporting everything: onscreen keyboard, screen rotation (it still needs the orientation fix described below, but apart from that, no configuration requirement), and it has this tablet-like UI that in theory makes it the best choice for this kind of hybrid laptop/tablet (if you like it, at least, I don't particularly fancy it to be honest).

There's only one, huge problem: performance.

Gnome is very slow on its own, and on this cheap, low performance laptop really gives its worst. Using X11 instead of Wayland helps a bit, but it's still an awful user experience. I recommend moving on something else.

KDE feels much lighter than Gnome, although it's still slightly too heavy for this laptop. Neverthless it's a much sane choice than Gnome, a decent balance between features and performance.

XFCE gives its best on this kind of laptop, although you might miss a few goodies offered by the other two major desktop environments.

In both KDE and XFCE some things are not included or working by default, most importantly On Screen Keyboard and automatic screen rotation. In the following sections you can see how to enable and configure these features.

new: Budgie

It's a relatively new addition in Ubuntu, and it's quite fast, supports natively screen rotation and lots of other features. Still workingon getting the keyboard support, but it looks like the best choice as of Oct 2018.

Display rotation

Sensor daemon

If it's not installed by default, install iio-sensor-proxy, the daemon responsible for reading orientation via accelerometer. This is required for KDE and XFCE, but not for Gnome.

sudo apt install -y iio-sensor-proxy

Soundcard

First, you need to blacklist the ` module, by adding this to/etc/modprobe.d/blacklist.conf`:

blacklist snd_hdmi_lpe_audio

For newer kernels (4.18) you just need one more step, installing UCM files:

git clone https://github.com/John-Hsu/Nuvoton
cd Nuvoton/NAU88L24/Intel-cht-bsw/kernel-4.15.x
sudo make ucm

For older kernels you need to install the Nuvoton driver. You can either follow the instruction from upstream, or use dkms to reinstall the driver after each kernel update:

sudo apt install git build-essential dkms libelf-dev
git clone https://github.com/John-Hsu/Nuvoton

cat > Nuvoton/NAU88L24/Intel-cht-bsw/kernel-4.15.x/dkms.conf <<EOF
PACKAGE_NAME=nau88l24
PACKAGE_VERSION=1.0
BUILT_MODULE_NAME[0]="snd-soc-acpi-intel-match"
BUILT_MODULE_NAME[1]="snd-soc-sst-cht-bsw-nau8824"
MAKE="/usr/bin/make KVER=${kernelver}"
CLEAN="make clean"
DEST_MODULE_LOCATION[0]=/extra
DEST_MODULE_LOCATION[1]=/extra
REMAKE_INITRD=no
AUTOINSTALL=yes
EOF
sudo cp -av Nuvoton/NAU88L24/Intel-cht-bsw/kernel-4.15.x /usr/src/nau88l24-1.0

cd /usr/src/nau88l24-1.0
sudo make ucm
sudo dkms add nau88l24/1.0
sudo dkms build nau88l24/1.0
sudo dkms install nau88l24/1.0

Fix accel sensor orientation matrix

note: this step is required for all the desktop environments, including Gnome.

Current systemd version doesn't have data for the iOTA accel sensor mount (i.e. the orientation of the sensor against the raw readings). I already added. a Github PR for systemd, and should be in by default in a future version.

In the meantime, you need to configure your hardware local database.

Edit the file /etc/udev/hwdb.d/61-sensor-local.hwdb using your favourite editor, and enter the following content:

sensor:modalias:acpi:KIOX000A*:dmi:*svn*iOTA*:*pn*IOTA2210*
    ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1

Then, run the following command to update the hardware database:

sudo systemd-hwdb update

And reboot your system.

System keeps suspending

I got this error on newer systems. A workaround is to edit /etc/systemd/logind.conf and add the following line in the Login section:

HandleLidSwitch=ignore

Screen Rotator

This step is required for XFCE and KDE. Gnome has its own screen rotation daemon.

I wrote Screen Rotator, a little utility listening for accel sensor orientation change events that rotates the screen accordingly.

It is loosely inspired by kded rotator, but it's less hacky, since it uses Xi/Xrandr API instead of calling a shell script for executing rotation.

Just execute the instructions on the repository page to install it on your system (hopefully it might be already preinstalled in the future).

On Screen Keyboard

This step is required for XFCE and KDE. Gnome has its own on screen keyboard.

There are various on screen keyboards available. The one that seems most reliable is Onboard.

sudo apt install -y onboard

On my system, I configured it to start hidden, dock to the screen edge. The keyboard will be shown by a TouchEgg shortcut (see next section).

You can also enable the on screen keyboard both on lightdm and sddm.

For sddm, you can set the following in /etc/sddm.conf:

[General]
InputMethod=qtvirtualkeyboard

At the moment, though, it will be enable only after login (on the lock screen) until version 0.17 will be available in Ubuntu Artful.

It is however possible to install the 0.17 deb file for Bionic Beaver that you can find in the SDDM ppa page.

Touchegg

Touchegg is a Qt daemon application that allows you to map touchscreen gestures to certain actions.

It is in the main ubuntu repository, so you can install it by just typing

sudo apt install touchegg

To configure it, you can refer to Touchegg wiki and Arch Linux wiki entry.

Just keep in mind that it not very reliable, and it can create some conflicts in handling touch events.

This is my configuration anyway.

It supports 4 gestures: swipe UP/DOWN to show/hide the Onboard keyboard, swipe LEFT/RIGHT to change virtual desktop.

<touchégg>
    <settings>
        <property name="composed_gestures_time">0</property>
    </settings>
    <application name="All">
        <gesture type="DRAG" fingers="3" direction="LEFT">
            <action type="CHANGE_DESKTOP">PREVIOUS</action>
        </gesture>

        <gesture type="DRAG" fingers="3" direction="RIGHT">                                                                                                             
            <action type="CHANGE_DESKTOP">NEXT</action>                                                                                                                 
        </gesture>                                                                                                                                                      

        <gesture type="DRAG" fingers="3" direction="UP">                                                                                                                
            <action type="RUN_COMMAND">qdbus org.onboard.Onboard /org/onboard/Onboard/Keyboard Show</action>                                                            
        </gesture>                                                                                                                                                      

         <gesture type="DRAG" fingers="3" direction="DOWN">                                                                                                             
            <action type="RUN_COMMAND">qdbus org.onboard.Onboard /org/onboard/Onboard/Keyboard Hide</action>                                                            
        </gesture>                                                                                                                                                      
    </application>                                                                                                                                                      
</touchégg> 

Ongoing issues

  • Bluetooth is not available as well.
  • Wireless can be a bit instable from time to time
  • Screen rotation in KDE can cause some fonts issues.

Previous Post Next Post