2012款Macbook Pro使用eGPU外置显卡教程

硬件情况:
笔记本:MacBook Pro (Retina, Mid 2012)
显卡:GIGABYTE RX5600xt
显示器:ViewSonic VX2780-4K-HD-2
显卡坞:Mantiz Saturn Pro
数据线:Thunderbolt1/2转Thunderbolt3,Thunderbolt2线

解决的问题:
1,笔记本连接显卡坞后五国死机问题
2,外屏无法从显示器休眠状态正常唤醒的问题
3,电脑系统休眠无法正常唤醒的问题
4,外接屏幕操作卡顿的问题
5,系统休眠唤醒后内屏背光不亮的问题
6,批处理设置让应用程序默认使用eGPU渲染
7,禁用内置独显后无法启动系统的问题
8,无法使用键盘快捷键进行显示器亮度调节问题
9,系统无法进入到恢复模式(⌘+R)五国问题

几年前看到苹果说可以使用外置显卡了,很心动,但是看到说本子要有雷电3的接口才能使用,就没有深入的研究,直到前几天恰巧有朋友在朋友圈分享了外置显卡的使用消息,也恰巧笔记本是同年同款,几经折腾后便有了这篇教程.

很多人可能会不理解,这么折腾,钱也没少花,换个本子不好吗?另配一台PC不好吗?我的看法是这样的,这些电子设备是有感情的,不到万不得已我是不舍得抛弃它们,平时几乎不用Windows,多台电脑又会涉及到数据同步和使用参数配置等问题,新款苹果本子的仅有4个雷电3接口我目前还不能接受,虽然我这台2012年的本子,但当时订制的16G内存,2.6GHz酷睿i7处理器现在看来也不算差.而有了外置显卡,将来显卡能继续升级,购买新本子也不用在内置显卡上做特别考虑.总之,是因为贫穷.哈哈.

老本子使用外置显卡还是挺坎坷的,尤其是双显卡(板载显卡+独立显卡)的本子,我这本子就是,因为涉及到独立显卡与外置显卡冲突的问题,如果本子仅有板载显卡反而简单很多,休眠唤醒等问题都不会出现.因为雷电1/2的速率问题,要从显卡坞外接显示器才能最大的发挥eGPU的效能,如果不用外屏,感受起来连自带的独立显卡都不如.

相关外置显卡的硬件集全后,就可以配置软件环境来启用外置显卡了,我这本子现在是macOS Catalina v10.15.6版本系统,本子的雷电为1.0版本,很悲伤.通过雷电1/2转雷电3的转接头配合雷电2的线将eGPU连接到系统会导致系统直接五国死机,所以在环境未配置前不能将eGPU连接,

先要禁用系统文件的保护(Disable System Integrity Protection),即SIP,重启电脑的同时按住⌘+R引导至恢复模式,在Utilities > Terminal中输入命令禁用SIP:

csrutil disable

