Tag Archive : nvidia

/ nvidia

NVidia Optimus Support for Slackware

December 5, 2015 | Article | No Comments

Nvidia Optimus

Some newer laptops nowadays, specifically for nVidia graphic cards, come with what is known as “nVidia Optimus” technology. This technology is an hybrid of nVidia and Intel graphic processing unit (GPU). In primary, there are no two separate GPUs in one machine. This technology is like a switching syQstem between those two. Optimus uses nVidia graphics for performance and Intel graphics for power saving during basic usage. Unfortunately the closed source proprietary drivers do not offer a means for adjusting or switching between the two, unlike those from Advanced Micro Devices Inc. (AMD).

An open source project called Bumblebee has emerged and aims to fix this problem. However, Bumblebee isn’t alone. nVidia developers do assist the Bumblebee project by fixing bugs in the closed source proprietary drivers that Bumblebee developers cannot touch.

In this article we will discuss about Bumblebee and installation on Linux, especially Slackware. For this article I use following:

  1. Slackware64 14.0 with multilib (although any slackware is OK).
  2. Bumblebee packages.

Bumblebee and Relation to X11 Program

Using Bumblebee is not relating to any use of X11, KDE, Compiz-Gusion, Blender, Adobe Flash Player, etc. The Intel graphics provides enough 3-D acceleration (and sometimes has better performance) for those programs to work smoothly without having to use the nVidia GPU. In addition to the programs working efficiently and smoothly, you’re saving power.

Bumblebee is used to switch between the nVidia GPU and the Intel GPU.

Installation


Getting the SlackBuilds

Mostly slackbuilds packages provided hasrequirements for Bumblebee on github. Check which directory we are in first, as they will be downloaded to that directory. If you are ready, then do these:

git clone https://github.com/jgeboski/Bumblebee-SlackBuilds.git
cd Bumblebee-SlackBuilds

Another option is download the full tarball containing the SlackBuilds instead:

wget --content-disposition https://github.com/jgeboski/Bumblebee-SlackBuilds/tarball/master
tar xf jgeboski-Bumblebee-SlackBuilds-<changing hexadecimal>    # Tab completion is helpful.
cd jgeboski-Bumblebee-SlackBuilds

Getting the Dependencies

The dependencies, as with all SlackBuilds, must be downloaded manually and placed into their respective directories. However the SLACKBUILDS.TXT file does give links for the downloads as well as their MD5SUMs to make sure the files were not corrupt. You can use the provided script to download them and check them against their MD5SUM for corruption, like this:
./download.sh

Preparing the Environment

There are a few things you need to do before we begin. First off, we need to have a specific group of users who are going to be allowed access to Bumblebee technology. For the sake of simplicity, we’ll call this group “bumblebee”. In addition to the new group, we need to add the users that are allowed to access bumblebee technology:
groupadd bumblebee
usermod -G bumblebee -a <USERNAME>

Installing the Dependencies

Some SlackBuilds also offer a COMPAT32 option if you’re running a multilib system. In the following examples, we build it with and without 32-bit compatibility. Use the one you desire. Keep these in mind when building the specified package.1. Build and install: libjpeg-turbo (32-bit compatibility available)

cd libjpeg-turbo                                   # You don't actually need to ''cd'' as root, but who wants to ''su'' all the time?
./libjpeg-turbo.SlackBuild                         # This does not build with 32-bit compatibility.
upgradepkg --install-new libjpeg-turbo-*.tgz

If you do wish to build with 32-bit compatibility, add COMPAT32=yes before executing the script as so:

COMPAT32=yes ./libjpeg-turbo.SlackBuild
libjpeg-turbo installs in /opt because otherwise it can overwrite some things from the original libjpeg.

Continue the same steps as above for the other programs in the Bumblebee-SlackBuilds directory.

2. Build and install: VirtualGL (32-bit compatibility available)

