如何關閉 Macbook Pro 上的 NVIDIA 顯示卡?

如何關閉 Macbook Pro 上的 NVIDIA 顯示卡?

我有一台 2010 年的 Macbook Pro,配備 NVIDIA 顯示卡和 Intel 整合式顯示卡:

$ 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)

當我安裝專有 NVIDIA 驅動程式 (340.76) 時,啟動 X 伺服器時系統會掛起。我聽說了這是因為 NVIDIA 驅動程式不支援 Macbook 的特殊硬體特性。

所以我想完全關閉 NVIDIA 顯示卡,只使用 Intel 整合式顯示卡,因為自從我安裝 Ubuntu 以來,電池在辦公室工作時只能維持約 1.5 小時。在 Mac OS 上進行類似工作時,它持續了大約 3 個小時。

我讀過兩種方法:

  1. 在 BIOS 中關閉獨立顯示卡設備
  2. 或切換到整合式顯示卡nvidia-settings
  3. 更新:啟動至 OS X 並強制使用 2.2.1 中的整合式顯示卡gfxCardStatus

第一種方法對我不起作用,因為 Macbook 上沒有 BIOS。第二種方法也不起作用,因為我無法安裝專有驅動程序,如上所述。

它基本上是 Ubuntu 14.04 的全新安裝,沒有任何值得一提的調整。

更新:在閱讀了大量文件後,我得出的結論是,這只能透過在 Macbook Pro 上使用方法 3 來實現,即必須仍然安裝了 OS X,但我還沒有!這真的很糟糕,因為這意味著我有沒有機會關閉 NVIDIA GPU

答案1

我剛好有跟你一模一樣的電腦。我的設計是在 grub 中添加幾行以在 efi 級別禁用獨立顯示卡:

$ 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/"

insmod gzio我剛剛在和之間添加了 outb 行linux_gfx_mode。以供參考:

outb 0x728 1 # Switch select
outb 0x710 2 # Switch display
outb 0x740 2 # Switch DDC
outb 0x750 0 # Power down discrete graphics 

這會停用 PCIe 連結層級的圖形,從而使其從系統中消失。與 macOS 不同的是,IronLake Intel HD Graphics 可以驅動外部顯示器輸出,但沒有音訊。

您所描述的 mac 停用 igpu 除非啟動 macOS 適用於 2010 年之後製造的任何 mac,或任何帶有 Sandy Bridge 晶片或更高版本的 mac。 (2010=nehalem,第一代45nm。)apple_set_os.efi 技巧在2011 年之前不起作用(2011 年之前,當時,任何使用efi 啟動的東西都將表現得與macOS 完全相同,efi 沒有檢查操作系統,只是它本地啟動,啟用集成顯示卡。我運行的是 16.04.3 穩定版本,一旦您可以使用電腦而不會崩潰,那真是一種很好的體驗。

關於 nvidia 專有驅動程式:我使用 dolphin-emu 進行了一些 opengl 測試,並且在沒有 outb 0x750 的情況下啟動 DRI_PRIME=1,因此禁用了 dGPU 與 lvds 顯示器的連接,但使其可用於無頭渲染。 Nouveau 和proprietary 具有幾乎相同的性能。 (事實上,這裡的大多數邊緣情況都是 nouveau 獲勝的)NV50/Tesla 架構可能是 nouveau 支援最好的。因此,我實際上建議留在 nouveau。

最後,要在啟動時永久啟用英特爾顯示卡(只要 nvram 變數不被刪除),您可以在 Linux 中執行此操作:

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'

您也可以在 macOS 上完成完全相同的操作:

sudo nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00

答案2

對於此適配器,正確的驅動程式是 nvidia-340。可以這樣安裝:

sudo apt-get install nvidia-340 nvidia-prime

答案3

這是一個 hack,應該仔細閱讀原始程式碼,但這可能對您有幫助:

如果啟動 MacOS 以外的其他系統,Macbook 會停用英特爾板載顯示卡。您可以將一個檔案新增至 efi 並新增一個 grub 選項來鍊式載入它,以使 efi 認為它正在引導 MacOS,以便在引導期間啟動所有硬體。

取得最新版本的二進位 efi 文件https://github.com/0xbb/apple_set_os.efi/releases

將其複製到掛載的efi分割區到一個新的子資料夾中

mkdir /boot/efi/EFI/custom
cp apple_set_os.efi /boot/efi/EFI/custom

新增到/etc/grub.d/40_custom

search --no-floppy --set=root --label EFI
chainloader (${root})/EFI/custom/apple_set_os.efi
boot

來源: https://github.com/0xbb/apple_set_os.efi

相關內容