[HOW-TO] Optimus / Bumblebee: Dual Screen

Direkte Linux-Programmierung, POSIX
Antworten
nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

[HOW-TO] Optimus / Bumblebee: Dual Screen

Beitrag von nufan » Di Okt 29, 2013 1:01 am

Tag :)

Nachdem ich gestern meinen neuen Monitor bekam, musste ich den mal unter Linux Laufen kriegen. Das ganze war etwas schwieriger als sich das jetzt anhört, immerhin muss ich mal meiner Intel-Grafikkarte sagen, dass die Ausgabe (auch) über die an der diskreten Nvidia-Grafikkarte hängenden Anschlüsse rausgeschickt werden muss. Vorweg: Ich habs bis jetzt nur mit VGA (über einen Mini-DisplayPort-Adapter) zum Laufen gebracht, HDMI streikt noch immer.

Als Basis verwende ich Kubuntu 13.10, das auf einem Dell XPS17 läuft. In diesem ist einerseits eine onboard Intel-Grafikkarte vorhanden, andererseits eine Nvidia GeForce GT 550M:

Code: Alles auswählen

$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
01:00.0 VGA compatible controller: NVIDIA Corporation GF106M [GeForce GT 550M] (rev a1)
Um die Nvidia-Grafikkarte sinnvoll verwenden zu können, wird Bumblebee verwendet. Da ich mir unsicher war, wie weit ich mit der bestehenden Konfiguration komme, habe ich mal alles davon entfernt und neu gestartet:

Code: Alles auswählen

$ sudo apt-get purge bumblebee
$ sudo apt-get --purge autoremove
So, nach einem Neustart kann man nun mit der eigentlichen Arbeit beginnen. Zuerst sollte man sicher gehen, dass das Kernel-Modul des reverse-engineerten Nvidia-Treibers nouveau nicht geladen ist (eventuell hilft das: http://www.pimp-my-rig.com/2012/01/unlo ... river.html).
Nun die neue Installation:

Code: Alles auswählen

$ sudo apt-get install bumblebee bumblebee-nvidia primus linux-headers-generic 
Bekommt man hier die Ausgabe "Error: Module nouveau is in use", hat man das Modul nicht richtig deaktiviert.
Scheint sonst keine Fehlermeldung auf, hat man mal ein funktionierendes Bumblebee. Nun noch die aktuelleren Nvidia-Treiber verwenden:

Code: Alles auswählen

$ sudo apt-get install nvidia-319 nvidia-settings-319
An dieser Stelle kann ein Neustart sicher nicht schaden. Nun sollte man auch schon passende Informationen über die Grafikkarte zur Verfügung haben:

Code: Alles auswählen

$ optirun glxinfo | head
name of display: :0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
server glx extensions:
    GLX_ARB_create_context, GLX_ARB_create_context_profile, 
    GLX_ARB_create_context_robustness, GLX_ARB_fbconfig_float, 
    GLX_ARB_multisample, GLX_EXT_buffer_age, 
    GLX_EXT_create_context_es2_profile, GLX_EXT_create_context_es_profile,
Ist für unser Ziel zwar nicht relevant, aber Nvidia-Settings konnte ich so nicht starten. Abhilfe schafft:

Code: Alles auswählen

$ optirun -b none nvidia-settings -c :8
Um den Monitor zum Laufen zu bekommen muss an der Bumblebee-Konfiguration noch etwas gearbeitet werden:

/etc/bumblebee/bumblebee.conf:
"PmMethod=auto" muss auf "PmMethod=none" ausgebessert werden, um das Power-Management zu deaktivieren (Achtung: Das kommt an 2 Stellen in der Datei vor!). "KeepUnusedXServer" muss den Wert "true" haben, außerdem sollte "Driver" auf jeden Fall "nvidia" sein.
Hier meine komplette Konfiguration:

Code: Alles auswählen

# 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=true
# 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/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-current
PMMethod=none
# colon-separated path to the nvidia libraries
LibraryPath=/usr/lib/nvidia-current:/usr/lib32/nvidia-current
# comma-separated path of the directory containing nvidia_drv.so and the
# default Xorg modules path
XorgModulePath=/usr/lib/nvidia-current/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=none
XorgConfFile=/etc/bumblebee/xorg.conf.nouveau
/etc/bumblebee/xorg.conf.nvidia:
Folgende Zeilen müssen entfernt werden:

Code: Alles auswählen

Option "AutoAddDevices" "false"
Option "UseEDID" "true"
Meine komplette Datei:

Code: Alles auswählen

Section "ServerLayout"
    Identifier  "Layout0"
    Option      "AutoAddGPU" "false"
EndSection

Section "Device"
    Identifier  "DiscreteNvidia"
    Driver      "nvidia"
    VendorName  "NVIDIA Corporation"

#   If the X server does not automatically detect your VGA device,
#   you can manually set it here.
#   To get the BusID prop, run `lspci | egrep 'VGA|3D'` and input the data
#   as you see in the commented example.
#   This Setting may be needed in some platforms with more than one
#   nvidia card, which may confuse the proprietary driver (e.g.,
#   trying to take ownership of the wrong device). Also needed on Ubuntu 13.04.
    BusID "PCI:01:00:0"

#   Setting ProbeAllGpus to false prevents the new proprietary driver
#   instance spawned to try to control the integrated graphics card,
#   which is already being managed outside bumblebee.
#   This option doesn't hurt and it is required on platforms running
#   more than one nvidia graphics card with the proprietary driver.
#   (E.g. Macbook Pro pre-2010 with nVidia 9400M + 9600M GT).
#   If this option is not set, the new Xorg may blacken the screen and
#   render it unusable (unless you have some way to run killall Xorg).
    Option "ProbeAllGpus" "false"

    Option "NoLogo" "true"
    Option "UseDisplayDevice" "none"
EndSection
Nach einem erneuten Reboot sollte nun der Monitor in den normalen Distributions-Einstellungen angezeigt werden und konfigurierbar sein :)