cd ../VirtualGL
./VirtualGL.SlackBuild
upgradepkg --install-new VirtualGL-*.tgz

I think you’re starting to get the idea now…

COMPAT32=yes ./VirtualGL.SlackBuild
# Only for 32-bit compatible binaries and libraries on an x86_64 based system.
There are two option for the NVidia card driver: nouveau or nvidia proprietary driver.
If you want to use nVidia drivers, then you must not use nouveau. Then do following:
Remove nouveau by installing xf86-video-nouveau-blacklist from /extra, or blacklisting nouveau manually.
Some driver required specific kernel version (ex: NVIDIA-Linux-x86_64-313.18.run need version of higher than 3.3 and lower than 3.8). If you don’t have those kernel, It would be better if you compile it first.

1. Build and install: nvidia-bumblebee

cd ../nvidia-bumblebee
./nvidia-bumblebee.SlackBuild
upgradepkg --install-new nvidia-bumblebee-*.tgz
COMPAT32=yes ./nvidia-bumblebee.SlackBuild 
# Only for 32-bit compatible binaries and libraries on an x86_64 based system.

2. Build and install: nvidia-kernel

cd ../nvidia-kernel
./nvidia-kernel.SlackBuild
upgradepkg --install-new nvidia-kernel-*.tgz
COMPAT32=yes ./nvidia-kernel.SlackBuild 
# Only for 32-bit compatible binaries and libraries on an x86_64 based system.

Now that we have those 32-bit compatible and optional packages out of the way, let us build what remains.3. Build and install: bbswitch, libbsd and also bumblebeed in order as you go.

cd../bbswitch
./bbswitch.SlackBuild
upgradepkg --install-new bbswitch-*.tgz
cd ../libbsd
./libbsd.SlackBuild
upgradepkg --install-new libbsd-*.tgz
cd ../bumblebeed
./bumblebeed.SlackBuild
upgradepkg --install-new bumblebee-*.tgz

Post-Installation

If you have pass the installation setup, then you have install it. Now what must we do? The bumblebeed package provided us with an rc.bumblebeed script in /etc/rc.d where the other startup scripts are also located. Now, we must make sure that this script executable and, if you so desire, start it!

chmod +x /etc/rc.d/rc.bumblebeed
/etc/rc.d/rc.bumblebeed start

If you used the proprietary nvidia kernel blob, it places itself into

/lib/modules/$( uname -r )/

so if you rebuild the kernel, you will have to reinstall the nvidia-bumblebee package. This also applies to bbswitch which is also kernel-dependent.

If you would like bumblebee to autostart with the system, you can add the following to /etc/rc.d/rc.local:

if [ -x /etc/rc.d/rc.bumblebeed ]; then
  /etc/rc.d/rc.bumblebeed start
fi

You can even go a step further by having bumblebeed stop with your system by adding the following lines to /etc/rc.d/rc.local_shutdown. You can create this file if it does not exist.

if [ -x /etc/rc.d/rc.bumblebeed ]; then
  /etc/rc.d/rc.bumblebeed stop
fi

Done! Now let’s try it out! Any program we want using the nVidia graphics card can be run with “optirun” like this:

optirun glxspheres

Now we can execute the program directly without adding “optirun” at the beginning:

wine ~/.wine/drive_c/Program_Files/Starcraft\ 2/Starcraft\ 2.exe

Editing the Configuration Files

A few general /etc/bumblee/bumblebee.conf configuration edits (likely suited for all):
# If you added your user account to a different user group than "bumblebee" at the start, make sure to change the "ServerGroup=" line accordingly.
# Here we set it to "ImAllergicToBees":
ServerGroup=ImAllergicToBees

# Perhaps you don't like using Display :8 for X11. We can change that too, in this example we set it to 3:
VirtualDisplay=:3

# I want to specify my driver that bumblebee will use by default. Here we show nouveau, but you can easily replace it with "nvidia".
# For the rest of this small section, we'll be using nouveau for simplification.
Driver=nouveau

