Mac/故障排除
本文档包含 Apple Mac 的故障排除解决方案。大多数型号在 笔记本/Apple 中都有自己的章节,以提供更具体的帮助。
视频
不同的 Mac 型号拥有不同的显卡。要查看您拥有哪种显卡,请键入
$ lspci -nnd ::03xx
- 如果返回的字符串包含
Intel,请阅读 Intel graphics。 - 如果返回
NVIDIA,请阅读 NVIDIA。 - 如果返回两行,同时包含
NVIDIA和Intel,则您的 Mac 具有双显卡。请参阅 MacBookPro10,x#Graphics 了解一个可能适用于其他情况的此类设置的示例。
NVIDIA
如果您在 EFI 模式下启动,而 NVIDIA 二进制驱动仅在 BIOS 模式下工作(例如,在 EFI 启动时出现黑屏),请尝试 Ask Ubuntu 上描述的方法。
为了使背光正常工作,您可能需要 nvidia-bl-dkmsAUR 包。如果在此之后背光控制仍无效,您应该 禁用 apple_bl 内核模块。如果即使这样背光控制仍然无效,请尝试在 /etc/modprobe.d/nvidia_bl.conf 中设置 options nvidia_bl max_level=0x1ffff shift=11。
或者,您可以选择使用 pommed-lightAUR 包。如果这样做,您可能希望将 /etc/pommed.conf.mactel 中的步进设置更改为 5000-10000 之间,具体取决于您想要的亮度级别(最大亮度约为 80000)。
如果通过 pommed 无法正确调节亮度,请确保您已安装 nvidia-bl-dkmsAUR 包并插入
$ find . -name "*" -exec sed -i 's/mbp_backlight/nvidia_backlight/' '{}' \;
到 pommed PKGBUILD 的 build() 函数的第二行,然后重新构建包。有关详细信息,请参阅以下 论坛帖子。
另一个可能的解决方案是
$ find . -name "*" -exec sed -i 's/nvidia_backlight/apple_backlight/' '{}' \;
或者,运行 nvidia-settings,编辑 /etc/X11/xorg.conf 并在 Device 部分添加此行
Option "RegistryDwords" "EnableBrightnessControl=1"
保存,重启并检查背光控制是否工作。有关详细信息,请参阅 Ubuntu 的 MacBookPro5,5 的 Wiki 页面。
触控板
触控板应默认具有基本功能。一个非常类似于原生 macOS 的真正多点触控驱动程序包含在 xf86-input-mtrack-gitAUR 包中。配置选项记录在 readme 中。
以下 mtrack 选项在 MacBook7,1 上效果很好
Option "Thumbsize" "50" Option "ScrollDistance" "100"
可能还需要添加
MatchDevicePath "/dev/input/event10"
要默认禁用点击即点(即按下以点击),请在您的 mtrack 配置部分添加以下内容
Option "TapButton1" "0" Option "TapButton2" "0" Option "TapButton3" "0"
自然滚动
要配置类似于 macOS 的自然双指滚动,请参阅 Touchpad Synaptics#Natural scrolling。
如果您使用的是 xf86-input-mtrack-gitAUR,您可以简单地交换向上滚动和向下滚动按钮(以及向左滚动和向右滚动)
/etc/X11/xorg.conf.d/10-mtrack.conf
Option "ScrollUpButton" "5" Option "ScrollDownButton" "4" Option "ScrollLeftButton" "7" Option "ScrollRightButton" "6"
较旧的 MacBook 型号
在较旧的 MacBook 型号(非多点触控,例如 MacBook2,1)上,触控板在您 安装 xf86-input-synaptics 之前将无法正常工作。有关详细信息,请参阅 Touchpad Synaptics。
键盘
Mac 键盘默认可用。要交换 Fn 键和 Fx 键,请参阅 Apple Keyboard。
使用 xbindkeys 或 桌面环境首选项进行映射。或者,安装 pommed-lightAUR 包。
根据您的硬件编辑 /etc/pommed.conf,从 /etc/pommed.conf.mac 或 /etc/pommed.conf.ppc 示例文件中构建。
请注意,您也可以在没有配置文件的情况下运行它,默认设置可能对您有效。然后 启用/启动 pommed.service。
键盘背光
键盘背光由 /sys/class/leds/smc::kbd_backlight 控制。将所需值写入该目录中的 brightness。有关详细信息,请参阅 Keyboard backlight。背光控制的常见选择包括 brightnessctl 和 lightAUR。
确保在输入 LUKS 解密密码时键盘背光亮起
这可以通过 initcpio 钩子完成。首先,创建一个 可执行的安装脚本
/etc/initcpio/install/mac_kb_backlight
#!/usr/bin/env bash
build() {
add_module applesmc
add_runscript
}
接下来,创建一个可执行钩子
/etc/initcpio/hooks/mac_kb_backlight
#!/usr/bin/env bash
run_hook() {
if [ -f "/sys/class/leds/smc::kbd_backlight/brightness" ]; then
echo 100 > "/sys/class/leds/smc::kbd_backlight/brightness"
fi
}
最后,将此自定义钩子添加到 /etc/mkinitcpio.conf 的 HOOKS 数组中,并确保它位于 encrypt 钩子之前
HOOKS=(... mac_kb_backlight encrypt ...)
请记住在完成这些步骤后 重新生成 initramfs 映像以包含自定义脚本。
Wi-Fi
不同的 Mac 型号拥有不同的无线网卡。
检查您拥有哪种网卡
# lspci -nnd ::0280
- 如果您拥有 Atheros 网卡,一切应该都可以开箱即用。
- 如果您拥有 Broadcom 网卡,请遵循 Broadcom wireless#Installation。
- 5.0 和 6.0 代 Mac 可能有 BCM43xx,请遵循 Broadcom wireless#broadcom-wl。
- 如果您已安装正确的 Broadcom DKMS 驱动程序(即 broadcom-wl-dkms)并且您的 Wi-Fi 网卡仍未被识别,请尝试重新构建驱动程序(请参阅 Dynamic Kernel Module Support)。
- 如果您的连接经常断开,您可能需要关闭 Wi-Fi 电源管理。
- Eduroam 或类似服务可能会导致您的网络管理器崩溃。只需在登录后延迟连接即可解决问题。
风扇控制
macfand-gitAUR 是一个风扇控制守护进程,支持大多数 Intel Mac,其配置文件位于 /etc/macfand.conf。
mbpfan-gitAUR 可用于 MacBook Pro 用户。
电源 management
TLP 是一套非常简单的脚本,可以最大化您的电池续航时间。仅安装 TLP 的 MacBook Air 2013 在轻度使用下可提供约 11 小时的续航。所有常规的 电源管理 建议也同样适用。
禁用 Thunderbolt
Linux 在 Mac 上对 Thunderbolt 适配器的电源管理仍然很差。这可能导致 TB 适配器始终处于开启状态,并阻止 CPU 进入最深的省电状态 [1],即使在不使用时也会消耗约 2W 的额外电量 [2]。使用 powertop 查看 CPU 状态的一种简单方法。问题出现在 CPU 作为包(Pkg%pc3)时无法低于 C3。
一种解决方法是在 内核参数 中添加 acpi_osi=!Darwin,从而告知固件该系统与 macOS 不兼容 [3]。这应该会禁用 TB 适配器(至少在较旧的 Mac 上),从而大大降低功耗,但可能会带来副作用(例如,无法使用 Thunderbolt,可能还有其他?)。
还可以 禁用 thunderbolt 模块,然后通过以下方式将控制器置于睡眠状态
# echo auto > /sys/bus/pci/devices/0000:07:00.0/power/control
使用 lspci 检查正确的设备号。这也可以 自动化。此方法可略微降低功耗,但在 MacBook Air 2013 上仍比前一种方法多消耗 0.9W。
待机和休眠
据报道,在某些情况下,当通过合上盖子进行挂起时,机器会在恢复后立即“挂起”。通过使用 dconf-editor 将选项 "sleep-inactive-ac-type" 设置为 "nothing" 来解决此问题,选项路径为:org → gnome → settings-daemon → plugins → power)。
有关如何配置休眠的详细信息,请参阅 Suspend and hibernate。值得注意的是,您将需要一个交换分区或文件(请参阅上述文章了解更多说明)。
通过禁用 Thunderbolt 可以解决从挂起状态唤醒缓慢的问题。请参阅 #禁用 Thunderbolt。
挂起后唤醒
有时 Mac 笔记本电脑会在挂起后立即唤醒。这可能不立即显现,因为尽管系统已唤醒,屏幕可能保持关闭状态,并且可以通过检查键盘背光是否亮起来确认。
在 /proc/acpi/wakeup 中,检查 XHC1 和 LID0 是否已启用。如果已启用,您可以暂时禁用 LID0 以查看问题是否解决
# echo LID0 > /proc/acpi/wakeup
要使更改持久化,请 创建
/etc/systemd/system/suspend-fix.service
[Unit] Description=Fix for the suspend issue [Service] Type=oneshot ExecStart=/bin/sh -c "echo LID0 > /proc/acpi/wakeup" [Install] WantedBy=multi-user.target
然后 启用/启动 suspend-fix.service。要从此状态唤醒系统,请使用键盘。
如果这不能解决问题,XHC1 可能是问题所在,您可以暂时禁用它和 LID0 以查看问题是否消失
# echo XHC1 > /proc/acpi/wakeup && echo LID0 > /proc/acpi/wakeup
不建议在此 Bug 中仅禁用 XHC1,因为它可能导致 glitchy 行为。每次启动时禁用两者如下
/etc/systemd/system/suspend-fix.service
[Unit] Description=Fix for the suspend issue [Service] Type=oneshot ExecStart=/bin/sh -c "echo XHC1 > /proc/acpi/wakeup && echo LID0 > /proc/acpi/wakeup" [Install] WantedBy=multi-user.target
要从此状态唤醒系统,只能使用电源按钮。
光传感器
可以从 /sys/devices/platform/applesmc.768/light 读取值:它返回类似 (4,0) 的双元组。
如果您想使用内置光传感器自动调整屏幕和键盘背光亮度
- macbook-lighter — Macbook 屏幕/键盘背光 CLI 和根据环境光自动调节。
- Lightum — 需要 Gnome 或 KDE,但比 Lighter 更旧、更完整
声音
首先请遵循 ALSA Wiki 页面,然后如果有些东西不起作用,请继续阅读本节。
内核选项
编辑您的 /etc/modprobe.d/50-sound.conf 或 /etc/modprobe.d/modprobe.conf,添加此行
options snd_hda_intel model=intel-mac-auto
这应该会自动指定您 Mac 中的编解码器。
/etc/modprobe.d 时,请通过重启进行测试。特定型号可能需要更多帮助。您可以尝试根据您的硬件指定其他选项。所有可能的设置都列在内核文档中,可在线获取
型号特定
例如,如果您拥有 MacBookPro12,1,您可能需要
options snd-hda-intel index=1,0
而不是。或者,对于 MacBookPro5,X,您可以使用
options snd_hda_intel model=mb5
(请注意,插孔输出由 "HP" 控制)。
如果您拥有 iMac8,1,您应该改用
options snd-hda-intel model=mbp3 position_fix=2
对于铝制 iMac,请参阅 iMac Aluminium#Getting sound to work right
对于配备 SigmaTel STAC9221 A1 芯片的 MacBook2,1(2008 年末/2009 年初),请使用
options snd_hda_intel model=macbook
禁用 S/PDIF
一些(大多数?)Mac 型号在与耳机插孔相同的插孔中有一个光纤 S/PDIF 音频插孔。当它激活时,您会看到从耳机插孔发出的红光。它可以欺骗 PulseAudio 优先使用它并将所有音频路由到它。
如果您没有收到任何声音输入或输出,请确认 pavucontrol > Configuration > Profile 显示的是 "Analog Stereo Duplex" 而不是 "Digital"
或者只运行
$ pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo
另外,请检查是否需要编辑 /usr/share/alsa-card-profile/mixer/paths/ 来解决导致 PulseAudio 故障转移到 "Digital" 的错误插头检测。
有关如何编辑此文件以使 MacBook2,1 的麦克风工作的说明,请参阅 Laptop/Apple#Microphone。
自动静音模式
使用耳机插孔时,内置扬声器可能不会被禁用。要解决此问题,请启用 "Auto-Mute Mode"(自动静音模式)。
您可以使用 alsamixer 执行此操作
- 运行
alsamixer - 按
F6并选择default:0 HDA Intel以获取更详细的控件 - 使用箭头键选择 "Auto-Mute Mode"
- 按
Space启用它
或使用 amixer
$ amixer -c 0 cset name='Auto-Mute Mode' 1
可选地,以 root 身份运行 alsactl store 以使更改永久生效。
USB 音频接口
在某些情况下,使用 USB 音频接口而不是直接使用插孔来设置声音可能会更容易。
使用 pavucontrol,转到 Configuration,为所有设备选择 Off,并为您的 USB 设备选择 Analog Stereo Duplex。然后,您可以使用 USB 设备上的耳机插孔连接扬声器或耳机。这应该立即开始工作并在启动时可用。
蓝牙
蓝牙应开箱即用。请参阅 Bluetooth 文章以安装和配置所有必需的软件。
Magic Mouse
如果您使用 Magic Mouse,它应该能很好地开箱即用。您可能想要调整一些设置,例如 scroll-speed 或 acceleration。目前没有 GUI 可以进行这些设置。设置这些设置的唯一方法是通过参数指令内核驱动程序 (hid_magicmouse)。为您的鼠标创建一个 modprobe 配置文件。
/etc/modprobe.d/magicmouse.conf
options hid_magicmouse scroll-speed=55 scroll-acceleration=1 emulate_3button=0
这将指示驱动程序具有快速的滚动速度,采用指数加速,并且不模拟 3 键鼠标。您可以在 /sys/module/hid_magicmouse/parameters 中找到所有参数及其当前设置的概述。
要尝试不同的设置而不重新启动,您也可以通过命令行进行设置
# echo 55 > /sys/module/hid_magicmouse/parameters/scroll_speed
摄像头
iSight
isight-firmware-tools 不正常工作时才使用它。MacBook 或 6,2 之前的 MacBook Pro(6,2 大约在 2010 年发布)上的 iSight 网络摄像头需要 Apple 的专有固件,该固件不可再分发。必须从 macOS 中提取并加载到 Arch。
有一个预先提取的副本,即 isight-firmwareAUR 包。
如果您想自己动手,则需要安装 isight-firmware-toolsAUR 来提取固件。此包还包含一个 udev 规则和一个 ELF 二进制文件,即使您已将固件文件提取到 /lib/firmware/isight.fw,这些文件在每次启动计算机时也是必需的(即 /etc/udev/rules.d/isight.rules,它使用 /usr/lib/udev/ift-load)。
操作指南
首先,您需要从 macOS 安装中的特定文件中提取固件。它位于 /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS/AppleUSBVideoSupport。
AppleUSBVideoSupport 文件可能无法正常工作。如果可能,请使用 OS X 10.5 或更早版本的文件。如果多重启动,请挂载 macOS 驱动器
# mkdir /media/macOS # mount -t hfsplus /dev/sda2 /media/macOS
您也可以从 https://archive.org/details/AppleUSBVideoSupport 下载该文件的副本。
然后,安装 isight-firmware-toolsAUR 包。
在上面的 macOS 目录中找到 AppleUSBVideoSupport 文件。将其复制到您的 Arch 系统(任何 macOS 安装都可以,例如 iMac,不限于您的特定系统)或,如果是多重启动,则挂载 macOS 驱动器并导航到该目录。(在 10.6 (Snow Leopard) 和 10.7 (Lion) 中,目录是 /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS。)在该目录中,您可以继续提取驱动程序
# ift-extract --apple-driver AppleUSBVideoSupport
完成后,检查是否已找到固件
# ls /usr/lib/firmware/isight.fw
一旦成功,请完全关闭您的 Mac 然后重新启动(以清除网络摄像头的硬件状态)。请不要重新启动。
它应该在启动时自动加载;如果未加载,您可以 手动加载 uvcvideo 模块或在启动时加载它。
FaceTime 高清摄像头
最近的 Mac 包含 FaceTime HD 摄像头,它可能通过 PCIe 连接。您可以通过查看 lspci 的输出中是否包含 "FaceTime HD Camera" 来确认。 facetimehd-dkmsAUR 和 facetimehd-dataAUR 包安装了一个 facetimehd 模块(和固件)来支持这些设备。安装后,该模块应自动加载。
如果网络摄像头显示不正确的颜色,这可能是由于缺少传感器校准文件。有关从 Apple BootCamp 驱动程序中提取校准文件的说明,请参阅本文档:https://github.com/patjak/facetimehd/wiki/Extracting-the-sensor-calibration-files
有关测试应用程序,请参阅 Multimedia#Webcam。
温度传感器
要读取温度,只需安装 lm_sensors。有关更多信息,请参阅 lm_sensors。
避免 EFI 启动前的长时间等待
如果您的 Mac 在启动前花费 30 秒在“白屏”状态,您需要告诉固件启动分区的位置。这可以通过 MacOS 中的 bless 工具来完成。
启动 macOS 并打开终端。如果您没有安装 MacOS,您有几种选择
- 将 Mac 启动到 MacOS 恢复模式
- 使用 MacOS 安装 DVD
- 从另一台 Mac 启动(通过 firewire 或 thunderbolt 连接两台计算机,按住 T 键启动另一台 Mac,按住 Options 按钮(alt)启动您的 Mac)。
无论哪种方式,一旦您在 Mac 上运行了 macOS 终端,您就需要执行以下命令,如果启动分区是 EFI
# bless --device /dev/diskXsY --file=/Volumes/efi/EFI/BOOT/BOOTX64.EFI --setBoot
或者如果启动分区不是 EFI
# bless --device /dev/diskXsY --setBoot --legacy
要了解 --device 的值,您可以使用 diskutil list 命令打印分区列表,然后找到您的启动分区。
另请参阅 https://bbs.archlinux.org/viewtopic.php?pid=833215。
kworker 使用高 CPU
有时在 Yosemite 添加后,一些用户发现 kworker CPU 使用率会激增,如 此处的讨论。这有时是由于 ACPI 中断失控造成的。
要检查,您可以计算最近的 ACPI 中断数量,并查看其中是否有失控的。
$ grep . -r /sys/firmware/acpi/interrupts/
如果您发现某个特定中断失控(可能是 GPE66),即注册了数十万行,您可以尝试禁用它(将 XX 替换为失控中断)
# echo "disable" > /sys/firmware/acpi/interrupts/gpeXX
禁用随机 ACPI 中断可能会导致各种问题,因此请自行承担风险。如果这能解决问题,有关如何创建 systemd 服务以在每次启动时自动禁用中断的讨论,请参阅 此处。
Mavericks 升级破坏了 Arch 启动选项
对于一些使用独立 Linux 启动分区的多重启动用户,OS X Mavericks 升级可能会用 Apple 自带的恢复引导文件系统覆盖启动分区。这会破坏 rEFIt/rEFInd 中的 Arch Linux 启动选项。在此情况下,最好的处理方式是放弃独立的启动分区,而使用 EFI 系统分区 (ESP) 来安装您选择的引导加载程序。还建议您使用 rEFInd 而不是 rEFIt,因为后者的开发已停止。
假设 grub2 是引导加载程序
使用 Arch LiveCD 启动到 shell,然后 chroot 到您损坏的 Arch Linux 环境。
将 ESP 挂载到 /boot。
编辑 fstab 并删除旧的启动分区,使 ESP 成为新的启动分区。现在将 ESP 挂载为新的 /boot 分区。
# mount -a
在 /boot 中创建一个新的 initramfs 和 vmlinuz。
# mkinitcpio -p linux
安装 grub。
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck --debug
创建一个新的 grub.cfg 文件。
# grub-mkconfig -o /boot/EFI/grub/grub.cfg
确保 grub.cfg 与 grubx64.efi 在同一个目录中。
通过简单地运行 rEFInd 附带的 mkrlconf.sh,在 /boot 中生成一个新的 refind_linux.conf 文件。
退出 chroot 环境。
重启。您应该会在 rEFInd 中看到 Arch Linux 的新条目,并且它应该可以启动到您的 Arch Linux 安装。