Wo ist der Haken?
Davon gibt es mehrere, aber (meine Meinung nach) relativ kleine. Wie bereits ganz zu Beginn erwähnt funktioniert HDMI bei mir nicht. Außerdem läuft der Lüfter permanent im Hintergrund, kann schwer einschätzen ob das bei 43° (laut Nvidia-Settings) wirklich schon notwendig ist, glaube aber kaum. Hot-Plugging funktioniert bei mir gar nicht. Als ich testweise den Monitor absteckte, musste ich den Laptop neu starten um ihn wieder verwenden zu können, dann aber natürlich wieder ohne Probleme.

Quellen:
https://wiki.ubuntu.com/Bumblebee#Installation
https://github.com/Bumblebee-Project/Bu ... itor-setup

Hoffe das hilft jemanden :) Abschließend bleibt nur noch zu sagen, dass auch wenn das Ganze bei weitem nicht perfekt läuft - es geht bergauf :)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8502
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [HOW-TO] Optimus / Bumblebee: Dual Screen

Beitrag von Xin » Di Okt 29, 2013 9:50 am

Warum ist das so kompliziert, zwei Grafikkarten in einem Rechner zu haben!?

Mein Mainboard (DesktopPC) nimmt zwei Grafikkarten auf und ich hatte mal vor 6 oder 7 Jahren drei Monitore mit einer AGP und einer PCI Grafikkarte laufen. Was macht dieses BumbleBee so viel komplexer?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

Re: [HOW-TO] Optimus / Bumblebee: Dual Screen

Beitrag von nufan » Di Okt 29, 2013 10:11 am

Das Hauptproblem in diesem Fall ist, dass die externen Anschlüsse an der Nvidia-Karte hängen, das Laptopdisplay an der Intel-Karte und es von Seiten Nvidias momentan keinen Linux-Treiber gibt der diesen (inzwischen schon fast zum Standard gewordenen) Fall abdeckt.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8502
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: [HOW-TO] Optimus / Bumblebee: Dual Screen

Beitrag von Xin » Di Okt 29, 2013 10:17 am

Vielleicht auch etwas, was eher ins Wiki gehört? hardware:bumblebee oder eher linux:bumblebee ?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

Re: [HOW-TO] Optimus / Bumblebee: Dual Screen

Beitrag von nufan » Do Apr 24, 2014 10:50 am

In der neuen Version wirds schon besser werden... Blödsinn ^^ Es wurde noch schlimmer, man muss im Boot-Menü von Ubuntu nomodeset aktivieren, um überhaupt von dem Live-Medium booten zu können. Den Flag kann man direkt nach dem ersten Boot der Installation wieder aus der /boot/grub/grub.cfg rauslöschen, dann sollte es passen. Danach die gleiche Prozedur wie oben beschrieben, nur eben mit der aktuellen Treiberversion.

Antworten