Mac/Troubleshooting

From ArchWiki
< Mac

This page contains troubleshooting solutions for Apple Macs. Most models have their own section in Laptop/Apple for even more specific issues.

Video

Different Mac models have different graphic cards. To see which graphics card you have type:

$ lspci | grep VGA
  • If it returns a string containing Intel, read Intel graphics.
  • If it returns NVIDIA, read NVIDIA.
  • If it returns two lines, with both NVIDIA and Intel, your Mac has dual graphics. See MacBookPro10,x#Graphics for an example of one such setup that might apply in other cases.
Warning: Despite lots of confusion in online forums, the dual graphics on Mac are not Optimus-based, and treating them as such will break your graphics. See instead MacBookPro10,x#Switching to/from GPUs with gpu-switch or your laptop's specific article for instructions on setting up graphics switching.
  • Otherwise if it returns ATI or AMD, read ATI or AMDGPU.

NVIDIA

If you boot in EFI mode and NVIDIA binary drivers are working only in BIOS mode (e.g. you get black screen on EFI boot), try the approach described on Ask Ubuntu.

For the backlight to work properly you may need the nvidia-bl-dkmsAUR package. If backlight control does not work afterwards, you should blacklist the apple_bl kernel module. If backlight control does not work even this way, try setting options nvidia_bl max_level=0x1ffff shift=11 in /etc/modprobe.d/nvidia_bl.conf.

Alternatively, you can choose to use the pommed-lightAUR package. If you do so, you may wish to change the step settings in /etc/pommed.conf.mactel to something around 5000-10000 depending on how many levels of brightness you desire (the max brightness is around 80000).

If the brightness does not function correctly through pommed, make sure you have installed the nvidia-bl-dkmsAUR package and insert

$ find . -name "*" -exec sed -i 's/mbp_backlight/nvidia_backlight/' '{}' \;

into the second line of the pommed PKGBUILD build() function and rebuild the package. See the following forum post for details.

Another possible solution is:

$ find . -name "*" -exec sed -i 's/nvidia_backlight/apple_backlight/' '{}' \;

Alternatively, run nvidia-settings, edit /etc/X11/xorg.conf and add this line into the Device section:

Option "RegistryDwords" "EnableBrightnessControl=1"

Save, reboot and check if the backlight control works. See Ubuntu's Wiki page for the MacBookPro5,5 for details.

Touchpad

The touchpad should have basic functionality by default. A true multitouch driver which behaves very similarly to native macOS is included in the xf86-input-mtrack-gitAUR package. Configuration options are documented in the readme.

The following mtrack options work well on a MacBook7,1:

Option "Thumbsize" "50"
Option "ScrollDistance" "100"

Probably, you also need to add:

MatchDevicePath "/dev/input/event10"

To disable tap-to-click (that is, to press down to click) by default, add the following to your mtrack configuration section

Option "TapButton1" "0"  
Option "TapButton2" "0"
Option "TapButton3" "0"

Natural scrolling

To configure natural two finger scrolling similar to macOS, refer to Touchpad Synaptics#Natural scrolling.

If you are using xf86-input-mtrack-gitAUR, you can simply swap the scroll up and scroll down buttons (along with the scroll left and scroll right):

/etc/X11/xorg.conf.d/10-mtrack.conf
Option "ScrollUpButton" "5"
Option "ScrollDownButton" "4"
Option "ScrollLeftButton" "7"
Option "ScrollRightButton" "6"
Tip: For users looking to add more of macOS's multitouch gestures to Arch, xSwipe for Synaptics or fusuma for libinput provide these functions.

Older MacBook models

On older MacBook models (pre-multitouch, e.g. MacBook2,1), the touchpad will not function properly until you install xf86-input-synaptics. See Touchpad Synaptics for details.

Tip: gpointing-device-settingsAUR provides a simple GUI for configuring Synaptics.

Keyboard

Mac keyboards work by default. For swapping Fn keys with Fx keys see Apple Keyboard.

Map them with xbindkeys or through desktop environment preferences. Alternatively, install the pommed-lightAUR package.

Edit the /etc/pommed.conf according to your hardware, building it from /etc/pommed.conf.mac or /etc/pommed.conf.ppc example files.

Note that you can also run it without a configuration file, the defaults may work for you. Then enable/start pommed.service.

Note: See the Xorg input hotplugging page for other configuration information.

Keyboard backlight

The keyboard backlight is controlled by /sys/class/leds/smc::kbd_backlight. Write the desired value to brightness in that directory. See Keyboard backlight for detailed information. Common choices for backlight control are brightnessctl and lightAUR.

