Mac/故障排除

来自 ArchWiki
< Mac

本页面包含 Apple Mac 的故障排除解决方案。大多数型号在 Laptop/Apple 中有自己的章节,以解决更具体的问题。

视频

不同的 Mac 型号有不同的显卡。要查看您拥有哪种显卡,请输入

$ lspci -d ::03xx
  • 如果返回的字符串包含 Intel,请阅读 Intel 显卡
  • 如果返回 NVIDIA,请阅读 NVIDIA
  • 如果返回两行,同时包含 NVIDIAIntel,则您的 Mac 具有双显卡。有关可能适用于其他情况的此类设置示例,请参阅 MacBookPro10,x#Graphics
警告: 尽管在线论坛上有很多困惑,但 Mac 上的双显卡不是基于 Optimus 的,并且将其视为基于 Optimus 将会破坏您的显卡。请参阅 MacBookPro10,x#使用 gpu-switch 切换 GPU 或您笔记本电脑的特定文章,以获取有关设置显卡切换的说明。
  • 否则,如果返回 ATIAMD,请阅读 ATIAMDGPU

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#自然滚动

如果您正在使用 xf86-input-mtrack-gitAUR,您可以简单地交换向上滚动和向下滚动按钮(以及向左滚动和向右滚动)

/etc/X11/xorg.conf.d/10-mtrack.conf
Option "ScrollUpButton" "5"
Option "ScrollDownButton" "4"
Option "ScrollLeftButton" "7"
Option "ScrollRightButton" "6"
提示: 对于希望向 Arch 添加更多 macOS 多点触控手势的用户,xSwipe 用于 Synaptics,或 fusuma 用于 libinput 提供了这些功能。

较旧的 MacBook 型号

在较旧的 MacBook 型号(多点触控之前,例如 MacBook2,1)上,在您安装 xf86-input-synaptics 之前,触摸板将无法正常工作。有关详细信息,请参阅 Touchpad Synaptics

提示: gpointing-device-settingsAUR 提供了一个简单的 GUI 用于配置 Synaptics。

键盘

Mac 键盘默认情况下工作正常。对于交换 Fn 键和 Fx 键,请参阅 Apple 键盘

使用 xbindkeys 或通过 桌面环境 首选项映射它们。或者,安装 pommed-lightAUR 软件包。

根据您的硬件编辑 /etc/pommed.conf,从 /etc/pommed.conf.mac/etc/pommed.conf.ppc 示例文件构建它。

请注意,您也可以在没有配置文件的情况下运行它,默认值可能对您有效。然后启用/启动 pommed.service

注意: 有关其他配置信息,请参阅 Xorg 输入热插拔 页面。

键盘背光

键盘背光由 /sys/class/leds/smc::kbd_backlight 控制。将所需值写入该目录中的 brightness。有关详细信息,请参阅 键盘背光。背光控制的常见选择是 brightnessctllightAUR

确保在输入 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 -d ::0280
注意
  • 如果您的连接经常掉线,您可能需要关闭 Wi-Fi 电源管理。
  • Eduroam 或类似的网络可能会使您的网络管理器崩溃。只需在登录后延迟连接即可解决问题。

风扇控制

macfand-gitAUR 是一个风扇控制守护程序,支持大多数 Intel Mac,其配置文件位于 /etc/macfand.conf

mbpfan-gitAUR 可用于 MacBook Pro 用户。

电源管理

TLP 是一组非常简单的脚本,可最大程度地延长电池续航时间。安装 TLP 的 MacBook Air 2013 在仅安装 TLP 的情况下可提供约 11 小时的轻度使用时长。所有常用的电源管理建议也适用。

禁用 Thunderbolt

Linux 在 Mac 上对 Thunderbolt 适配器的电源管理仍然很差。这可能会导致 TB 适配器始终处于开启状态,并阻止 CPU 进入最深的省电状态 [1],即使在不使用时也会额外消耗约 2W 的功率 [2]。查看 CPU 状态的简单方法是使用 powertop。当 CPU 不低于 C3 作为包 (Pkg%pc3) 时,就会出现问题。

一种解决方法是将 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.9 瓦。

睡眠和休眠

据报告,在某些情况下,当通过合上盖子进入睡眠时,机器会出现“在恢复后立即睡眠”的问题。通过使用 dconf-editor 将选项“sleep-inactive-ac-type”设置为“nothing”来解决此问题,选项路径:org → gnome → settings-daemon → plugins → power)。

有关如何配置休眠的详细信息,请参阅 睡眠和休眠。值得注意的是,您将需要交换分区或文件(有关更多说明,请参阅提及的文章)。

禁用 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

如果您遇到此错误,则不建议仅禁用 XHC1,因为它可能会导致故障行为。每次启动时都禁用两者,如下所示

/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) 的二元组。

如果您想使用内置光线传感器自动调整屏幕和键盘背光亮度

  • mackbook-lighter — Macbook 屏幕/键盘背光 CLI 和环境光自动调节。
https://github.com/harttle/macbook-lighter || macbook-lighterAUR
  • Lightum — 需要 Gnome 或 KDE,但比 Lighter 更旧且更完整
