Nvidia installiert auf Optimus-Laptop, Intel fehlt jetzt 3D

Hallo,

ich habe so ein blödes T420s Notebook mit zwei GraKas: externe Nvidia, interne Intel. Ich habe aus dem Nvidia-repo den aktuellen Nvidia Treiber installiert. Der läuft auch, dann habe ich im BIOS wieder auf die Intel-GraKa umgestellt und gebootet.

Damit die richtigen Treiber verwendet werden, enthält meine boot.local folgende Zeilen:

mode=$(/sbin/lspci | egrep 'VGA|3D');

#Make shure we are in command of /usr/X11R6/lib
if  -e /etc/ld.so.conf.d/nvidia-gfxGO*.conf ]; then
    /bin/rm /etc/ld.so.conf.d/nvidia-gfxGO*.conf
fi  


#Check graphics mode and take apropriate action
if  `echo $mode | grep -c "Intel" ` -gt 0 ]; then
      /usr/sbin/update-alternatives --set libglx.so /usr/lib64/xorg/modules/extensions/xorg/xorg-libglx.so
fi 


if  -e /usr/X11R6/lib64/libGL.so.1 ]; then
    /bin/rm /usr/X11R6/lib64/libGL.so.1
fi    


if  -e /usr/X11R6/lib/libGL.so.1 ]; then
    /bin/rm /usr/X11R6/lib/libGL.so.1
fi    


if  `echo $mode | grep -c "NVIDIA" ` -gt 0 ]; then
    /usr/sbin/update-alternatives --set libglx.so /usr/lib64/xorg/modules/extensions/nvidia/nvidia-libglx.so 
    /sbin/ldconfig /usr/X11R6/lib64
    /sbin/ldconfig /usr/X11R6/lib
fi


Der Code stammt von hier: https://forums.opensuse.org/showthread.php/503092-quot-Xlib-extension-quot-GLX-quot-missing-on-display-quot-0-quot-quot-special-case

glxgears

Xlib: extension 'GLX' missing on display ':0'
Error: couldn't get an RGB, Double-buffered visual

Nun fehlt also bei Intel die 3D Unterstützung. Was könnte die Installation des Nvidia-Treibers zerschossen haben?

Bei KF5 stürzt nun alles ab, die Sitzung zeigt nach einer Reihe von Absturzmeldungen (krunner etc.) nur noch Hintergrundbild und Maus, nichts läuft.

Danke!

Gruß,

???
Wenn bei Intel die 3D Unterstützung fehlt, warum soll dann die Installation des Nvidia-Treibers zerschossen sein?

Funktionierts wenn du wieder nvidia aktivierst?

Poste mal die Ausgabe von “/sbin/lspci | egrep ‘VGA|3D’” um zu sehen ob die Grafikkarte überhaupt vom Skript richtig erkannt wird.

Und das Skript das du gepostet hast, ist unvollständig/fehlerhaft:
Es löscht einfach bedingungslos nvidia’s libGL. Damit wird auch bei nvidia kein 3D funktionieren.

Und das ist ebenfalls falsch:


#Make shure we are in command of /usr/X11R6/lib
if  -e /etc/ld.so.conf.d/nvidia-gfxGO*.conf ]; then
    /bin/rm /etc/ld.so.conf.d/nvidia-gfxGO*.conf
fi  

Das hat keine Wirkung, es sollte 0 (die Ziffer) statt O (der Großbuchstabe) sein.
Dann sollten die "rm"s auch nicht notwendig sein. Aber ein Wechsel der libGLs fehlt immer noch.

Ich würde dir empfehlen, lieber mein Skript zu nehmen (das sollte alle Fehler/Unzulänglichkeiten dieses unvollständigen Skripts beheben), und halt den Teil der 20-nouveau.conf anlegt zu entfernen…

Hier ist das entsprechende Skript:

#Make sure we are in command of /usr/X11R6/lib
if  -e /etc/ld.so.conf.d/nvidia-gfxGO*.conf ]; then
    /bin/rm /etc/ld.so.conf.d/nvidia-gfxGO*.conf
fi  

#Check graphics mode fix symlinks
if  `grep -c "nouveau" /proc/cmdline` -gt 0 ]; then
    update-alternatives --set libglx.so /usr/lib64/xorg/modules/extensions/xorg/xorg-libglx.so
    # use Mesa's libGL
    ln -sf  /usr/lib64/libGL.so.1.2.0 /usr/lib64/libGL.so.1
fi 

if  `grep -c "nouveau" /proc/cmdline` -eq 0 ]; then
    update-alternatives --set libglx.so /usr/lib64/xorg/modules/extensions/nvidia/nvidia-libglx.so
    /sbin/ldconfig /usr/X11R6/lib64
   # use nvidia's libGL
    ln -sf  /usr/X11R6/lib64/libGL.so.1 /usr/lib64/libGL.so.1
fi

Das sollte eigentlich funktionieren, aber ich habs nicht getestet. Du kannst den nvidia Treiber durch Hinzufügen von “nouveau” zur Kernel-Befehlszeile “deaktivieren”.
Automatich wie im alten Skript sollte auch möglich sein, die Änderung bekommst du aber vielleicht eh selber hin… :wink:
Ansonsten kann ich ja später noch was posten.