Ensuring the keyboard backlight is on when entering the LUKS decryption password

This can be done via initcpio hooks. First, create an executable install script:

/etc/initcpio/install/mac_kb_backlight
#!/usr/bin/env bash

build() {
  add_module applesmc
  add_runscript
}

Next, create an executable hook:

/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
}

Finally, add this custom hook to the HOOKS array in /etc/mkinitcpio.conf, and ensure it is placed before the encrypt hook:

HOOKS=(... mac_kb_backlight encrypt ...)

Remember to regenerate the initramfs images after these steps to include the custom script.

Wi-Fi

Different Mac models have different wireless cards.

Check what card you have:

# lspci | grep Network
Note:
  • If your connection frequently drops, you may have to turn off Wi-Fi power management.
  • Eduroam or similar may crash your network manager. Simply delaying the connection after login should do the trick.

Fan Control

macfand-gitAUR is a fan control daemon that supports most Intel Macs, its configuration file is located at /etc/macfand.conf.

mbpfan-gitAUR is available for MacBook Pro users.

Power management

TLP is a very simple set of scripts that will maximize your battery duration. A MacBook Air 2013 with TLP provides about 11 hours of light usage with just TLP installed. All the usual power management recommendations apply as well.

Disabling Thunderbolt

Linux still has poor power management for Thunderbolt adapters on Macs. This can cause the TB adapter(s) to be always-on and prevent the CPU from going into the deepest power-saving states [1], drawing ca. 2W additional power even when not in use [2]. An easy way to see the CPU states is using powertop. The problem arises when the CPU does not go below C3 as a package (Pkg%pc3).

One workaround is to add acpi_osi=!Darwin to the kernel parameters, thereby telling the firmware that the system is not compatible with macOS [3]. This should disable the TB adapter (at least on older Macs), and thus reduce power consumption greatly, but will probably come with side-effects (e.g. no Thunderbolt, maybe others?).

It is also possible to blacklist the thunderbolt module and then putting the controllers to sleep with

# echo auto > /sys/bus/pci/devices/0000:07:00.0/power/control

Check the correct device number with lspci. This can also be automated. This method reduces power consumption slightly, but still consumes 0.9 W more than the previous method on a MacBook Air 2013.

Suspend and hibernate

Issues were reported where the machine would "suspend immediately after resume" in certain conditions when suspending by closing the lid. This was solved by setting the option "sleep-inactive-ac-type" to "nothing" using dconf-editor, option path: org → gnome → settings-daemon → plugins → power).

See Suspend and hibernate for details on how to configure hibernation. Noticeably, you will need a swap partition or file (see the mentioned article for further instructions).

Slow wake ups from a suspend state can be resolved by disabling Thunderbolt. See #Disabling Thunderbolt.

Wake up after suspend

Occasionally a Mac laptop may wake up immediately after suspending. This may not be immediately evident as the screen may stay off despite the system being awake, and can be checked by seeing whether the keyboard backlight stays on.

In /proc/acpi/wakeup, check to see that XHC1 and LID0 are enabled. If they are, one can temporarily disable just LID0 with the following to see if the issue resolves

# echo LID0 > /proc/acpi/wakeup

To make the change persistent, create:

/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

And then enable/start suspend-fix.service. To wake the system from this point, use the keyboard.

If this does not resolve the issue, XHC1 may be the issue and one can disable both it and LID0 temporarily with the following to see if it goes away.

# echo XHC1 > /proc/acpi/wakeup && echo LID0 > /proc/acpi/wakeup

Disabling only XHC1 is not recommended if you have this bug, since it may result in glitchy behavior. Disable both on every boot as follows:

/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

To wake the system from this point, only the power button can be used.

Light sensor

The values can be read from /sys/devices/platform/applesmc.768/light: it returns two-tuples like (4,0).

If you want to use the built in light sensor to automatically adjust screen and keyboard backlight brightness:

  • mackbook-lighter — Macbook screen/keyboard backlight CLI and auto-adjust on ambient light.
https://github.com/harttle/macbook-lighter || macbook-lighterAUR
  • Lightum — Requires Gnome or KDE but is older and more complete than Lighter
https://github.com/poliva/lightum || lightum-gitAUR

Sound

First of all follow ALSA wiki page, then if something does not work correctly, continue reading this part.

Kernel options

Edit your /etc/modprobe.d/50-sound.conf or /etc/modprobe.d/modprobe.conf appending this line:

