
Ich habe ein Macbook Pro aus dem Jahr 2010 mit NVIDIA-Grafik und integrierter Intel-Grafik:
$ lspci|grep -i vga
00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 12)
01:00.0 VGA compatible controller: NVIDIA Corporation GT216M [GeForce GT 330M] (rev a2)
Wenn ich den proprietären NVIDIA-Treiber (340.76) installiere, bleibt das System beim Start des X-Servers hängen.mir wurde gesagtdass dies daran liegt, dass der NVIDIA-Treiber die speziellen Hardwareeigenschaften des Macbooks nicht unterstützt.
Ich würde daher gerne die NVIDIA-Grafik komplett abschalten und stattdessen nur die integrierte Intel-Grafik verwenden, da der Akku seit der Installation von Ubuntu bei Office-Arbeiten nur noch ca. 1,5 Stunden hält. Unter Mac OS hielt er bei ähnlichen Arbeiten ca. 3 Stunden.
Ich habe von zwei Möglichkeiten gelesen, das zu tun:
- Ausschalten des diskreten Grafikgeräts im BIOS
- oder Umschalten auf integrierte Grafik in
nvidia-settings
. - AKTUALISIERT:Booten in OS X und Erzwingen der integrierten Grafik in
gfxCardStatus
2.2.1.
Die erste Methode funktioniert bei mir nicht, da auf Macbooks kein BIOS vorhanden ist. Die zweite Methode funktioniert auch nicht, da ich die proprietären Treiber nicht wie oben beschrieben installieren kann.
Es handelt sich im Wesentlichen um eine Neuinstallation von Ubuntu 14.04 ohne nennenswerte Verbesserungen.
AKTUALISIEREN:Nach dem Lesen vieler Dokumentationen bin ich zu dem Schluss gekommen, dass dies nur mit Methode 3 auf dem Macbook Pro möglich ist, d. h. einemmussnoch OS X installiert haben, was ich nicht habe! Das ist wirklich beschissen, denn es bedeutet, dass ichkeine Möglichkeit die NVIDIA GPU auszuschalten.
Antwort1
Ich habe zufällig genau denselben Computer wie Sie. Ich habe mir ausgedacht, dass ich Grub ein paar Zeilen hinzufügen muss, um die diskrete Grafik auf EFI-Ebene zu deaktivieren:
$ cat /etc/grub.d/10_linux
# Use ELILO's generic "efifb" when it's known to be available.
# FIXME: We need an interface to select vesafb in case efifb can't be used.
if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then
echo " load_video" | sed "s/^/$submenu_indentation/"
else
if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then
echo " load_video" | sed "s/^/$submenu_indentation/"
fi
fi
if ([ "$ubuntu_recovery" = 0 ] || [ x$type != xrecovery ]) && \
([ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 1 ]); then
echo " gfxmode \$linux_gfx_mode" | sed "s/^/$submenu_indentation/"
fi
echo " outb 0x728 1" | sed "s/^/$submenu_indentation/"
echo " outb 0x710 2" | sed "s/^/$submenu_indentation/"
echo " outb 0x740 2" | sed "s/^/$submenu_indentation/"
echo " outb 0x750 0" | sed "s/^/$submenu_indentation/"
echo " insmod gzio" | sed "s/^/$submenu_indentation/"
echo " if [ x\$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi" | sed "s/^/$submenu_indentation/"
Ich habe einfach die Outb-Zeilen zwischen insmod gzio
und eingefügt linux_gfx_mode
. Zur Referenz:
outb 0x728 1 # Switch select
outb 0x710 2 # Switch display
outb 0x740 2 # Switch DDC
outb 0x750 0 # Power down discrete graphics
Dadurch wird die Grafik auf PCIe-Link-Ebene deaktiviert, sodass sie aus dem System verschwindet. Anders als bei macOS kann die IronLake Intel HD Graphics den externen Displayausgang steuern, allerdings ohne Audio.
Was Sie als Deaktivierung von IGPU durch den Mac beschrieben haben, sofern macOS nicht gebootet wird, gilt für alle Macs, die nach 2010 hergestellt wurden, oder alle Macs mit einem Sandy Bridge-Chip oder höher. (2010 = Nehalem, 1. Generation, 45 nm.) Der Trick mit apple_set_os.efi funktioniert vor 2011 nicht (vor 2011 verhielt sich damals alles, was mit EFI gebootet wurde, genau wie macOS, EFI überprüfte das Betriebssystem nicht, sondern stellte nur sicher, dass es nativ gebootet wurde und die integrierte Grafik aktivierte. Und die einzige Möglichkeit, ein Betriebssystem mit deaktiviertem IGPU zu booten, war ein Legacy-Boot, was wir nicht tun). Ich habe versucht, es auszuführen und es gibt aus, dass das Protokoll apple_set_os nicht gefunden wurde. Ich verwende 16.04.3 stabil und es ist eine so schöne Erfahrung, wenn man den Computer einmal ohne Abstürze verwenden kann.
Zu den proprietären Treibern von Nvidia: Ich habe einige OpenGL-Tests mit Dolphin-Emu und DRI_PRIME=1 durchgeführt und dabei ohne Outb 0x750 gebootet. Dadurch wurde die Verbindung der dGPU zum LVDS-Display deaktiviert, aber für das Rendern ohne Treiber verfügbar gelassen. Nouveau und proprietäre Treiber haben nahezu die gleiche Leistung. (Tatsächlich hat Nouveau die meisten Grenzfälle hier gewonnen.) Die NV50/Tesla-Architektur wird von Nouveau vielleicht am besten unterstützt. Daher würde ich eigentlich empfehlen, bei Nouveau zu bleiben.
Um Intel-Grafiken beim Booten dauerhaft zu aktivieren (solange die NVRAM-Variablen nicht gelöscht werden), können Sie Folgendes unter Linux tun:
mount -t efivarfs rw /sys/firmware/efi/efivars/ # make sure efi is mounted
sudo bash -c 'printf "\x07\x00\x00\x00\x01\x00\x00\x00" > /sys/firmware/efi/efivars/gpu-power-prefs-fa4ce28d-b62f-4c99-9cc3-6815686e30f9'
Sie können genau dasselbe auch unter macOS erreichen:
sudo nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00
Antwort2
Für diesen Adapter ist der richtige Treiber nvidia-340. Er kann folgendermaßen installiert werden:
sudo apt-get install nvidia-340 nvidia-prime
Antwort3
Dies ist ein Hack und sollte in den Quellen sorgfältig durchgelesen werden, aber möglicherweise hilft Ihnen das:
Macbooks deaktivieren die integrierte Intel-Grafik, wenn etwas anderes als MacOS gebootet wird. Sie können dem EFI eine Datei hinzufügen und eine Grub-Option hinzufügen, um sie kettenweise zu laden, damit das EFI denkt, es boote MacOS, sodass die gesamte Hardware während des Bootens aktiviert wird.
Holen Sie sich die neueste Version der binären EFI-Datei vonhttps://github.com/0xbb/apple_set_os.efi/releases
kopiere es in die gemountete EFI-Partition in einen neuen Unterordner
mkdir /boot/efi/EFI/custom
cp apple_set_os.efi /boot/efi/EFI/custom
zu /etc/grub.d/40_custom hinzufügen
search --no-floppy --set=root --label EFI
chainloader (${root})/EFI/custom/apple_set_os.efi
boot