Instalacja bumblebee w układach hybrydowych intel/nvidia ubuntu 15.04 i 14.04
: 24 wrz 2015, 19:05
W Ubuntu 14.04 i nowym 15.04 napotykałem się na problem z instalacją bumblebee i sterownikami nvidii. Wydaje mi się że udało mi się rozwiązać ten problem 
Poniżej zaprezentuję kroki, które wykonałem, aby bumblebee, optirun i primusrun zadziałały u mnie
mam nadzieję, że temat pomoże też Wam
W razie niepowodzenia i błędów, na końcu miniporadnik jak sobie poradzić z czarnym ekranem.
ZŁOTA ZASADA NR 1: NAJPIERW PRZECZYTAJ, POTEM RÓB!!!
Wszystkie komendy apt-get można zastąpić aptitude (w razie problemów z uruchomieniem środowiska graficznego i instalacji z trybu tekstowego przez apt-get)
1. Instalacja bumblebee z oficjalnego repo Ubuntu
-instalujemy bumblebee:
-sprawdzamy wersję bbswitch i kernela:
-instalujemy bbswitch-dkms
-Instaujemy primus
-włączamy bumblebeed
-dodajemy użytkownika do używania bumblebee
2. Dodajemy wpisy
i915
bbswitch
do plików /etc/modules i /etc/modules-load.d/modules.conf
(kikamy plik > zapisz lub ctrl+s)
i
(ctrl+s)
3. Teraz dodajemy nouveau do czarnej listy (blacklist). Nieważne czy chcemy później z niego korzystać, jest to OBOWIĄZKOWY KROK, gdyż ładowaniem sterowników nouveau/nvidia ma zarządzać załączony w pakiecie bumblebee bbswitch.
W tym celu do jednego z plików (/etc/modprobe.d/nouveau.conf LUB /etc/modprobe.d/blacklist-nouveau.conf) dodajemy wpis
LUB
W 15.04 polecam dodać wpis do drugiego z wyżej wymienionych plików.
Uruchamiamy ponownie komputer
4. Sprawdzamy poprawność działania bbswitch
sudo cat /proc/acpi/bbswitch powinien dać wynik OFF
sudo echo ON > /proc/acpi/bbswitch
jeżeli wywala jakiś błąd przy tym, typu brak dostępu itp to walimy
powinno dać wynik ON
To potwierdza działanie bbswitch
5. Po ponownym urochomieniu instalujemy sterowniki nvidii. Ja używam nvidia 340, nie wiem jak z innymi.
6. . Należy zblacklistować sterownik nVidii, w tym samym celu co nouveau- czyli aby sterował nim bbswitch. Służy to zapobiegnięciu automatycznemu ładowaniu sterownika nVidii, jeśli pominiesz ten krok, nie zobaczysz interfejsu graficznego tylko czarny ekran!!!. Na końcu opiszę, jak się ratować z takiej sytuacji 
Do rzeczy.
Plik powinien wyglądać tak:
7. Czas na edycję pliku konfiguracji bumblebee. Dopisujemy, niezależnie od wersji używanego sterownika nvidia-331, inaczej bumbel nie zadziała i będzie
a) linia 22
Driver=nvidia
b) linia 55
KernelDriver=nvidia-331
c) linia 58
LibraryPath=/usr/lib/nvidia-331:/usr/lib32/nvidia-331
d) linia 61
XorgModulePath=/usr/lib/nvidia-331/xorg,/usr/lib/xorg/modules
Można też wrzucić cały plik konfiguracji, mój wygląda tak i działa:
9. Teraz można sprawdzić, czy chodzi:
I wsio
jeśli działa, to gratulacje. Jeśli wyskoczy Wam czarny ekran, to trzeba wypurge'ować wszystkie nasze kroki. W tym celu, wyłączamy x'y za pomocą ctrl+alt+f1, logujemy się za pomocą nazwy użytkownika i hasła i wpisujemy:
Teraz instalujemy bumbla i sterowniki na nowo:
Zawsze mnie to ratuje w przypadku problemu ze sterownikami nVidii. Zapisać i zapamiętać 
Wszystkie pliki, których używaliśmy podczas naszej zabawy zostaną usunięte i stworzone na nowo . A więc w razie niepowodzenia- zaczynamy od nowa całą robotę, aż w końcu zadziała