Du solltest aber den nvidia Treiber neu installieren (nvidia-glG0X zumindest), da das gepostete Skript deine Installation ja zerschossen hat.
Und eine Neuinstallation von Mesa-LibGL1 wäre zur Sicherheit auch empfehlenswert.

Hallo,

ich wäre Dir sehr dankbar, wenn Du das Script für boot.local lauffähig überarbeiten könntest, ich verstehe schlichtweg nichts von diesen Dingen.

Was aber nicht passieren sollte, ist, dass ich missverständlich schreibe. Meine Frage, was die Installation des Nvidia-Treibers zerschossen haben könnte, war so gemeint: Kann es sein, dass ich mit der Installation des Nvidia-Treibers die Funktionsfähigkeit des Intel-Treibers beeinträchtigt habe? Denn das Notebook läuft nun wieder mit der Intel-Graka und da habe ich eben nun meine Schwierigkeiten.

Du hast völlig recht: auch unter der Nvidia-GraKa lief kein 3D.

Also, die ganze Sache ist offenbar wackelig und vielleicht könntest Du mir ja weiterhelfen mit einer neuen Version von boot.local.

/sbin/lspci | egrep 'VGA|3D'
00:02.0 VGA compatible controller: Intel Corporation 2nd Gernation Core Processor Family Integrated Graphics Controller (rev 09)

(per Hand abgeschrieben, bin gerade auf nem anderen Rechner hier im Forum angemeldet).

Gruß,
Alexander

Hier ist die “automatische” Variante:

mode=$(/sbin/lspci | egrep 'VGA|3D');

#Make sure we are in command of /usr/X11R6/lib
if  -e /etc/ld.so.conf.d/nvidia-gfxG0*.conf ]; then
    /bin/rm /etc/ld.so.conf.d/nvidia-gfxG0*.conf
fi  

#Check graphics mode fix symlinks
if  `echo $mode | grep -c "Intel" ` -gt 0 ]; then
    update-alternatives --set libglx.so /usr/lib64/xorg/modules/extensions/xorg/xorg-libglx.so
    # use Mesa's libGL
    ln -sf  /usr/lib64/libGL.so.1.2.0 /usr/lib64/libGL.so.1
fi 

if  `echo $mode | grep -c "NVIDIA" ` -gt 0 ]; then
    update-alternatives --set libglx.so /usr/lib64/xorg/modules/extensions/nvidia/nvidia-libglx.so
    /sbin/ldconfig /usr/X11R6/lib64
   # use nvidia's libGL
    ln -sf  /usr/X11R6/lib64/libGL.so.1 /usr/lib64/libGL.so.1
fi

Aber wie gesagt, nicht getestet.

Und momentan kümmert sich das nicht um die 32bit Bibliotheken, hat also für 32bit Software keine Wirkung. Das sollte aber problemlos hinzugefügt werden können falls notwendig… :wink:

Schon erledigt, probiers mal aus.

Was aber nicht passieren sollte, ist, das ich missverständlich schreibe. Meine Frage, was die Installation des Nvidia-Treibers zerschossen haben könnte, war so gemeint: Kann es sein, dass ich mit der Installation des Nvidia-Treibers die Funktionsfähigkeit des Intel-Treibers beeinträchtigt habe? Denn das Notebook läuft nun wieder mit der Intel-Graka und da habe ich eben nun meine Schwierigkeiten.

Wenn du den Nvidia-Treiber installierst (das Paket nvidia-glG0X im speziellen), “zerstört” das die OpenGL-Unterstützung des Intel-Treibers, weil nvidia Systembibliotheken durch eigene Versionen ersetzt.
Das Skript sollte das “reparieren”.

Du hast völlig recht: auch unter der Nvidia-GraKa lief kein 3D.

Wie gesagt, das Skript hat dir nvidia’s libGL gelöscht.
Also nochmal, installiere nvidia-glG0X neu (ich gehe jetzt mal davon aus dass du den G03 Treiber benutzt, für G04 bitte selber entsprechend anpassen…)

sudo zypper in -f nvidia-glG03

Dann sollte Nvidia’s 3D eigentlich wieder funktionieren.

Und mit dem Skript sollte es dann auch mit Intel klappen.

Müsste man da nicht auch die beiden “O” gegen eine “0” austauschen?

Natürlich.
Da hab ich wohl das falsche kopiert. :shame:

Ist jetzt ausgebessert…

Mit Deinem Script fällt Linux unter der Nvidia-Graka zurück auf eine riesige Auflösung, das wird vesa oder sowas gewesen sein. Mit dem alten Script und den richtigen Nullen statt Os läuft Nvidia sehr gut (mit einem Schönheitsfehler: bei der Anmeldung glaubt KDM, es gäbe zwei Bildschirme).

Mit dem alten Script läuft jetzt unter Intel leider glxgears nicht mehr, mit der gleichen Fehlermeldung wie vorhin.