# Don't forget to add their respective lines as well.
KernelDriver=nouveau
Module=nouveau

Troubleshoot

Some report that they can’t run optirun properly. There might be some cause of this. In this section we will discuss about some known case and how to solve it. First run optirun like this:

optirun -vv --debug glxspheres

This command will give us more information.

[ 1143.518414] [DEBUG]Reading file: /etc/bumblebee/bumblebee.conf
[ 1143.691489] [DEBUG]optirun version 3.0.1 starting...
[ 1143.691545] [DEBUG]Active configuration:
[ 1143.691579] [DEBUG] bumblebeed config file: /etc/bumblebee/bumblebee.conf
[ 1143.691610] [DEBUG] X display: ebug
[ 1143.691628] [DEBUG] LD_LIBRARY_PATH: /usr/lib/nvidia-current:/usr/lib32/nvidia-current
[ 1143.691647] [DEBUG] Socket path: /var/run/bumblebee.socket
[ 1143.691671] [DEBUG] VGL Compression: proxy
[ 1144.104309] [INFO]Response: No - error: <a href="https://github.com/Bumblebee-Project/Bumblebee/issues/EE">XORG</a>NVIDIA(0): Failed to assign any connected display devices to X screen 0

[ 1144.104353] [ERROR]Cannot access secondary GPU - error: <a href="https://github.com/Bumblebee-Project/Bumblebee/issues/EE">XORG</a> NVIDIA(0): Failed to assign any connected display devices to X screen 0

[ 1144.104379] [DEBUG]Socket closed.
[ 1144.104404] [ERROR]Aborting because fallback start is disabled.
[ 1144.104419] [DEBUG]Killing all remaining processes.

If you encounter something like that, there are two thing you must look:

  1. Make sure you have assign driver on /etc/X11/xorg.conf. Replace any occurance of nouveau driver with nvidia
  2. Check your /var/log/Xorg.8.log and search for CRT or DFP. In many case you will encounter CRT. If so, edit /etc/bumblebee/xorg.conf.nvidia. Found line like this: Option “ConnectedMonitor” “DFP”. Now change “DFP” with “CRT”.

NVIDIA is one of graphic card producer (beside AMD/ATI) for Personal Computer. An open source graphic driver is available with name nouveau (and enabled by default if you use NVidia card). How if you want to use NVidia’s proprietary driver? Yes you can.
This article will discuss about installing NVIDIA graphic driver for Slackware Linux. In this article I use:
  1. Slackware64 14.0
  2. NVidia driver

There are two ways to accomplish: install via SlackBuilds.org and run nvidia proprietary driver. Both of them are OK.

Installation via SlackBuilds.org

There are three packages at Slackbuilds.org for functioning nVIDIA driver. They are: nvidia-kernel packages which builds the kernel module, the nvidia-driver packages which builds the X.Org driver and contains the OpenGL implementation as well as the COMPAT32 libraries for multilib Slackware64 system and libvdpau package as requirement of nvidia-driver package.

”nouveau” Module Removal

Before we install the driver, we must make sure nouveau module is not loaded. As stated before, this module is open source implementation for NVidia graphic cards. Yet, to use NVidia propietary driver we must disable nouveau so that both of them are not conflicting each other. Failure to do so may result in a startx error of “ERROR: could not insert ‘nvidia’: No such device”.

There are two ways to blacklist nouveau driver: installing xf86-video-nouveau-blacklist package from extra directory of Slackware64 on the installation CD/DVD. You can also obtain it by Slackware mirror, or using slackpkg utility.

If you choose to install xf86-video-nouveau-blacklist, you can simply invoke this command on the same directory as the package:

upgradepkg --install-new xf86-video-nouveau-blacklist-*.txz

Otherwise you can do it by creating a new file on /etc/modprobe.d :

disable nouveau
options nouveau modeset=0

And name it as disable_nouveau.conf.