Poniżej zaprezentuję kroki, które wykonałem, aby bumblebee, optirun i primusrun zadziałały u mnie


ZŁOTA ZASADA NR 1: NAJPIERW PRZECZYTAJ, POTEM RÓB!!!
Wszystkie komendy apt-get można zastąpić aptitude (w razie problemów z uruchomieniem środowiska graficznego i instalacji z trybu tekstowego przez apt-get)
1. Instalacja bumblebee z oficjalnego repo Ubuntu
-instalujemy bumblebee:
Kod: Zaznacz cały
sudo apt-get install bumblebee bumblebee-nvidia
-sprawdzamy wersję bbswitch i kernela:
Kod: Zaznacz cały
dkms status
-instalujemy bbswitch-dkms
Kod: Zaznacz cały
sudo apt-get install bbswitch-dkms
Kod: Zaznacz cały
sudo apt-get install primus
Kod: Zaznacz cały
sudo systemctl enable bumblebeed
Kod: Zaznacz cały
sudo gpasswd -a $USER bumblebee
i915
bbswitch
do plików /etc/modules i /etc/modules-load.d/modules.conf
Kod: Zaznacz cały
sudo gedit /etc/modules
i
Kod: Zaznacz cały
sudo gedit /etc/modules-load.d/modules.conf
3. Teraz dodajemy nouveau do czarnej listy (blacklist). Nieważne czy chcemy później z niego korzystać, jest to OBOWIĄZKOWY KROK, gdyż ładowaniem sterowników nouveau/nvidia ma zarządzać załączony w pakiecie bumblebee bbswitch.
W tym celu do jednego z plików (/etc/modprobe.d/nouveau.conf LUB /etc/modprobe.d/blacklist-nouveau.conf) dodajemy wpis
blacklist nouveau
Kod: Zaznacz cały
sudo gedit /etc/modprobe.d/nouveau.conf
LUB
Kod: Zaznacz cały
sudo gedit /etc/modprobe.d/blacklist-nouveau.conf
Uruchamiamy ponownie komputer
Kod: Zaznacz cały
sudo reboot
sudo cat /proc/acpi/bbswitch powinien dać wynik OFF
sudo echo ON > /proc/acpi/bbswitch
jeżeli wywala jakiś błąd przy tym, typu brak dostępu itp to walimy
Kod: Zaznacz cały
sudo chmod 666 /proc/acpi/bbswitch
Kod: Zaznacz cały
sudo cat /proc/acpi/bbswitch
To potwierdza działanie bbswitch
Kod: Zaznacz cały
sudo reboot

Kod: Zaznacz cały
sudo apt-get install nvidia-340