options snd_hda_intel model=intel-mac-auto

This should automatically specify the codec in your Mac.

Warning: Every time you change /etc/modprobe.d, test it by rebooting.

Specific models may need more help. You can try specifying other options according to your hardware. All possible settings are listed in Kernel Documentation, available online:

Model-specifics

This article or section is a candidate for merging with Laptop/Apple.

Notes: This should be moved to the model-specific page. (Discuss in Talk:Mac/Troubleshooting)

For example, if you have a MacBookPro12,1, you might need

options snd-hda-intel index=1,0

instead. Alternatively, for MacBookPro5,X, you can use:

options snd_hda_intel model=mb5

(note that the jack output is controlled with "HP").

If you have an iMac8,1, you should instead use

options snd-hda-intel model=mbp3 position_fix=2

For Aluminium iMacs, see iMac Aluminium#Getting sound to work right

For MacBook2,1 (late 2008/early 2009)s with a SigmaTel STAC9221 A1 chip, use

options snd_hda_intel model=macbook

Disabling S/PDIF

Some (most?) Mac models have an optical S/PDIF audio jack in the same jack as the headphone jack. You can see it when it is active as a red light glowing out of the headphone jack. It can trick PulseAudio into preferring it and routing all your audio out it.

If you are not getting any sound in or out, confirm that pavucontrol > Configuration > Profile says "Analog Stereo Duplex" instead of "Digital"

or just run

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

Also check if you need to edit /usr/share/alsa-card-profile/mixer/paths/ to workaround faulty plug detection causing PulseAudio to failover to "Digital".

See Laptop/Apple#Microphone for how to edit this to get the MacBook2,1's microphone to work.

Auto-Mute Mode

The internal speaker might not be disabled when using the headphone jack. To solve this, enable "Auto-Mute Mode".

You can either do this using alsamixer:

  1. Run alsamixer
  2. Press F6 and pick default:0 HDA Intel to get more detailed controls
  3. Use the arrow keys to select "Auto-Mute Mode"
  4. Press Space to enable it

or with amixer:

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

Optionally, run alsactl store as root to make the change permanent.

USB audio interface

In some cases, it can actually be easier to set up sound using a USB audio interface rather than the jack directly.

With pavucontrol, go to Configuration, choose Off for all devices and choose Analog Stereo Duplex for your USB device. You can then use the headphone jack on the USB device for speakers or headphones. This should work immediately and on startup.

Bluetooth

Bluetooth should work out-of-the box. See the article on Bluetooth to install and configure all software needed.

Magic Mouse

If you use a magic mouse you will find it works nicely out of the box. You might want to tweak some settings such as scroll-speed or acceleration. There is no GUI for this at this time. The only way to set these settings is to instruct the kernel driver (hid_magicmouse) with parameters. Create a modprobe config file for your mouse.

/etc/modprobe.d/magicmouse.conf
options hid_magicmouse scroll-speed=55 scroll-acceleration=1 emulate_3button=0

This will instruct the driver to have a fast scroll-speed, do exponential acceleration and do not emulate a 3 button mouse. You can find an overview of all parameters and their current settings in /sys/module/hid_magicmouse/parameters.

To try different settings without rebooting you can also set them through the command line:

# echo 55 > /sys/module/hid_magicmouse/parameters/scroll_speed

Webcam

iSight

Note: Linux kernel from 2.6.26 includes the Linux UVC driver natively. MBP 6,2+ (Kernel ~2.6.37+) iSight works out of the box without the need to use firmware from macOS. Only use isight-firmware-tools if it does not work normally.

iSight webcams on MacBooks or pre 6,2 MacBook Pros (6,2 came out around 2010) require the Apple's proprietary firmware that cannot be redistributed. It must be extracted from macOS and loaded onto Arch.

There is a pre-extracted copy available in the form of the isight-firmwareAUR package.

If you want to do it yourself you will need to install isight-firmware-toolsAUR to extract the firmware. This package also includes a udev rule and ELF binary that are necessary, even once you have extracted the firmware file into /lib/firmware/isight.fw, for the file to be loaded every time you boot your computer (namely /etc/udev/rules.d/isight.rules which uses /usr/lib/udev/ift-load).

Instructions:

First you need to get the firmware out of a particular file located on your macOS install. It is located in /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS/AppleUSBVideoSupport.

Tip: The AppleUSBVideoSupport file from a OS X 10.6 (Snow Leopard) installation may not work properly. If possible, use the file from OS X 10.5 or earlier.

