Macbook Pro で NVIDIA グラフィックスをオフにする方法は?

Macbook Pro で NVIDIA グラフィックスをオフにする方法は?

私は NVIDIA グラフィックスおよび Intel 統合グラフィックスを搭載した 2010 年製の Macbook Pro を持っています。

$ 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 の特殊なハードウェア特性をサポートしていないためです。

Ubuntu をインストールしてから、オフィス ワークを行うとバッテリーが約 1.5 時間しか持たなくなったため、NVIDIA グラフィックスを完全にオフにして、代わりに Intel 統合グラフィックスのみを使用したいと思います。同様の作業を行うと、Mac OS で約 3 時間持ちました。

私はそれを実行する 2 つの方法について読んだことがあります:

  1. BIOSでディスクリートグラフィックデバイスをオフにする
  2. または統合グラフィックスに切り替えますnvidia-settings
  3. 更新しました:OS X を起動し、2.2.1 で統合グラフィックスを強制しますgfxCardStatus

Macbook には BIOS がないので、最初の方法は機能しません。2 番目の方法も、上記のように専用ドライバーをインストールできないので機能しません。

これは基本的に、特筆すべき調整のない 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との間にアウトラインを追加しました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 は外部ディスプレイ出力を駆動できますが、オーディオは駆動できません。

macOS を起動しない限り Mac が IGPU を無効にすると説明されていることは、2010 年以降に製造された Mac、または Sandy Bridge チップ以降を搭載した Mac に当てはまります (2010 = Nehalem、第 1 世代 45nm)。apple_set_os.efi トリックは 2011 年より前では機能しません (2011 年より前の当時、efi で起動されたものはすべて macOS とまったく同じように動作し、efi は OS をチェックせず、ネイティブで起動され、統合グラフィックスが有効になっていることを確認していました。また、IGPU を無効にして OS を起動する唯一の方法はレガシー ブートでしたが、これは行いません)。実行してみましたが、apple_set_os プロトコルが見つからないというメッセージが表示されます。私は 16.04.3 の安定版を実行していますが、クラッシュすることなくコンピューターを使用できるようになると、とても快適な体験になります。

nvidia のプロプライエタリ ドライバーについて: dolphin-emu と DRI_PRIME=1 で outb 0x750 なしで起動して OpenGL テストをいくつか実行しました。これにより、dGPU の lvds ディスプレイへの接続が無効になりますが、レンダリング用にヘッドレスで使用可能になります。Nouveau とプロプライエタリのパフォーマンスはほぼ同じです。(実際、ここでのエッジ ケースの大部分は nouveau が勝ちました) NV50/Tesla アーキテクチャは、おそらく nouveau でサポートされているアーキテクチャです。したがって、私は nouveau を使い続けることをお勧めします。

最後に、起動時に Intel グラフィックスを永続的に有効にするには (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

これはハックであり、ソースを注意深く読む必要がありますが、おそらくこれが役立つでしょう:

MacBook は、MacOS 以外が起動されると、Intel オンボード グラフィックを無効にします。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

関連情報