SlackBuilding

If you who choose using slackbuild, there are currently two ways to install SlackBuild:

  1. Downloading the appropriate build scripts manually from SlackBuilds.org and following the procedure.
  2. Using sbopkg which automates downloading the needed source and compilation of multiple packages.

Once the packages have been installed, server can be started with full GPU support.

NVIDIA Binary

For you who want to install using binary driver provided by NVIDIA you can follow these steps.
To obtain the driver, you can visit following url. The name of the driver package would be something like “NVIDIA-Linux-ARCH-VERSION.run” where ARC is the computer architecture (x86 / x86_64).
If you are using Slackware64 (64-bit system with or without multilib support) you should download the “Linux x86_64/AMD64/EM64T” driver package (in our case), while 32-bit Slackware needs the “Linux x86/IA32” driver
While it is not always true, but your safest choice would be use the “Latest Long Lived Branch version”. In some case, you might want to choose ”Latest Short Lived Branch version” instead.
Older legacy drivers are available as well for graphics cards which are no longer current. When you select a driver, a list of compatible GPUs will be displayed. Once you have determined the correct driver, the license will need to be accepted and the file saved in an accessible location. Before running the installer, there are some other actions that must be taken.
Ensure X11 is not running. Login as root and do this command:
telinit 3
Once successful, you will be brought to runlevel 3 where this mode is multiuser without X support.
Now invoke this command:
sh /path/to/NVIDIA-Linux-ARCH-VERSION.run
If prompted to blacklist nouveau, do so (see above) and restart and launch installer with root permission after restarted.
Choose to accept the license and install the driver.

note: nVIDIA binary driver installation can not be completed while the X11 Window System is active.

On process, the installer will proceed as follows:
  1. Extract itself and start an ncurses interface.
  2. Print license terms on screen.
  3. If you have no previouse system, the installer will begin by building the modules. Otherwise, the installer woll prompt permission to remove previous driver as part of the new installation.
  4. The installer will prompt you about installing NVidia’s 32-bit compatibility OpenGL libraries (if you enable multilib).
  5. Once no conflicting X and OpenGL files are found, the modules will be installed.
  6. Installer will offer to use nvidia-xconfig utility to modify xorg. The old one will be backed up to /etc/X11/xorg.conf.nvidia-xconfig-original.
  7. Installation is completed and the program will exits.

If everything is OK, then modules should be installing for the currently running kernel.

You must create an X.Org configuration file which loads the binary Nvidia driver if you decided not to let the nvidia-xconfig utility modify your computer’s xorg.conf file. The X.Org of Slackware supports individial “*.conf” files in a directory /etc/X11/xorg.conf.d. Any file with a .conf extension will be included together with the main /etc/X11/xorg.conf file.
You could create for instance a file named /etc/X11/xorg.conf.d/10-nvidia.conf with the following content:

Section "Device"
    Identifier  "Device0"
    Driver  "nvidia"
    VendorName "Nvidia Corporation"
    BoardName ""
EndSection

Without this definition, you will not get accelerated Nvidia GPU support! X.Org would fall-back to VESA mode because the nouveau driver has been blacklisted. The kernel will not auto-detect the binary driver as opposed to the nouveau driver.

Starting X11 with nvidia GPU Support

All that remains is to start the X.org server. This can be accomplished by configuring Slackware to start in runlevel 4, which will start a graphical login manager, such as KDM or XDM, on boot. If you want this, then you need to edit the file ”/etc/inittab” and change the line

id:3:initdefault:

to

id:4:initdefault:

Otherwise you can login to a user account and issue the ”startx” command to start an X session.

By default, startx will start the window manager which was chosen during installation. To change this behavior, the file ”.xinitrc” in the user’s home directory can be edited to start a different WM.
Alternatively, the default WM can be altered on a per-user basis by using the command ”xwmconfig” and selecting one of the available WM’s.

Social media & sharing icons powered by UltimatelySocial