重启电脑正常进入系统,在有网的状态下使用终端输入下列命令下载安装PurgeWrangler(官网:https://github.com/mayankk2308/purge-wrangler),用来解决使用eGPU五国等问题:

curl -qLs $(curl -qLs https://bit.ly/2WtIESm | grep '"browser_download_url":' | cut -d'"' -f4) > purge-wrangler.sh; sh purge-wrangler.sh; rm purge-wrangler.sh

安装成功后可以看到PurgeWrangler的菜单,也可以通过只输入”Purge-Wrangler”来运行它,菜单如下:

菜单中我们输入1,选择Setup eGPU,在它搜索eGPU时,按ESC取消它,我们进行手动安装,Ti82 Support(它是用于支持老显卡坞设备),我们选N,然后选AMD GPU的支持,Leagcy AMD Support(老AMD显卡支持)我们也选N,执行完成后根据提示重启系统,这次连接eGPU的雷达线,外置显卡将正常识别,状态栏中会有图标和弹出菜单:

当连接了eGPU后,所有的应用属性中将增加”Prefer External GPU”,即预设当前应用程序使用外置显卡:

可以根据需要将对个别应用程序进行设置,默认是为开启状态,也并没有全局开关,这时候可以用set-egpu(官网:https://github.com/mayankk2308/set-egpu)命令行进行批量设置,安装命令如下:

curl -q -s "https://api.github.com/repos/mayankk2308/set-egpu/releases/latest" | grep '"browser_download_url":' | sed -E 's/.*"browser_download_url":[ \t]*"([^"]+)".*/\1/' | xargs curl -L -s -0 > set-eGPU.sh && chmod +x set-eGPU.sh && ./set-eGPU.sh && rm set-eGPU.sh

终端中使用”set-eGPU”可换出该命令,使用”Prefer eGPU – All Applications”菜单,它将遍历Application目录下所有应用程序进行勾选Prefer External GPU的设置,而”Prefer eGPU – All Applications At Target”菜单则可以指定目标目录下的应用程序进行批量设置.

为了让eGPU发挥应有的性能,要在显卡坞上直连外屏显示器才有效果,这里我使用DP线连接了4k的显示器,但是外屏会呈现特别卡顿的状态,所有操作都慢几秒才响应,这是本子自带的NV独立显卡与eGPU显卡冲突导致.这就需要使用PurgeNVDA(官网:https://github.com/mayankk2308/purge-nvda)进行独立显卡的禁用,使用下列命令进行安装:

curl -q -s "https://api.github.com/repos/mayankk2308/purge-nvda/releases/latest" | grep '"browser_download_url":' | sed -E 's/.*"browser_download_url":[ \t]*"([^"]+)".*/\1/' | xargs curl -L -s -0 > purge-nvda.sh && chmod +x purge-nvda.sh && ./purge-nvda.sh && rm purge-nvda.sh

在终端中使用”purge-nvda”命令呼出菜单,执行菜单中”AMD eGPU”命令,正常情况下重启电脑外屏就会无卡顿正常使用了.按时我遇到了无法正常启动系统的问题,经过资料搜索才了解到一些未知原因要先执行”Set Mux to iGPU”命令,如果系统已经无法正常引导,可在启动时按住⌘ + S进行到单用户模式,命令行呼出”purge-nvda”执行”Set Mux to iGPU”命令,重启后再执行”AMD eGPUs”命令方可使用.是不是很惊险刺激.

至此eGPU基本可以正常使用了,但是还有一些问题要解决,比如不能使用系统休眠,不能正常唤醒休眠的外屏等,这就需要从EFI层面屏蔽本子的独立显卡才可以,这里我们需要一个优盘,把它做成引导盘执行禁用显卡的命令,这里综合了两位大神的方法,他们其实并不是为了eGPU,而是超了质保期后内置显卡故障无法启动电脑才琢磨的办法,链接分别是https://gist.github.com/blackgate/17ac402e35d2f7e0f1c9708db3dc7a44https://tim.palpant.us/sysadmin/macos/2018/09/09/nvda-gpu-wake-handler/#disable-nvidia-gpu-in-bios,从网上下载ubuntu镜像(http://old-releases.ubuntu.com/releases/17.10/ubuntu-17.10.1-desktop-amd64.iso)提取boot文件或直接用我这个提取出来的文件(iso中的EFI和boot文件夹):

把这两个文件夹复制到已格式化为fat格式的优盘中,用文本编辑器打开boot/grub/grup.cfg文件,将里面的内容替换为下面的内容,即引导菜单将出现两项,一项为禁用内置独显后进入系统,一项为不禁用显卡正常进入系统:

set timeout=3
set default="1"
menuentry "Native MacOS" {
	exit
}
menuentry "macOS & eGPU" {
  outb 0x7c2 1
  outb 0x7d4 0x28
  outb 0x7c2 2
  outb 0x7d4 0x10
  outb 0x7c2 2
  outb 0x7d4 0x40

  outb 0x7c2 1
  outb 0x7d4 0x50
  outb 0x7c2 0
  outb 0x7d4 0x50
  exit
}

按住option(alt)键重启系统,看到引导盘符选择后选择优盘引导,进入到系统后从系统报告中可以看到内置独显消失了:

每次启动都需要如此引导系统略有不便,可以将优盘文件写入本子的系统引导区,用如下命令即可:

cd /Volumes
sudo mkdir efi
sudo mount -t msdos /dev/disk0s1 /Volumes/efi
sudo mkdir /Volumes/efi/boot
sudo mkdir /Volumes/efi/EFI/grub
sudo cp -R /Volumes/优盘名/boot/ /Volumes/efi/boot
sudo cp -R /Volumes/优盘名/EFI/boot/ /Volumes/efi/EFI/grub
sudo bless --folder=/Volumes/efi --file=/Volumes/efi/EFI/grub/grubx64.efi --setBoot
sudo bless --mount=/Volumes/efi --file=/Volumes/efi/EFI/grub/grubx64.efi --setBoot

这样设置后就不用优盘,重启时会自动到引导菜单,根据需要选择进入系统即可,每当macOS系统升级,该引导区文件将会被重置,使用下列命令重设即可:

cd /Volumes
sudo mkdir efi
sudo mount -t msdos /dev/disk0s1 /Volumes/efi
sudo bless --folder=/Volumes/efi --file=/Volumes/efi/EFI/grub/grubx64.efi --setBoot
sudo bless --mount=/Volumes/efi --file=/Volumes/efi/EFI/grub/grubx64.efi --setBoot

经过上述步骤,系统休眠与外屏唤醒都将正常,但是关机不能正常执行,关机命令后需要按电源键强行关机,目前没有解决方案,因为文件都已在关机命令下正常关闭,这时强行关机也不会有不良影响.

如需键盘调节外屏亮度,可以下载使用NativeDisplayBrightness软件(官网:https://github.com/KAMIKAZEUA/NativeDisplayBrightness),它是通过DDC/CI接口来设置显示器,如果使用该软件调节亮度,外屏无明暗变化但是会闪烁,可查看是否开启了显示器的HDR功能,关闭HDR即可:

当使用Sleep,让系统进入休眠后,再次唤醒会发现本子内屏是黑的,背光无法亮起,是系统在唤醒后不能找到内置的独显导致异常,可以使用NVDAGPUWakeHandler(官网:https://github.com/timpalpant/NVDAGPUWakeHandler)来修正这个问题:

sudo chown -R root:wheel /路径/NVDAGPUWakeHandler.kext
sudo kextload /路径/NVDAGPUWakeHandler.kext

该文件是kext,如果随着系统引导,在将影响未从EFI层级禁用显卡的正常系统引导,所以建议只在内屏无法亮起的情况下使用kextload命令加载它亮起内屏,而使用Sleep系统认为没有正确弹出eGPU,所以干脆不让电脑系统休眠了.

如果进入某些模式比如恢复模式(⌘+R),出现五国死机提示,尝试断开eGPU的雷电线即可.

折腾好这些后,近来的使用感受不亚于换了一台新电脑的兴奋,就写到这里,下次再见.

2012款Macbook Pro使用eGPU外置显卡教程》有2个想法

  1. 匿名说:

    你好, 请问对于没有内置独显, 只有核显的mbp, 是不是就没有休眠, 合盖后唤不醒的问题?

发表评论

电子邮件地址不会被公开。