Uff. Also, ich schätze, ich habe einen funktionierenden DP mit Nvidia.

Wenn Du noch Geduld und Lust hast, mir zu helfen, würde mich das sehr freuen. Könntest Du Dein Script nochmal prüfen, oder soll ich damit nochmal booten und dann irgendeine Ausgabe hier hochladen?

Und hättest Du vielleicht noch eine Idee, warum bei Intel nun glxgears nicht mehr läuft?

Wie auch immer: schönes Wochenende, falls Du keine Lust mehr hast, und vielen Dank nochmal.

Gruß,
Alexander

Nein, ich kann das nicht prüfen, weil ich keine nvidia Karte habe und schon gar kein Hybrid-System.

So wie das Skript jetzt ist, sollte es aber nicht möglich sein dass der nvidia Treiber nicht funktioniert… Es ändert ja nur die 3D Bibliotheken (libglx, libGL).

Kannst du mal die /var/log/Xorg.0.log posten, wenn das Problem auftritt?

Und hättest Du vielleicht noch eine Idee, warum bei Intel nun glxgears nicht mehr läuft?

Wie gesagt, wenn der nvidia Treiber installiert ist, funktioniert Intel’s 3D-Unterstützung nicht.
Du musst dazu nvidia-glG03 deinstallieren, dann geht aber logischerweise kein 3D auf der nvidia-Karte mehr.

PS: mir ist grade aufgefallen, dass da vielleicht im Intel-Bereich einfach nur das ldconfig fehlt und deshalb weiterhin nvidia’s libGL verwendet wird (weil die noch im Linker-Cache ist)…

Also probier vielleicht das mal:

if  `echo $mode | grep -c "Intel" ` -gt 0 ]; then
      /usr/sbin/update-alternatives --set libglx.so /usr/lib64/xorg/modules/extensions/xorg/xorg-libglx.so
      /sbin/ldconfig
fi  

Ernsthaft? Jahrelang konnte ich beides haben. So ein Ärger!

In dem oben stehenden Script findet sich ja schon ein Abschnitt “Intel” – soll dieser hier ihn ersetzten, einschließlich des symbolischen links darin?

Nein, das war schon immer so (seit Jahren zumindest).

Sonst hättest du ja gar nicht erst so ein Skript gebraucht.

Der nvidia Treiber ersetzt die systemweiten libglx.so und libGL.so mit seinen eigenen Versionen. Deshalb funktioniert Mesa nicht mehr, wenn der nvidia Treiber installiert ist. Das heißt, dass sämtliche Mesa 3D-Treiber auch nicht funktionieren, also im speziellen nouveau, radeon, intel, und swrast (Mesa’s Software Renderer). Letzteres bedeutet, dass man z.B. GNOME im Recovery Mode nicht starten kann, wenn der nvidia Treiber installiert ist.

Das Skript setzt die Bibliotheken auf die Systemversionen zurück, wenn du den Intel-Treiber benutzen willst.

Du sollst einfach nur das “/sbin/ldconfig” in den vorhandenen Abschnitt einfügen, sodass er dann genauso aussieht wie ich gepostet habe.
Das ist jetzt aber für das alte Skript, also das ganze sollte dann so ausschauen:

mode=$(/sbin/lspci | egrep 'VGA|3D');

#Make sure we are in command of /usr/X11R6/lib
if  -e /etc/ld.so.conf.d/nvidia-gfxG0*.conf ]; then
    /bin/rm /etc/ld.so.conf.d/nvidia-gfxG0*.conf
fi


#Check graphics mode and take apropriate action
if  `echo $mode | grep -c "Intel" ` -gt 0 ]; then
      /usr/sbin/update-alternatives --set libglx.so /usr/lib64/xorg/modules/extensions/xorg/xorg-libglx.so
      /sbin/ldconfig
fi


if  -e /usr/X11R6/lib64/libGL.so.1 ]; then
    /bin/rm /usr/X11R6/lib64/libGL.so.1
fi


if  -e /usr/X11R6/lib/libGL.so.1 ]; then
    /bin/rm /usr/X11R6/lib/libGL.so.1
fi


if  `echo $mode | grep -c "NVIDIA" ` -gt 0 ]; then
    /usr/sbin/update-alternatives --set libglx.so /usr/lib64/xorg/modules/extensions/nvidia/nvidia-libglx.so
    /sbin/ldconfig /usr/X11R6/lib64
    /sbin/ldconfig /usr/X11R6/lib
fi

So, ich habe das jetzt mal unter beiden GraKas ausprobiert, es läuft. Bei Nvidia ist das Bild von glxgears halt komisch, weil die Karte Frameraten von ca. 75 fps ausspuckt, aber was soll’s!

Hey, geschafft, herzlichen Dank!

Du solltest in “nvidia-settings” VSync für den nvidia Treiber ein/ausschalten können, soweit ich weiß.

Hey, geschafft, herzlichen Dank!

Ok, dann wars also nur die fehlende ldconfig Zeile…
Gut zu wissen, danke für die Rückmeldung. :slight_smile: