Updated on June 14, 2016
Installing Ubuntu 16.04 (Daily) on a Lenovo Yoga 900
Update 2 – 2016-06-13 (see previous update below)
Some have pointed out that this post is well trafficked for installing Ubuntu 16.04 on the Yoga 900. I appreciate this and I hope that this information comes in handy. Please be aware that this post was created for my own reference as well as to help others who might stumble upon it. It’s here so that you can comment below and review the help provided by other generous commenters who are having similar issues. Perhaps they’ll have solved your problem.
I felt it necessary to update this because some people are bringing up new issues that weren’t around when I created this article. Apparently there is a new version of the Yoga 900 which uses an NVMe SSD which may not work well with 16.04.
From user D.S.:
The SSD-problem seems to affect only recent revisions of the device (Yoga 900 13ISK2, 13ISK Business Edition and 12ISK) where the SSD is connected through NVMe.
If you are a lucky owner of the first version of the device (13ISK), you should not have any problems installing Ubuntu 16.04.
If the problem is related to the NVMe drive then there might be some solutions online:
Unable to install GRUB in /dev/nvme
Setting up an NVMe SSD on Ubuntu 14.04 LTS (related to 14.04, but information might transfer to 16.04)
Ubuntu 15.10 does not boot on Intel NUC6i3 with Samsung 950 Pro PCIe NVME SSD
Please feel free to comment below or show support to another comment that may have helped you.
The Linux 4.5 kernel fixes the issues in this post. Please follow the instructions in this post to install the latest Linux kernel for Ubuntu. You may read below if you are interested in installing a custom kernel for Ubuntu.
Installing a custom Kernel
The Lenovo Yoga 900 is an ultrabook that is based on the popular Yoga 3, which evolved from the design of the Yoga 2 model. Essentially, the offering between each model are very similar, specifically a touchscreen, convertible format from laptop to tablet, Bluetooth, and a smooth touch pad, to name a few.
The issue with updated designs, from the Yoga 2 which worked flawlessly with Ubuntu 15.04 to the Yoga 3 and 900, is that the manufacturer inevitably decides to use different hardware for each model. This is good for power consumption, or for the design of the device, but it tends to create a period of time where the Linux kernel doesn’t have support for the newest hardware. What’s worse is that the manufacturer of each component doesn’t always offer Linux drivers, or feel the need to contribute to Linux. Luckily there are some excellent kernel developers that are working on fixing the problems as they see them.
With that said, here are some instructions on setting up the Yoga 900 with Ubuntu 16.04 and Linux 4.4rc5 with custom driver changes. You will need a mouse and USB ethernet dongle or USB drive to transfer files from another computer.
First, download Ubuntu 16.04 Daily. Installation can be done by USB by first making sure the computer is off, then pressing the small round button next to the power button. This starts the UEFI boot screen, allowing you to choose the USB device to boot from.
The installation will not be able to download updates unless you use a USB Ethernet dongle.
You can download the Linux 4.4rc5 kernel, with a USB Ethernet dongle, using the instructions provided on the following website. If you do not have an ethernet dongle, you may download the files to a USB drive and then perform any command after the wget section.
The rc5 kernel works, but you may use any kernel beyond rc5.
Once you have completed the installation, you will have networking and Bluetooth working, but your touchscreen and touchpad will still be unusable.
Create a custom kernel
This part gets a little tricky, so I will attempt to write a step-by-step process that’s easy to follow. If you follow these instructions precisely then the kernel installation will work. You can also follow the instructions from http://www.cyberciti.biz/faq/debian-ubuntu-building-installing-a-custom-linux-kernel/
Please note that anything following a $ represents a command that you would write in the terminal. Do not include the $ when typing the command.
- Clone the Linux project
$ git clone https://github.com/torvalds/linux.git
- cd into the linux directory
$ cd linux
- Checkout the desired tag
$ git checkout v4.4-rc5
- Edit the appropriate file to enable the touchpad and touchscreen.
$ gedit drivers/i2c/busses/i2c-designware-platdrv.c
- Add the following line near lines 113-120
dev->sda_hold_time = 30;
- The above line should be after the line:
dw_i2c_acpi_params(pdev, "FMCN", &dev->fs_hcnt, &dev->fs_lcnt, &dev->sda_hold_time);
- The above line should be after the line:
Configure the new custom kernel
- First, install required packages
$ sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils kernel-package
- Copy your existing Linux kernel config file
$ cp /boot/config-$(uname -r) .config
- Configure the new kernel
$ make menuconfig
- Compile the Linux kernel. First you need to clean the source tree and reset the kernel-package parameters.
$ make-kpkg clean
- Now, you can compile the kernel, run (–revision is whatever you want it to be).
$ fakeroot make-kpkg --initrd --revision=1.0.CUSTOM kernel_image kernel_headers
The generated files will be created one directory above. You will need to cd to that directory before running the next commands.
$ cd ..
Install the new kernel
Type the following dpkg command to install a custom kernel on your system (make sure the file names match your build):
$ sudo dpkg -i linux-headers-4.4.0-rc5+_1.0.CUSTOM_amd64.deb //ignore any error message about missing kernel headers here $ sudo dpkg -i linux-image-4.4.0-rc5+_1.0.CUSTOM_amd64.deb
After installing the custom kernel you will need to reboot, but you may still be using the old kernel. Open the terminal again and type the following command to see which kernel is currently in use:
$ uname -r
If the kernel listed does not say CUSTOM in it then use the next commands to remove the default kernel and upgrade the new kernel to the default position.
- Get a list of all installed kernels
$ dpkg -l linux-image-\*
- Remove extra kernels which may be listed ABOVE your custom kernel (replace the kernels listed below with the ones from your list). You do not need to worry about kernels below the custom kernel.
$ sudo apt-get autoremove linux-image-4.4.0-040400rc4-generic linux-image-4.4.0-040400rc5-generic linux-image-4.4
- Update grub to use the custom kernel on the next reboot.
$ sudo update-grub
Now, reboot the machine and you’re done.
There are still a few minor issues after this process, but that’s the cost of using an alpha desktop and pre-release kernel with customizations.
- Sometimes the computer does not wake from sleep. This is random and the only way to fix this is to hard-reset by pressing and holding the power button for 10 seconds.
- The mouse might not work after waking from standby, press Ctrl-Alt-F1, then Ctrl-Alt-F7 to fix this.