https://github.com/poliva/lightum || lightum-gitAUR

声音

首先,按照 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 时,请通过重启来测试它。

特定型号可能需要更多帮助。您可以尝试根据您的硬件指定其他选项。所有可能的设置都列在内核文档中,可在线获取

特定型号

本文或章节是与 Laptop/Apple 合并的候选对象。

注意: 这应该移动到特定型号的页面。(在 Talk:Mac/故障排除 中讨论)

例如,如果您有 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#使声音正常工作

对于带有 SigmaTel STAC9221 A1 芯片的 MacBook2,1(2008 年末/2009 年初),请使用

options snd_hda_intel model=macbook

禁用 S/PDIF

某些(大多数?)Mac 型号在与耳机插孔相同的插孔中具有光纤 S/PDIF 音频插孔。当它处于活动状态时,您可以看到它,耳机插孔中会发出红光。它可能会欺骗 PulseAudio 优先选择它并将所有音频路由到它。

如果您没有任何声音输入或输出,请确认 pavucontrol > 配置 > 配置文件显示 “模拟立体声双工” 而不是 “数字”

或者只需运行

$ pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo

还要检查您是否需要编辑 /usr/share/alsa-card-profile/mixer/paths/ 以解决错误的插头检测导致 PulseAudio 故障转移到 “数字” 的问题。

有关如何编辑此文件以使 MacBook2,1 的麦克风工作的详细信息,请参阅 Laptop/Apple#麦克风

自动静音模式

使用耳机插孔时,内部扬声器可能未被禁用。要解决此问题,请启用 “自动静音模式”。

您可以使用 alsamixer 执行此操作

  1. 运行 alsamixer
  2. F6 并选择 default:0 HDA Intel 以获得更详细的控件
  3. 使用箭头键选择 “自动静音模式”
  4. 空格 键启用它

或使用 amixer

$ amixer -c 0 cset name='Auto-Mute Mode' 1

(可选)以 root 身份运行 alsactl store 以使更改永久生效。

USB 音频接口

在某些情况下,使用 USB 音频接口而不是直接使用插孔设置声音实际上可能更容易。

使用 pavucontrol,转到 配置,为所有设备选择 关闭,并为您的 USB 设备选择 模拟立体声双工。然后,您可以使用 USB 设备上的耳机插孔连接扬声器或耳机。这应该立即生效并在启动时生效。

蓝牙

蓝牙应该开箱即用。请参阅有关 蓝牙 的文章,以安装和配置所有需要的软件。

妙控鼠标

如果您使用妙控鼠标,您会发现它开箱即用。您可能想要调整一些设置,例如滚动速度加速度。目前没有用于此操作的 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

注意: 自 2.6.26 以来的 Linux 内核原生包含 Linux UVC 驱动程序。MBP 6,2+(内核 ~2.6.37+)iSight 开箱即用,无需使用来自 macOS 的固件。仅当 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

提示: 来自 OS X 10.6 (Snow Leopard) 安装的 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 高清摄像头,它可以通过 PCIe 连接。您可以通过在 lspci 的输出中查找 “FaceTime HD Camera” 来确认这一点。facetimehd-dkmsAURfacetimehd-dataAUR 软件包安装了一个 facetimehd 模块(和固件)以支持这些设备。模块应在安装后自动加载。

如果网络摄像头显示颜色不正确,这可能是由于缺少传感器校准文件。有关从 Apple BootCamp 驱动程序中提取校准文件的说明,请参阅此页面:https://github.com/patjak/facetimehd/wiki/Extracting-the-sensor-calibration-files

有关用于测试的应用程序,请参阅 Multimedia#网络摄像头

温度传感器

要读取温度,只需安装 lm_sensors。有关更多信息,请参阅 lm_sensors

避免启动前 EFI 等待时间过长

如果您的 Mac 在启动前花费 30 秒显示 “白屏”,您需要告诉固件启动分区的位置。

启动 macOS,如果您没有安装它,您可以使用安装 DVD(选择语言,然后单击实用工具 -> 终端)或另一台带有 macOS 的 Mac(通过火线或 thunderbolt 连接两台计算机,启动另一台 Mac 并按住 T 按钮,启动您的 Mac 并按住 Options 按钮 (alt))。

无论哪种方式,一旦您在 Mac 上运行了 macOS 终端,如果启动分区是 EFI,您需要执行以下命令

# bless --device /dev/diskXsY --setBoot

或者如果启动分区不是 EFI

# bless --device /dev/diskXsY --setBoot --legacy

另请参阅 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 启动选项

本文或章节需要语言、Wiki 语法或样式改进。有关参考,请参阅 Help:Style

原因: 部分重复 mkinitcpioGRUB。(在 Talk:Mac/故障排除 中讨论)

对于一些使用单独 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

重新安装 linux 软件包。

在 /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 位于同一目录中。

只需运行 mkrlconf.sh(rEFInd 附带),即可在 /boot 中生成新的 refind_linux.conf 文件。

退出 chroot 环境。

重启。您应该在 rEFInd 中看到 Arch Linux 的新条目,并且它应该启动到您的 Arch Linux 安装。