Eu, como muitos de vocês, gosto de jogar um pouquinho as vezes. E porque não tirar todo o potencial da sua placa de vídeo no Linux?
Pois bem, hoje vou mostrar como resolver um problema em particular com as placas de vídeo da NVIDIA que possuem a tecnologia Optimus.
Para quem este tutorial é indicado?
Para todos usuários do openSUSE ou semelhante que possuam um notebook com tecnologia NVIDIA Optimus.

O que é NVIDIA Optimus?
A tecnologia Optimus da NVIDIA otimiza o seu notebook de forma inteligente, oferecendo o desempenho gráfico impressionante que você precisa, quando você precisa, e sempre aumentando o tempo de vida da bateria para que você aproveite por mais tempo.

Resumidamente, a tecnologia NVIDIA Optimus escolhe qual a melhor placa gráfica para executar determinada aplicação. Para processos de pouco uso gráfico, será escolhido a Intel Graphics e para processos de alto desempenho, como jogos por exemplo, será escolhida a NVIDIA GeForce.
Qual a necessidade do Bumblebee?
Com o driver oficial da NVIDIA no Windows 7 ou superior, a troca entre as placas de vídeo é automática, porém o driver oficial da NVIDIA para Linux não funciona corretamente com a tecnologia Optimus. Sendo assim, é necessário o uso do Bumblebee para fazer essa troca.
O que é o Projeto Bumblebee?
O Projeto Bumblebee é uma coleção de ferramentas para dar suporte a tecnologia Optimus no Linux, sendo responsável pelo gerenciamento das placas de vídeo.
O que é o bbswitch?
O bbswitch é responsável por fazer o “Liga/Desliga” das placas de vídeo.
Agora que conhecemos um pouco sobre a história do Bumblebee, vamos ver como instalá-lo e configurá-lo.
Preparação
Todos os passos da instalação foram obtidos na Wiki do openSUSE.
Primeiramente criaremos um Snapshot do sistema, para que seja possível restaurar o sistema caso de algum problema. Para isto execute o comando abaixo:
snapper create -d BeforeBB
Isto só vale para quem possui sistema de arquivos BtrFS ou Ext4.
Antes de baixar os drivers necessários é preciso adicionar o repositório do Bumblebee. Para isto execute o comando abaixo:
zypper ar -f http://download.opensuse.org/repositories/X11:/Bumblebee/openSUSE_13.2/ Bumblebee
Lembre-se de substituir o 13.2 pela sua versão.
Instalação
Para instalar o Bumblebee execute o comando abaixo:
zypper in bumblebee
Adicione seu usuário ao grupo do Bumblebee com o seguinte comando:
usermod -G video,bumblebee seu_usuário
Habilite o bbswitch e o dkms com o comando abaixo:
systemctl enable bumblebeed
Edite o arquivo /etc/modprobe.d/50-blacklist.conf e verifique se consta a seguinte linha:
# NVIDIA Bumblebee
blacklist nouveau
Caso não, adicione-a.
Execute o comando abaixo para recriar o initrd com as novas informações adicionadas:
mkinitrd
Para usar todos os recursos da sua placa NVIDIA é necessário instalar o driver da NVIDIA. Para isto execute:
zypper in nvidia-bumblebee
Habilite o dkms com o seguinte comando:
systemctl enable dkms
Caso você esteja em um sistema 64 bits, é necessário instalar o driver 32 bits para execução de aplicações 32 bits. Para isto execute o seguinte comando:
zypper in nvidia-bumblebee-32bit
Após tudo instalado reinicie o computador.
Teste
Após reiniciar você pode testar a sua placa NVIDIA para verificar se tudo ocorreu bem. Para isto execute o comando abaixo:
optirun –status
O resultado deverá ser:
Bumblebee status: Ready (3.2.1). X inactive. Discrete video card is off.
Executando aplicações
Para executar uma aplicação utilizando a placa NVIDIA é necessário iniciar esta aplicação pela linha de comando com o comando optirun ou primusrun.
Como por exemplo:
optirun glxspheres
Se você ver o resultado abaixo significa que tudo está funcionado.

