Lenovo IdeaPad Y580

The Lenovo IdeaPad Y580 started shipping in June 2012. It is a fairly powerful machine, but it has its own compatibility issues. The purpose of this article is to help with setting up Arch Linux on this machine.

Contents

Installation

Install Arch on the machine if you have not done it already. Read Installation Guide for more information.

If you cannot get wireless working, you can use an ethernet connection with the help of the driver alx. This driver is not yet part of the Linux kernel, and that is why your ethernet card is not recognized at first. The links from QCA upstream alx source files works for current 3.8.x kernels.
This sources is found to work for both AR8161 and AR8162 ethernet devices.
Copy the tarball to a flash drive, boot the live cd, mount the flash drive, cd to the directory with the tarball and use:

After this, load the module (modprobe alx) and you should be able to get ethernet working easily.

The machine comes with Windows and some Lenovo partitions that may be important if you need to recover the Windows install.

In case you don't need to restore the machine to their original state, you can just delete the existing partition. Other way, backup the partions before erasing them

Also, this laptop can use UEFI. If you want to use it, you need to a GPT partition (see below).

UEFI

Even thought its easier to switch from UEFI to legacy mode BIOS in this laptop and install Arch Linux on mSATA SSD and without disturbing factory installed windows 8 located on the HDD, this section will guide you to install Arch Linux with UEFI. UEFI is complicated and so proper understanding is advised before you start.

To install Arch on the SSD drive, you need at least two partitions: one small (100 MB) boot partition, and another partition for /. To partition the drives, you can use cgdisk, which you can get by installing the package gpttools.

You should also create a third partition (with about 1GB) for EFI. This partition needs to be of EFI system type (code ef00 on gdisk) and it should be formatted as FAT32. If the partition is /dev/sda2, use:

mkfs.vfat -F32 /dev/sda3

After you have your base system up and running, install the grub 2 firmware:

pacman -S grub2-efi-x86_64

Mount the system partition at /boot/efi:

mkdir /boot/efi
mount -t vfat /dev/sda3 /boot/efi

Install grub2 efi app (grubx64.efi) to /boot/efi/EFI/arch_grub, and its modules to /boot/efi/EFI/grub/x86_64-efi:

Now comes the part where the grub2 page is not very clear. You need to add the system to the UEFI menu (the menu that shows up when you press F12 at boot). To do this, you need an UEFI shell. The Y580 does not come with a shell built in, but you can put one in a flash drive and boot from it. To do this, get a bootable flash drive, create a partition (1GB is enough) and format it as FAT32. Assuming that the partition is /dev/sdc1, type the following:

This will cause the ideapad UEFI firmware to automatically add a new boot option named "EFI HDD Device" which will by default come first.

Now reboot, go to the BIOS (press F2), enable UEFI and exit, then press F12 and the flash drive should show up in the menu (you want to choose the UEFI entry). Now you should be in the UEFI shell. There is quite a lot that you can do, but be careful because a mistake can seriously compromise the machine. This guide may be worth looking at: http://software.intel.com/en-us/articles/uefi-shell/

For now, you just need the command bcfg. To add Arch to the first entry of the menu, use:

bcfg boot add 0 fs1:\EFI\arch_grub\grubx64.efi "Arch Linux"

The command assumes that the system partition is installed on the first drive. This partition has the loader (grubx64.efi) and this little program is what loads grub2. If you add Arch to the first entry, you can boot to it without pressing F12.

To see the menu entries, use:

bcfg boot dump -v

To delete, say the 3rd entry:

bcfg boot rm 3

Once you are happy with the menu entries, reboot and you should be able to boot into Arch.

Dual-Boot With Windows 8

To avoid problems with the Arch install, put Windows on the second drive (this means that the second drive should also have a GUID partition table, since Windows 8 only works with one).

Windows 8 uses UEFI, so you can press F12 to choose between Arch and Windows, or just adjust this at the BIOS. Another option is to use the Windows program EasyBCD and add Arch to the Windows boot loader. In this example, Windows is going to be added to grub2.

To do this, from Arch, mount the Windows system partition and find its UUID:

