MacBookPro10,x
本页面涵盖以下 Apple 型号
- MacbookPro10,1 MacBook Pro 15" Retina 2012 和 2013年初
- MacBookPro10,2 MacBook Pro 13" Retina 2012 和 2013年初
安装
准备硬盘
假设您想与 OS X 双启动,您必须使用磁盘工具来缩小其分区。您可以直接在此创建您的 Linux 分区,或者在安装过程中稍后在 Linux 中完成 (使用 parted 和 mkfs)。
获取无线固件
为了使 Wi-Fi 芯片组正常工作,您需要获取其固件。您可以直接从另一个启用 b43 的 Arch 系统复制,使用 b43-fwcutter 从 Broadcom 的驱动程序中提取,或者通过 b43-firmwareAUR 包获取固件。最终,您应该得到一个名为 b43 的文件夹,里面有很多 .fw 文件。
启动 Live 镜像
按住 Option 键,然后按电源按钮。几秒钟后,您应该会看到 Apple 的引导加载程序显示启动内置驱动器(带有 OS X)或您插入的 USB 驱动器的选项。
使用箭头键选择 Live USB,然后按 Enter 键启动到 Live Arch Linux 环境。
连接到 WiFi
将包含您的无线网卡固件的整个文件夹复制到 /usr/lib/firmware/。
安装
运行安装向导。当被要求分区硬盘时,创建一个小的 HFS 分区。安装完成后,您将把独立的 GRUB 包放在这里。其余安装过程与通常情况基本相同。在选择 引导加载程序 时,选择 GRUB 并安装它。不用担心任何错误;我们稍后将自己创建可引导的 EFI 镜像。
安装完成后,将 WiFi 固件直接复制到已安装的系统 /tmp/install/usr/lib/firmware/。
或者,安装 broadcom-wl-dkms 来改进 WiFi。
引导加载程序
直接 EFI 启动
截至 2013 年 8 月,rEFInd 可以自动检测 Arch 内核,无需将内核复制到 EFI 系统分区。只需 安装 refind 并在 refind.conf 中启用 scan_all_linux_kernels 和 also_scan_dirs 选项,有关说明请参阅 引导加载程序。
GRUB
另一个解决方案是安装 GRUB。编辑 /tmp/install/boot/grub/grub.cfg 并编辑启动项以加载 Linux mainline 而不是 normal one。同时再次将 noapic 添加到内核行。
现在 cd 进入 /tmp/install/ 并通过调用以下命令创建 GRUB 镜像
grub-mkstandalone -o grub-standalone-x86_64.efi -d usr/lib/grub/x86_64-efi -O x86_64-efi -C xz boot/grub/grub.cfg
这将创建一个名为 grub-standalone-x86_64.efi 的文件,其中包含 GRUB 和配置文件。重要的是 cd 到正确的目录,以便它能够获取配置文件并将其放置在镜像内的正确位置。
将此文件复制到您之前创建的 HFS 分区。此方法的缺点是,每次想要更改 GRUB 配置时都需要重复此步骤。
重启机器并启动到 OS X。HFS 分区应该会被挂载,并且 GRUB 独立镜像就在其中。按照此页面上的步骤创建文件,以使 Apple 引导加载程序能够加载 GRUB:https://mjg59.dreamwidth.org/7468.html。
创建文件后,在分区上的 GRUB 镜像上使用 bless。如果您想自动启动到 Arch,请添加 --setBoot。
再次重启后,如果您在 blessing 时没有使用 --setBoot,您应该可以通过在启动时按住 alt 键来选择已安装的 Arch Linux。
Wi-Fi
Macbook Pro 10,x 配备 Broadcom BCM4331 无线芯片组。
在 Arch Linux 中让此芯片组工作的两种主要选择是:
b43-firmwareAUR 包包含芯片组的开源、逆向工程固件。
broadcom-wl 和 broadcom-wl-dkms 包包含芯片组的专有、受限许可驱动程序。
有关更多信息,请参阅 Broadcom wireless。
图形
通用说明
笔记本电脑配有 nVidia 和 Intel 芯片。由于此设备配有 Retina (HiDPI) 显示屏,某些桌面环境的原生分辨率显示可能会非常小:请参阅 HiDPI。
Nouveau 背光
如果您使用开源 Nouveau 驱动程序且当前活动 GPU 是 Nvidia 卡,则可以通过将一个值 echo 到一个文件来调整背光级别
# echo 500 > /sys/class/backlight/gmux_backlight/brightness
将背光设置为最大级别
# echo $(cat /sys/class/backlight/gmux_backlight/max_brightness) > /sys/class/backlight/gmux_backlight/brightness
NVIDIA 背光
如果您使用专有 nvidia 驱动程序,请注意,开箱即用地调整背光将不起作用。
启用背光控制
# setpci -v -H1 -s 00:01.00 BRIDGE_CONTROL=0
使用 gpu-switch 在 GPU 之间切换
如果您使用开源 xf86-video-nouveau 和 xf86-video-intel 驱动程序,您可以在 Arch Linux 中使用 gpu-switchAUR 在独立 GPU 或集成 Intel GPU 之间切换显示输出。
安装
您可以从 AUR 安装 gpu-switchAUR。
然后,只需以 root 身份运行脚本。
用法
命令切换是 -i,用于切换到集成显卡,-d 用于切换到独立 GPU。为了使更改生效,您需要重启。
切换到 Intel 集成 GPU 并关闭独立 Nvidia GPU
切换到 Intel 显卡并关闭独立 GPU
$ /path/to/gpu-switch -i
然后重启。
使用 vgaswitcheroo 关闭独立 GPU
# echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
这需要一到两秒钟才能完成。
然后,检查独立 GPU 是否仍然开启
$ cat /sys/kernel/debug/vgaswitcheroo/switch
0:IGD:+:Pwr:0000:00:02.0 1:DIS: :Off:0000:01:00.0 2:DIS-Audio: :Off:0000:01:00.1
如果您选择仅安装 Arch Linux 并且无法访问仅限 OS X 的工具 iGPU,这将非常有用。
启动时保持独立 GPU 关闭
如果您想在启动时保持独立 GPU 关闭,请参阅 systemd-vgaswitcheroo-unitsAUR。
b43-firmware 下的图形花屏
在使用 b43-firmware 包的集成显卡下,您可能会遇到中度到严重的图形花屏,这似乎与无线网络流量有关。(断开连接 -> 无花屏,连接 -> 周期性花屏,大流量 -> 严重花屏/不可用)这可以通过删除/屏蔽 b43-firmwareAUR 并使用 broadcom-wl 或 broadcom-wl-dkms 来解决。
启用 Vsync
要防止屏幕撕裂,请参阅 Intel graphics#Tearing。
问题
- 在 15 英寸版本上使用 vgaswitcheroo 在 iGPU / dGPU 之间切换将导致黑屏。系统仍在运行,可以安全重启。
- dGPU/nouveau 在启动时处于活动状态。截至 3.10.3-1,切换到 iGPU/intel 的唯一已知方法是通过 MacOS 中的 gfxCardStatus v2.2.1 进行强制(较新版本的 gfxCardStatus *不起作用*)。此设置将在重启后保持。要恢复它,您必须重启两次 MacOS *或* 重置 SMC(关机并同时按住 Shift+Control+Alt+Power。再次按电源启动)。
- 强制 iGPU/intel 的另一种方法是将以下命令添加到
grub.cfg中的某个menuentry中,outb 0x7c2 1 outb 0x7d4 0x28 outb 0x7c2 2 outb 0x7d4 0x10 outb 0x7c2 2 outb 0x7d4 0x40 # Power down dGPU (will not work) #outb 0x7c2 1 #outb 0x7d4 0x50 #outb 0x7c2 0 #outb 0x7d4 0x50
在 Intel 驱动程序完全加载之前,屏幕将保持空白。请注意,dGPU 不会关闭(添加上面的代码将阻止系统启动)。变通方法是编译并运行以下程序(需要
sudo),在系统完全启动后:#include <stdio.h> #include <sys/io.h> #define GMUX_PORT_SWITCH_DISPLAY 0x10 #define GMUX_PORT_SWITCH_DDC 0x28 #define GMUX_PORT_SWITCH_EXTERNAL 0x40 #define GMUX_PORT_DISCRETE_POWER 0x50 #define GMUX_PORT_VALUE 0xc2 #define GMUX_PORT_READ 0xd0 #define GMUX_PORT_WRITE 0xd4 #define GMUX_IOSTART 0x700 typedef unsigned char u8; enum discrete_state {STATE_ON, STATE_OFF}; enum gpu_id {IGD, DIS}; static void index_write8(int port, u8 val) { outb(val, GMUX_IOSTART + GMUX_PORT_VALUE); outb((port & 0xff), GMUX_IOSTART + GMUX_PORT_WRITE); } static u8 index_read8(int port) { u8 val; outb((port & 0xff), GMUX_IOSTART + GMUX_PORT_READ); val = inb(GMUX_IOSTART + GMUX_PORT_VALUE); return val; } static void set_discrete_state(enum discrete_state state) { if (state == STATE_ON) { // switch on dGPU index_write8(GMUX_PORT_DISCRETE_POWER, 1); index_write8(GMUX_PORT_DISCRETE_POWER, 3); } else { // switch off dGPU index_write8(GMUX_PORT_DISCRETE_POWER, 1); index_write8(GMUX_PORT_DISCRETE_POWER, 0); } } static u8 get_discrete_state() { return index_read8(GMUX_PORT_DISCRETE_POWER); } static void switchto(enum gpu_id id) { if (id == IGD) { // switch to iGPU index_write8(GMUX_PORT_SWITCH_DDC, 1); index_write8(GMUX_PORT_SWITCH_DISPLAY, 2); index_write8(GMUX_PORT_SWITCH_EXTERNAL, 2); } else { // switch to dGPU index_write8(GMUX_PORT_SWITCH_DDC, 2); index_write8(GMUX_PORT_SWITCH_DISPLAY, 3); index_write8(GMUX_PORT_SWITCH_EXTERNAL, 3); } } int main(int argc, char **argv) { if (iopl(3) < 0) { perror("No IO permissions"); return 1; } //switchto(IGD); set_discrete_state(STATE_OFF); //printf("Discrete state: 0x%X\n", get_discrete_state()); return 0; }有关更多信息,请阅读 Linux 内核树中的 apple-gmux 驱动程序。
- "rmmod nouveau" 如果 dGPU 被 vgaswitcheroo 手动关闭,将导致崩溃。一旦发生这种情况,将无法干净地关机/重启。新的补丁(8 月 2 日)有望在未来解决此问题。(注意:要进入此故障状态,您必须使用 gfxCardStatus 强制使用 iGPU,然后显式使用 vgaswitcheroo。这种情况相当罕见。)
- dGPU / iGPU 问题不会影响 13 英寸 rmbp,它只有一个 Intel 适配器。简单得多!
- Nvidia 驱动程序 319.32 开箱即用无法挂起/恢复或控制背光。
- Nouveau 和 intel 运行良好。
- 如果您遇到 Nvidia 驱动程序问题,请尝试使用模拟 BIOS 启动而不是 EFI 启动。
音频
在 MacBookPro10,2 上,您可能需要使用 'snd_hda_intel' 驱动程序,并将 model 选项设置为 'mbp101'。此 model 选项应放在 modprobe 配置中;例如,将以下内容添加到 /etc/modprobe.d/alsa-base.conf (论坛帖子)
options snd-hda-intel model=mbp101
请注意,此 model 选项在网上提供的模型列表中并未记录,但效果非常好。(在此之前,通过 HDMI 的声音可能听起来还不错,但内置扬声器和内部麦克风可能无法正常工作。)
有关其他麦克风故障排除技巧,请参阅 Advanced Linux Sound Architecture/Troubleshooting#Microphone。
触控板
虽然 xf86-input-synaptics 可以工作,但触摸板的集成按钮可能会导致问题。使用 xf86-input-mtrack-gitAUR 驱动程序,并进行调整后的配置,应该可以获得更好的最终结果。
以下配置使用单指点击进行左键,两指点击进行中键,三指点击进行右键。
Section "InputClass"
MatchIsTouchpad "on"
Identifier "Touchpads"
Driver "mtrack"
Option "Sensitivity" "0.65"
Option "IgnoreThumb" "true"
Option "IgnorePalm" "true"
Option "TapButton1" "1"
Option "TapButton2" "3"
Option "TapButton3" "2"
Option "ClickFinger1" "1"
Option "ClickFinger2" "3"
Option "ClickFinger3" "2"
Option "BottomEdge" "25"
EndSection
要使用自然滚动,也请将以下内容添加到此部分中:
Option "ScrollDownButton" "4"
Option "ScrollUpButton" "5"
Option "ScrollLeftButton" "7"
Option "ScrollRightButton" "6"
有关更多配置,请查看 xf86-input-mtrack-gitAUR 的文档。
要禁用打字时触摸板,请安装 dispad-gitAUR 实用程序。
读卡器 (SDHCI/SDX)
内核 (4.7.x) 中目前存在一个 bug,即内部 SD 卡读卡器会超时。
作为一种变通方法,您需要重新加载 sdhci 内核模块,如:https://bugzilla.kernel.org/show_bug.cgi?id=73241#c55
# rmmod sdhci-pci sdhci # modprobe sdhci debug_quirks2=4 # modprobe sdhci-pci
参见
- Mac
- 笔记本/Apple
- 一个用于在 MBP Retina 10,2 上安装和配置 Arch (可选 KDE) 的 Puppet 模块,以及初始安装说明,可在 [1] 获得。它更新相当频繁,并且在其作者的笔记本上每天运行。
- https://ubuntuforums.org/showthread.php?t=2006475
- https://bbs.archlinux.org/viewtopic.php?id=144255&p=1