Do rzeczy.
Kod: Zaznacz cały
sudo gedit /etc/modprobe.d/bumblebee.conf
Jeśli nie ma naszej wersji sterownika, to dopisujemy wiązankę:# This file is installed by bumblebee, do NOT edit!
# to be used by kmod / module-init-tools, and installed in /etc/modprobe.d/
# or equivalent
# do not automatically load nouveau as it may prevent nvidia from loading
blacklist nouveau
# do not automatically load nvidia as it's unloaded anyway when bumblebeed
# starts and may fail bumblebeed to disable the card in a race condition.
blacklist nvidia
blacklist nvidia-current
blacklist nvidia-current-updates
# 304
blacklist nvidia-304
blacklist nvidia-304-updates
blacklist nvidia-experimental-304
# 310
blacklist nvidia-310
blacklist nvidia-310-updates
blacklist nvidia-experimental-310
# 313
blacklist nvidia-313
blacklist nvidia-313-updates
blacklist nvidia-experimental-313
# 319
blacklist nvidia-319
blacklist nvidia-319-updates
blacklist nvidia-experimental-319
# 325
blacklist nvidia-325
blacklist nvidia-325-updates
blacklist nvidia-experimental-325
# 331
blacklist nvidia-331
blacklist nvidia-331-updates
blacklist nvidia-experimental-331
# 334
blacklist nvidia-334
blacklist nvidia-334-updates
blacklist nvidia-experimental-334
# 337
blacklist nvidia-337
blacklist nvidia-337-updates
blacklist nvidia-experimental-337
# 340
blacklist nvidia-340
blacklist nvidia-340-updates
blacklist nvidia-experimental-340
# 343
blacklist nvidia-343
blacklist nvidia-343-updates
blacklist nvidia-experimental-343
# 346
blacklist nvidia-346
blacklist nvidia-346-updates
blacklist nvidia-experimental-346
# 349
blacklist nvidia-349
blacklist nvidia-349-updates
blacklist nvidia-experimental-349
# 352
blacklist nvidia-352
blacklist nvidia-352-updates
blacklist nvidia-experimental-352
# 355
blacklist nvidia-355
blacklist nvidia-355-updates
blacklist nvidia-experimental-355
# Workaround to make sure nvidia-uvm is removed as well
remove nvidia rmmod nvidia-uvm nvidia
Kod: Zaznacz cały
blacklist nvidia-numer_sterownika
blacklist nvidia-numer_sterownika-updates
blacklist nvidia-experimental-numer_sterownika

Kod: Zaznacz cały
sudo gedit /etc/bumblebee/bumblebee.conf
Driver=nvidia
b) linia 55
KernelDriver=nvidia-331
c) linia 58
LibraryPath=/usr/lib/nvidia-331:/usr/lib32/nvidia-331
d) linia 61
XorgModulePath=/usr/lib/nvidia-331/xorg,/usr/lib/xorg/modules
Można też wrzucić cały plik konfiguracji, mój wygląda tak i działa:
8. Przeinstalowujemy bbswitch-dkms:# 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/lib/x86_64-linux-gnu/primus:/usr/lib/i386-linux-gnu/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/Bu ... 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-340
PMMethod=auto
# colon-separated path to the nvidia libraries
LibraryPath=/usr/lib/nvidia-340:/usr/lib32/nvidia-340
# comma-separated path of the directory containing nvidia_drv.so and the
# default Xorg modules path
XorgModulePath=/usr/lib/nvidia-340/xorg,/usr/lib/xorg/modules
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
Kod: Zaznacz cały
sudo apt-get install --reinstall bbswitch-dkms
sudo reboot
primusrun glxinfo | grep OpenGL
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GT 630M/PCIe/SSE2
OpenGL core profile version string: 4.4.0 NVIDIA 340.76
OpenGL core profile shading language version string: 4.40 NVIDIA via Cg compiler
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.4.0 NVIDIA 340.76
OpenGL shading language version string: 4.40 NVIDIA via Cg compiler
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
Kod: Zaznacz cały
primusrun glxgears
Kod: Zaznacz cały
optirun glxgears

Kod: Zaznacz cały
sudo aptitude purge bumblebee
sudo aptitude purge primus
sudo aptitude purge nvidia-340 (lub co tam mamy)
Kod: Zaznacz cały
sudo add-apt-repository ppa:bumblebee/stable
sudo aptitude update &&sudo aptitude upgrade
sudo aptitude install nvidia-340
sudo aptitude install bumblebee
sudo aptitude install primus
sudo aptitude install linux-headers-generic
sudo reboot

Wszystkie pliki, których używaliśmy podczas naszej zabawy zostaną usunięte i stworzone na nowo . A więc w razie niepowodzenia- zaczynamy od nowa całą robotę, aż w końcu zadziała