To mount the macOS drive if multi-booting:

# mkdir /media/macOS
# mount -t hfsplus /dev/sda2 /media/macOS

You can also download a copy of the file from https://archive.org/details/AppleUSBVideoSupport.

Then, install the isight-firmware-toolsAUR package.

Locate the AppleUSBVideoSupport file in the macOS directory listed above. Either copy it over to your Arch system (Any macOS installation should do, such as an iMac, not just one specific to your system) or, if multi-booting, mount the macOS drive and navigate to the directory. (On 10.6 (Snow Leopard) and 10.7 (Lion) the directory is /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS.) In that directory you can go ahead and extract the driver:

# ift-extract --apple-driver AppleUSBVideoSupport

When it is done, check that the firmware has been found:

# ls /usr/lib/firmware/isight.fw

Once successful, completely shutdown your Mac and start it back up again (to clear the hardware state of the webcam). Do not reboot.

It should be automatically loaded at boot; if it is not you can load the uvcvideo module manually or load it at boot.

FaceTime HD Camera

Recent Macs include the FaceTime HD Camera, which may be connected by PCIe. You can confirm this by looking for "FaceTime HD Camera" in the output of lspci. The bcwc-pcie-gitAUR package installs a facetimehd module (and firmware) to support these devices. The module should be loaded automatically after installation.

If the webcam shows incorrect colors, this may be due to missing sensor calibration files. Instructions for extracting the calibration files from Apple BootCamp drivers are given in this page: https://github.com/patjak/bcwc_pcie/wiki/Extracting-the-sensor-calibration-files

See Multimedia#Webcam for applications with which to test.

Temperature sensors

For reading temperature just install lm_sensors. See lm_sensors for more information.

Avoid long EFI wait before booting

If your Mac spends 30 seconds with "white screen" before booting you need to tell the firmware where the booting partition is.

Boot macOS, if you do not have it installed, you can use the install DVD (select language, then click Utilities->Terminal) or another Mac with macOS (connect the two computers via firewire or thunderbolt, start the other Mac while holding the T button, boot your Mac while holding the Options button (alt)).

Either way, once you have got a macOS terminal running on your Mac you need to execute the following command if the booting partition is EFI:

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

or if the booting partition is not EFI:

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

See also https://bbs.archlinux.org/viewtopic.php?pid=833215.

kworker using high CPU

Sometime with the addition of Yosemite, some users found that kworker CPU usage will spike, as discussed here. This is sometimes the result of runaway ACPI interrupts.

To check and see, you can count the number of recent ACPI interrupts and see if any of them are out of control.

$ grep . -r /sys/firmware/acpi/interrupts/

If you see that one particular interrupt is out of control (possibly GPE66), i.e., registering hundreds of thousands of lines, you can try disabling it (replace XX with the runaway interrupt):

# echo "disable" > /sys/firmware/acpi/interrupts/gpeXX

Disabling random ACPI interrupts could cause all kinds of problems, so do this at your own risk. If this fixes the problem, there is discussion about how to make a systemd service that automatically disables an interrupt at every boot here.

Mavericks upgrade breaks Arch boot option

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Reason: Partially duplicates mkinitcpio and GRUB. (Discuss in Talk:Mac/Troubleshooting)

For some multi-boot users who utilize a separate Linux boot partition, the OS X Mavericks upgrade may overwrite the boot partition with Apple's own recovery boot filesystem. This breaks the Arch Linux boot option in rEFIt/rEFInd. The best way to proceed in this situation is to abandon a separate boot partition and use the EFI system partition (ESP) to install the boot loader of your choice. It is also recommended that you use rEFInd instead of rEFIt as development on the latter has halted.

Assuming grub2 as the boot loader:

Use the Arch LiveCD to boot to a shell and chroot to your broken Arch Linux environment.

Mount the ESP on /boot.

Edit the fstab and remove the old boot partition and make ESP the new boot partition. Now mount the ESP as the new /boot partition.

# mount -a

Reinstall the linux package.

Create a new initramfs and vmlinuz in /boot.

# mkinitcpio -p linux

Install grub.

# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck --debug

Create a new grub.cfg file.

# grub-mkconfig -o /boot/EFI/grub/grub.cfg

Make sure that grub.cfg is in the same directory as grubx64.efi.

Generate a new refind_linux.conf file in /boot simply by running mkrlconf.sh which comes with rEFInd.

Exit the chroot environment.

Reboot. You should see a new entry for Arch Linux in rEFInd and it should boot to your Arch Linux installation.