Instalando driver NVIDIA Bumblebee no openSUSE

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.

Optimus Technology Badge

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.

Optimus Chart

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.

glxspheres

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.

  • Andre Almeida

    Olá, eu tenho o Bumblebee instalado no meu Ubuntuu Gnome. Sabe se é possível rodar com o nvidia para todas as aplicações por padrão (inclusive gnome-shell)?
    Outra coisa é que não consigo rodar a interface padrão do VLC, ele sempre abre com a linha de comando. Tanto com optirun como com o primusrun. Teve este problema?

    • Alexandre Vicenzi

      Infelizmente você tem que rodar os aplicativos pela linha de comando mesmo. Não existe uma forma ainda, até onde sei, de rodar todas aplicações com o Bumblebee.

      Sobre o VLC pode ser problema dele mesmo. Nem todas aplicações funcionam com o optirum. Se for aplicação 32 bits deve-se instalar a lib 32 bits do Bumblebee.

      Abraço.

  • Andre Almeida

    Olá, eu tenho o Bumblebee instalado no meu Ubuntuu Gnome. Sabe se é possível rodar com o nvidia para todas as aplicações por padrão (inclusive gnome-shell)?
    Outra coisa é que não consigo rodar a interface padrão do VLC, ele sempre abre com a linha de comando. Tanto com optirun como com o primusrun. Teve este problema?

    • Alexandre Vicenzi

      Infelizmente você tem que rodar os aplicativos pela linha de comando mesmo. Não existe uma forma ainda, até onde sei, de rodar todas aplicações com o Bumblebee.

      Sobre o VLC pode ser problema dele mesmo. Nem todas aplicações funcionam com o optirum. Se for aplicação 32 bits deve-se instalar a lib 32 bits do Bumblebee.

      Abraço.

  • Andre Almeida

    Olá, eu tenho o Bumblebee instalado no meu Ubuntuu Gnome. Sabe se é possível rodar com o nvidia para todas as aplicações por padrão (inclusive gnome-shell)?
    Outra coisa é que não consigo rodar a interface padrão do VLC, ele sempre abre com a linha de comando. Tanto com optirun como com o primusrun. Teve este problema?

    • Alexandre Vicenzi

      Infelizmente você tem que rodar os aplicativos pela linha de comando mesmo. Não existe uma forma ainda, até onde sei, de rodar todas aplicações com o Bumblebee.

      Sobre o VLC pode ser problema dele mesmo. Nem todas aplicações funcionam com o optirum. Se for aplicação 32 bits deve-se instalar a lib 32 bits do Bumblebee.

      Abraço.

  • Wander Sfalsin

    Olá, eu estou openSUSE Tumbleweed x64 num ASUS U30J com GF 310M e fiz tudo como vocẽ indicou, mas o optirun glxspheres continua:

    [ERROR]Cannot access secondary GPU – error: [XORG] (EE)
    [ERROR]Aborting because fallback start is disabled.

    Tem como me ajudar?

  • jose olegario de araujo junior

    Bom dia, consigo fazer tudo, mais nao consigo usar monitor externo.

  • Fernando Junior

    Muito obrigado; deu tudo certo… Como no seu, o meu também apresentou o erro, mas seguindo a orientação de solução do problema que você indicou tudo deu certo o/ .
    Forte abraço!