Sendo assim, quando você deseja usar a sua placa NVIDIA basta executar os programas pelo optirun ou primusrun.
Agora se você, assim como eu, teve o problema abaixo, é necessário alguns passos adicionais para colocar o Bumblebee para funcionar.
[ 141.907657] [ERROR]Cannot access secondary GPU - error: Could not load GPU driver
[ 141.907718] [ERROR]Aborting because fallback start is disabled.
Se você executar o comando abaixo você conseguirá ver um log mais detalhado:
optirun -vvv glxspheres
O resultado deverá ser algo semelhante:
[ 632.489659] [DEBUG]Reading file: /etc/bumblebee/bumblebee.conf
[ 632.490367] [DEBUG]optirun version 3.2.1 starting…
[ 632.490384] [DEBUG]Active configuration:
[ 632.490389] [DEBUG] bumblebeed config file: /etc/bumblebee/bumblebee.conf
[ 632.490394] [DEBUG] X display: :8
[ 632.490398] [DEBUG] LD_LIBRARY_PATH: /usr/lib64/nvidia:/usr/lib/nvidia
[ 632.490402] [DEBUG] Socket path: /var/run/bumblebee.socket
[ 632.490406] [DEBUG] Accel/display bridge: auto
[ 632.490411] [DEBUG] VGL Compression: proxy
[ 632.490415] [DEBUG] VGLrun extra options:
[ 632.490419] [DEBUG] Primus LD Path: /usr/lib64/primus:/usr/lib/primus
[ 632.490459] [DEBUG]Using auto-detected bridge virtualgl
[ 632.535663] [INFO]Response: No - error: Could not load GPU driver
[ 632.535686] [ERROR]Cannot access secondary GPU - error: Could not load GPU driver
[ 632.535694] [DEBUG]Socket closed. [ 632.535713] [ERROR]Aborting because fallback start is disabled. [ 632.535721] [DEBUG]Killing all remaining processes.
Resumidamente este erro indica que o Bumblebee não conseguiu trocar para a placa NVIDIA.
Resolução de problemas
Primeiro vamos alterar o arquivo /etc/bumblebee/bumblebee.conf.
Altera apenas as linhas Driver e KernelDriver para ficar como abaixo:
# Configuration file for Bumblebee. Values should **not** be put between quotes
## Server options. Any change made in this section will need a server restart
# to take effect.
[bumblebeed]
# The secondary Xorg server DISPLAY number
VirtualDisplay=:8
# Should the unused Xorg server be kept running? Set this to true if waiting
# for X to be ready is too long and don't need power management at all.
KeepUnusedXServer=false
# The name of the Bumbleblee server group name (GID name)
ServerGroup=bumblebee
# Card power state at exit. Set to false if the card shoud be ON when Bumblebee
# server exits.
TurnCardOffAtExit=false
# The default behavior of '-f' option on optirun. If set to "true", '-f' will
# be ignored.
NoEcoModeOverride=false
# The Driver used by Bumblebee server. If this value is not set (or empty),
# auto-detection is performed. The available drivers are nvidia and nouveau
# (See also the driver-specific sections below)
Driver=nvidia
# Directory with a dummy config file to pass as a -configdir to secondary X
XorgConfDir=/etc/bumblebee/xorg.conf.d
## Client options. Will take effect on the next optirun executed.
[optirun]
# Acceleration/ rendering bridge, possible values are auto, virtualgl and
# primus.
Bridge=auto
# The method used for VirtualGL to transport frames between X servers.
# Possible values are proxy, jpeg, rgb, xv and yuv.
VGLTransport=proxy
# List of paths which are searched for the primus libGL.so.1 when using
# the primus bridge
PrimusLibraryPath=/usr/lib64/primus:/usr/lib/primus
# Should the program run under optirun even if Bumblebee server or nvidia card
# is not available?
AllowFallbackToIGC=false
# Driver-specific settings are grouped under [driver-NAME]. The sections are
# parsed if the Driver setting in [bumblebeed] is set to NAME (or if auto-
# detection resolves to NAME).
# PMMethod: method to use for saving power by disabling the nvidia card, valid
# values are: auto - automatically detect which PM method to use
# bbswitch - new in BB 3, recommended if available
# switcheroo - vga_switcheroo method, use at your own risk
# none - disable PM completely
# https://github.com/Bumblebee-Project/Bumblebee/wiki/Comparison-of-PM-methods
## Section with nvidia driver specific options, only parsed if Driver=nvidia
[driver-nvidia]
# Module name to load, defaults to Driver if empty or unset
KernelDriver=nvidia
PMMethod=auto
# colon-separated path to the nvidia libraries
LibraryPath=/usr/lib64/nvidia:/usr/lib/nvidia:/lib/modules/3.16.7-7-desktop/updates/:/usr/lib64/
# comma-separated path of the directory containing nvidia_drv.so and the
# default Xorg modules path
XorgModulePath=/usr/lib64/nvidia/xorg/,/usr/lib64/xorg/modules,/usr/lib64/xorg/modules/drivers/
XorgConfFile=/etc/bumblebee/xorg.conf.nvidia
## Section with nouveau driver specific options, only parsed if Driver=nouveau
[driver-nouveau]
KernelDriver=nouveau
PMMethod=auto
XorgConfFile=/etc/bumblebee/xorg.conf.nouveau
Altere o arquivo /etc/modprobe.d/50-bbswitch.conf para ficar igual o abaixo:
options bbswitch load_state=1 unload_state=1
Mudando o load_state para 1, estamos dizendo que o driver sempre será carregado no boot.
Execute o comando abaixo para recriar o initrd com as novas informações adicionadas:
mkinitrd
Reinicie o computador novamente.
Faça o teste com o glxspheres como mencionado anteriormente e verifique se o resultado foi positivo.
É isso ai. Espero que este tutorial possa ajudar outras pessoas. Foram alguns dias tentando solucionar este problema. Eu não teria conseguido se não fosse pela ajuda do pessoal do fórum do openSUSE.