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
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.
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.
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:
Manual
to have more flexibility over the partitions size, since the iOTA disk is very small.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.
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.
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
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
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.
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
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).
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 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>