The Y580 has a huge 1TB second drive, making it easy to install other OS. With grub2, you can install other distros, and then run grub-mkconfig to add the new entry. To make this easier, install os-prober so that grub2 can find other OS automatically (it does not work for Windows 8):

pacman -S os-prober

DISPLAY

Since the arrival of 3.7.X series kernel, this machine boots into black screen. You will have to add acpi_backlight=vendor to kernel command line to boot into a visible display. You can alternatively increase the screen brightness during every boot also, since the screen brightness is set to 0 wrongly by the kernel acpi by default.

NVIDIA Card

The Y580 uses NVIDIA's Optimus technology, which is not officially supported on Linux. A possible solution is to install Bumblebee (https://wiki.archlinux.org/index.php/Bumblebee) and to access the card with optirun. It seems this currently does not work with the Y580. However, you can still use CUDA, which is good if you use apps like Blender or if you develop CUDA C programs.

Lenovo machines (Y470, Y570, Y580) require a kernel patch for the correct acpi handling if you are using 3.8.X kernel. Kernel 3.8 will need a kernel patch. Linux Kernel 3.9 doesn't need any patch for proper acpi handling of the Nvidia card.

Nvidia Bumblebee support

In Linux currently bumblebee is the easiest option for a optimus like solution. For this laptop you will need a patched kernel as given in NVIDIA Card section, dkms-bbswitch, bumblee-nvidia, bumblebee-nvidia-utils package all available from AUR. After installation of these packages you will need to add your user name to bumblebee group.You have to start the bumblebeed service manually. A short guide given here to start bumblebee. After this setup you will have to edit the /etc/bumblebee/xorg.conf.nvidia Device option "ConnectedMonitor". You will have to switch from "FDP" to "CRT-0".
Make sure nouvea is blacklisted.

Driver

As of 10/24/2012, the newest driver is 304.60. To install it, you need a modified version of the package nvidia-utils from extra. The easiest way to do this is to install the package nvidia-utils-custom from the AUR: https://aur.archlinux.org/packages.php?ID=60991.

Edit the PKGBUILD of nvidia-utils. You may need to change the pkgver, the source item, and the md5sum. The most important thing is that nvidia-utils conflicts with libgl, but if you uninstall libgl, Gnome only starts in fallback mode (not sure about other DE). Because of this, you need to modify the PKGBUILD, so that it either does not install certain libraries (libglx.so, libGL.so) or that it installs them in another location. With the PKGBUILD below, those libraries are not installed (note the commented lines for the GLX extension module, and the empty 'conflicts' line).

CUDA Toolkit

Configurations

You need to load the acpi-handle-hack module first, then the nvidia module. Depending on your system, this may be enough, but it may be necessary to create devices for CUDA. One way to accomplish this is to add the following to your /etc/rc.local:

Testing it

The cuda package includes both the cuda-toolkit and sdk. Before testing it, reboot and it should be working. To compile and run deviceQuery from the sdk:

cd /opt/cuda/samples/1_Utilities/deviceQuery
make
./deviceQuery

Alternatively, you can compile your own code and run it. To compile, say hello.cu, use:

nvcc hello.cu

Now you can run the executable:

./a.out

If this works without errors, you are all set!

Other Distributions

1.The above setup not only works only with Arch Linux and it may be even easier with other distros. For example, with Ubuntu 12.04 or Linux Mint 13, install the acpi-handle-hack module and then get the official nvidia-current (no need to patch it) package:

apt-get install nvidia-current

2. For Debian wheezy you shall need the lenovo-hack as described above and additional packages from suwako repos which has dkms-bbswtich bumblebee and bumblebee-nvidia.The easiest option is available from Debian. No need to blacklist anything.

3. For Fedora, RHEL 6.X series and its clones the external repos from ncsu.edu with installation of non-free nvidia from their non-free repos at bumblebee-nvidia is necessary. Installing nvidia from rpmfusion shall break your X. You will have to edit the connected monitor section to "CRT-0" from "FDP" in Fedora 18. You will have to blacklist nouvea drivers at kernel command line to (xdriver=vesa nouveau.modeset=0 rd.driver.blacklist=nouveau).

4. Starting from 3.7.X kernel you will need to patch the kernel for proper acpi handling for any distro.