Difference between revisions of "Lenovo IdeaPad Y580"

From ArchWiki
Jump to: navigation, search
(DISPLAY: : original author (https://bbs.archlinux.org/viewtopic.php?pid=1127892#p1127892) didn't care to explain any of this laptop's "compatibility issues" except those CUDA-related)
(13 intermediate revisions by 2 users not shown)
Line 1: Line 1:
==DISPLAY==
+
[[Category:Lenovo]]
As of the arrival of the 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.
+
The Lenovo IdeaPad Y580 is for the most part compatible with Arch Linux. The wireless and wired chip, Bluetooth, and graphics are all supported. The only troublesome step is enabling graphics; see the sections below for further info.
  
As of September 2013, this doesn't seem to be an issue anymore, at least not on kernel 3.10.
+
===Intel graphics===
  
===Intel Card===
+
This machine has two video cards, an Intel HD 4000 integrated chip and a discrete Nvidia GTX 660M.
  
This machine has two video cards, explained in detail below
+
If you only wish to use the Intel chip, for improved battery life, lower temperatures, or less complexity, you can simply install {{Pkg|xf86-video-intel}} and use the Intel driver. This will leave the NVIDIA card disabled, but it will still use power. To completely disable the NVIDIA card, enter the Y580's BIOS and on the "Configuration" tab, change "Graphic Device" from "Switchable Graphic" to "UMA Graphic". If these options are not there, you may need to update the BIOS.
{{bc|<nowiki>
+
$ lspci | grep VGA
+
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
+
01:00.0 VGA compatible controller: NVIDIA Corporation GK107M [GeForce GTX 660M] (rev a1)
+
</nowiki>}}
+
  
In order to get the machine working for basic purposes, simply install xf86-video-intel and use the intel driver. You can leave the nvidia card disabled (and powered down?) just by not installing nvidia-304xx.
+
===NVIDIA graphics===
  
===NVIDIA Card===
+
The Intel card cannot be disabled in BIOS, so Optimus must be configured in order to access the NVIDIA graphics. See the wiki page on [[Optimus]] for an in-depth description of the process.
 
+
The Y580 uses NVIDIA's Optimus technology, which is not officially supported on Linux yet. A possible solution is to install Bumblebee (https://wiki.archlinux.org/index.php/Bumblebee) and to access the card with optirun. However, you can still use CUDA, which is good if you use apps like Blender or if you develop CUDA C programs.
+
 
+
===Nvidia Bumblebee support===
+
In Linux currently [https://wiki.archlinux.org/index.php/Bumblebee bumblebee ] is the easiest option for a optimus like solution. For this laptop you will need bbswitch, Bumblebee, nvidia from official Arch repos. 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 [https://wiki.archlinux.org/index.php/Bumblebee#Bumblebee:_Optimus_for_Linux bumblebee].
+
 
+
===Driver===
+
 
+
To compile and run CUDA programs, you need a NVIDIA driver and the cuda-toolkit. Any driver with version 295.59 or higher will work.
+
{{Note|The only exception being the 302.17}}
+
 
+
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.
+
 
+
Alternatively, you can use ABS and patch the package yourself. If you are not familiar with the process, read the wiki: https://wiki.archlinux.org/index.php/Arch_Build_System. The exact way to rebuild a package depends on your own preferences, one way is to download the source code (in this case, the driver, obtained here: ftp://download.nvidia.com/XFree86/Linux-x86_64/304.60/NVIDIA-Linux-x86_64-304.60-no-compat32.run), copy it to the build directory, edit the PKGBUILD, and then run makepkg.
+
 
+
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).
+
 
+
===nvidia-utils PKGBUILD===
+
{{bc|<nowiki>
+
# $Id$
+
# Maintainer: Thomas Baechler <thomas@archlinux.org>
+
# Contributor: James Rayner <iphitus@gmail.com>
+
pkgbase=nvidia-utils
+
pkgname=('nvidia-utils' 'opencl-nvidia')
+
pkgver=304.60
+
pkgrel=1
+
arch=('i686' 'x86_64')
+
url="http://www.nvidia.com/"
+
license=('custom')
+
options=('!strip')
+
 
+
if [ "$CARCH" = "i686" ]; then
+
    _arch='x86'
+
    _pkg="NVIDIA-Linux-${_arch}-${pkgver}"
+
    source=("ftp://download.nvidia.com/XFree86/Linux-${_arch}/${pkgver}/${_pkg}.run")
+
    md5sums=('42b9887076b2ebcf1af5ee13bc332ccb')
+
elif [ "$CARCH" = "x86_64" ]; then
+
    _arch='x86_64'
+
    _pkg="NVIDIA-Linux-${_arch}-${pkgver}-no-compat32"
+
    source=("ftp://download.nvidia.com/XFree86/Linux-${_arch}/${pkgver}/${_pkg}.run")
+
    md5sums=('7248399a125808e3bbc9c66da99a098d')
+
fi
+
 
+
create_links() {
+
    # create soname links
+
    while read -d '' _lib; do
+
        _soname="$(dirname "${_lib}")/$(readelf -d "${_lib}" | sed -nr 's/.*Library soname: \[(.*)\].*/\1/p')"
+
        [[ -e "${_soname}" ]] || ln -s "$(basename "${_lib}")" "${_soname}"
+
        [[ -e "${_soname/.[0-9]*/}" ]] || ln -s "$(basename "${_soname}")" "${_soname/.[0-9]*/}"
+
    done < <(find "${pkgdir}" -type f -name '*.so*' -print0)
+
}
+
 
+
build() {
+
    cd "${srcdir}"
+
    sh "${_pkg}.run" --extract-only
+
}
+
 
+
package_opencl-nvidia() {
+
    pkgdesc="OpenCL implemention for NVIDIA"
+
    depends=('libcl' 'zlib')
+
    optdepends=('opencl-headers: headers necessary for OpenCL development')
+
    cd "${srcdir}/${_pkg}"
+
 
+
    # OpenCL
+
    install -D -m644 nvidia.icd "${pkgdir}/etc/OpenCL/vendors/nvidia.icd"
+
    install -D -m755 "libnvidia-compiler.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-compiler.so.${pkgver}"
+
    install -D -m755 "libnvidia-opencl.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-opencl.so.${pkgver}"
+
 
+
    create_links
+
}
+
 
+
package_nvidia-utils() {
+
    pkgdesc="NVIDIA drivers utilities and libraries."
+
    depends=('xorg-server' 'libxvmc')
+
    optdepends=('gtk2: nvidia-settings' 'pkg-config: nvidia-xconfig'
+
                'opencl-nvidia: OpenCL support')
+
    conflicts=('')
+
    provides=('libgl')
+
    cd "${srcdir}/${_pkg}"
+
 
+
    # X driver
+
    install -D -m755 nvidia_drv.so "${pkgdir}/usr/lib/xorg/modules/drivers/nvidia_drv.so"
+
    # GLX extension module for X
+
    #install -D -m755 "libglx.so.${pkgver}" "${pkgdir}/usr/lib/xorg/modules/extensions/libglx.so.${pkgver}"
+
    #ln -s "libglx.so.${pkgver}" "${pkgdir}/usr/lib/xorg/modules/extensions/libglx.so" # X does not find glx otherwise
+
    # OpenGL library
+
    #install -D -m755 "libGL.so.${pkgver}" "${pkgdir}/usr/lib/libGL.so.${pkgver}"
+
    # OpenGL core library
+
    install -D -m755 "libnvidia-glcore.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-glcore.so.${pkgver}"
+
    # XvMC
+
    install -D -m644 libXvMCNVIDIA.a "${pkgdir}/usr/lib/libXvMCNVIDIA.a"
+
    install -D -m755 "libXvMCNVIDIA.so.${pkgver}" "${pkgdir}/usr/lib/libXvMCNVIDIA.so.${pkgver}"
+
    # VDPAU
+
    install -D -m755 "libvdpau_nvidia.so.${pkgver}" "${pkgdir}/usr/lib/vdpau/libvdpau_nvidia.so.${pkgver}"
+
    # nvidia-tls library
+
    install -D -m755 "tls/libnvidia-tls.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-tls.so.${pkgver}"
+
    install -D -m755 "libnvidia-cfg.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-cfg.so.${pkgver}"
+
 
+
    install -D -m755 "libnvidia-ml.so.${pkgver}" "${pkgdir}/usr/lib/libnvidia-ml.so.${pkgver}"
+
    # CUDA
+
    install -D -m755 "libcuda.so.${pkgver}" "${pkgdir}/usr/lib/libcuda.so.${pkgver}"
+
    install -D -m755 "libnvcuvid.so.${pkgver}" "${pkgdir}/usr/lib/libnvcuvid.so.${pkgver}"
+
 
+
    # nvidia-xconfig
+
    install -D -m755 nvidia-xconfig "${pkgdir}/usr/bin/nvidia-xconfig"
+
    install -D -m644 nvidia-xconfig.1.gz "${pkgdir}/usr/share/man/man1/nvidia-xconfig.1.gz"
+
    # nvidia-settings
+
    install -D -m755 nvidia-settings "${pkgdir}/usr/bin/nvidia-settings"
+
    install -D -m644 nvidia-settings.1.gz "${pkgdir}/usr/share/man/man1/nvidia-settings.1.gz"
+
    install -D -m644 nvidia-settings.desktop "${pkgdir}/usr/share/applications/nvidia-settings.desktop"
+
    install -D -m644 nvidia-settings.png "${pkgdir}/usr/share/pixmaps/nvidia-settings.png"
+
    sed -e 's:__UTILS_PATH__:/usr/bin:' -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' -i "${pkgdir}/usr/share/applications/nvidia-settings.desktop"
+
    # nvidia-bug-report
+
    install -D -m755 nvidia-bug-report.sh "${pkgdir}/usr/bin/nvidia-bug-report.sh"
+
    # nvidia-smi
+
    install -D -m755 nvidia-smi "${pkgdir}/usr/bin/nvidia-smi"
+
    install -D -m644 nvidia-smi.1.gz "${pkgdir}/usr/share/man/man1/nvidia-smi.1.gz"
+
 
+
    install -D -m644 LICENSE "${pkgdir}/usr/share/licenses/nvidia/LICENSE"
+
    ln -s nvidia "${pkgdir}/usr/share/licenses/nvidia-utils"
+
    install -D -m644 README.txt "${pkgdir}/usr/share/doc/nvidia/README"
+
    install -D -m644 NVIDIA_Changelog "${pkgdir}/usr/share/doc/nvidia/NVIDIA_Changelog"
+
    ln -s nvidia "${pkgdir}/usr/share/doc/nvidia-utils"
+
 
+
    create_links
+
}
+
 
+
</nowiki>}}
+
 
+
It is not necessary to patch other packages. If you want, you can also install nvidia-custom (https://aur.archlinux.org/packages.php?ID=60981) and opencl-nvidia-custom (https://aur.archlinux.org/packages.php?ID=61443) from the AUR, but they are not much different from the official ones (nvidia and opencl-nvidia from extra).
+
 
+
If you rebuild nvidia-utils yourself, you may want to add it to the IgnorePkg line of your /etc/pacman.conf, so that the next system update does not break your system.
+
 
+
===CUDA Toolkit===
+
 
+
Install the package from community (https://www.archlinux.org/packages/community/x86_64/cuda/).
+
 
+
===Configurations===
+
 
+
Since Linux 3.9, the acpi-handle-hack module is no longer necessary for the Nvidia video adapter to get recognized. Depending on your system, just loading the nvidia module 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:
+
 
+
{{bc|<nowiki>
+
/sbin/modprobe nvidia
+
 
+
if [ "$?" -eq 0 ]; then
+
 
+
# Count the number of NVIDIA controllers found.
+
 
+
N3D=`lspci | grep -i NVIDIA | grep "3D controller" | wc -l`
+
 
+
NVGA=`lspci | grep -i NVIDIA | grep "VGA compatible controller" | wc -l`
+
 
+
N=`expr $N3D + $NVGA - 1`
+
 
+
for i in `seq 0 $N`; do
+
mknod -m 666 /dev/nvidia$i c 195 $i
+
done
+
 
+
mknod -m 666 /dev/nvidiactl c 195 255
+
else
+
exit 1
+
fi
+
</nowiki>}}
+
 
+
If you are using systemd, you can get the /etc/rc.local loaded at boot by adding a new service. Create the following file:
+
 
+
{{bc|1=
+
#/etc/systemd/system/rc-local.service
+
 
+
[Unit]
+
Description=/etc/rc.local Compatibility
+
 
+
[Service]
+
Type=oneshot
+
ExecStart=/etc/rc.local
+
TimeoutSec=0
+
StandardInput=tty
+
RemainAfterExit=yes
+
 
+
[Install]
+
WantedBy=multi-user.target
+
}}
+
 
+
Then make this service load at boot with:
+
 
+
systemctl enable rc-local.service
+
 
+
===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!
+

Revision as of 02:56, 21 October 2013

The Lenovo IdeaPad Y580 is for the most part compatible with Arch Linux. The wireless and wired chip, Bluetooth, and graphics are all supported. The only troublesome step is enabling graphics; see the sections below for further info.

Intel graphics

This machine has two video cards, an Intel HD 4000 integrated chip and a discrete Nvidia GTX 660M.

If you only wish to use the Intel chip, for improved battery life, lower temperatures, or less complexity, you can simply install xf86-video-intel and use the Intel driver. This will leave the NVIDIA card disabled, but it will still use power. To completely disable the NVIDIA card, enter the Y580's BIOS and on the "Configuration" tab, change "Graphic Device" from "Switchable Graphic" to "UMA Graphic". If these options are not there, you may need to update the BIOS.

NVIDIA graphics

The Intel card cannot be disabled in BIOS, so Optimus must be configured in order to access the NVIDIA graphics. See the wiki page on Optimus for an in-depth description of the process.