Skip to content

macOS on the Microsoft Surface Laptop 3 thanks to Acidanthera's OpenCore bootloader

License

Notifications You must be signed in to change notification settings

jlempen/Surface-Laptop-3-OpenCore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenCore logo

Surface-Laptop-3-OpenCore

macOS on the Microsoft Surface Laptop 3 thanks to Acidanthera's OpenCore bootloader.

Software Specifications

Software Version
Target OS Apple macOS 15 Sequoia, 14 Sonoma and 13 Ventura
OpenCore MOD-OC v1.0.3
SMBIOS MacBookPro16,2
SSD format APFS file system, GPT partition table

Abstract

With its nice display, large and smooth trackpad, comfortable keyboard and its quite decent speakers, the Surface Laptop 3 series is an excellent Hackintosh laptop. Moreover, the M.2 2230 SSD can be swapped easily for a larger one.

Apart from ACPI S3 Sleep which is broken, everything on the Intel 13.5-Inch and 15-Inch Surface Laptop 3 is working perfectly like on a real Mac. ACPI S4 Hibernate works great, though, and resuming from Hibernation takes around ten to fifteen seconds. The advantage Hibernate has over Sleep is that the device doesn't draw any power while in a hibernated state.

The battery runtime is around five hours.

Tip

I recommend installing macOS 13 Ventura rather than the newer macOS 14 Sonoma or macOS 15 Sequoia. The builtin Intel Wireless chip works almost perfectly with Apple's iServices and Continuity features on Ventura while those features are partially broken at the moment on newer versions of macOS.

Important

For macOS to be able to boot on the Surface Laptop 3, the Secure Boot option must be disabled in the UEFI. The boot screen will then display a large red bar with a padlock symbol at the top of the display when Secure Boot is disabled.

Important

The keyboard and trackpad are now working in the installer as well as in the installed OS, but the trackpad will be lagging/skipping every few seconds. Furthermore, the keyboard and trackpad will be unresponsive after resuming from hibernation. To fix those issues, you MUST downgrade the firmware of your Surface Laptop 3. To do so, follow these instructions.

Then, you MUST also replace BigSurface.kext and its dependencies with BigSurfaceSLB3.kext and its dependencies in your config.plist file by following these instructions.

Caution

At the moment, it is not possible to have Windows installed at the same time as macOS, as the SL3 will immediately update to the latest firmware again when you reboot into Windows, even if you turn off your WiFi or disable automatic Windows Updates. I haven't found a way to prevent this behaviour yet. Any kind of Linux distribution is fine, though.

Disclaimer

This repository is neither a howto nor an installation manual. Using these files requires at least basic knowledge of Acidanthera's OpenCore bootloader, ACPI, UEFI and the art of hackintoshing in general. I recommend reading the excellent Dortania's OpenCore Install Guide, as well as all its linked resources. For those who wish to improve their hackintoshing knowledge, 5T33Z0's OC-Little-Translated repository is the most comprehensive resource I've found on the subject.

Recommendations

I recommend completely erasing the device's SSD by creating a new GPT partition table before attempting to install macOS, as it makes the installation process much easier. You may use any Linux live ISO with a partitioning tool such as GParted or KPartition to erase the SSD.

Please be aware that all PlatformInfo and SMBIOS information was removed from the OpenCore config.plist file. Users will therefore need to generate their own PlatformInfo with CorpNewt's GenSMBIOS tool before attempting to boot a Surface Laptop 3 with this repository's EFI folder.

BigSurfaceSLB3.kext is required to enable the trackpad, the keyboard, the touchscreen, the battery status, the power and volume buttons and the ambient light sensor. Updating this kext with the official one from Xiashangning's BigSurface repo will most certainly break something! BigSurfaceSLB3.kext is a modified version of BigSurface v6.5 which fixes the skipping/lagging trackpad and hibernate mode 25.

An UEFI firmware released by Micro$oft in August 2023 broke the Surface Laptop 3's trackpad in macOS in several ways. Downgrading the UEFI firmware to the last known working version 13.101.140.0 is required to fix the trackpad and hibernate mode 25 on macOS. See the detailed instructions below to easily downgrade the UEFI firmware. This needs to be done before installing any version of macOS or you won't have a working trackpad and/or keyboard during installation.

AirportItlwm-Ventura.kext, AirportItlwm-Sonoma140.kext and AirportItlwm-Sonoma144.kext from the OpenIntelWireless repo are required to enable the Wifi chip. This EFI will dynamically load the appropriate kext for macOS Ventura or Sonoma depending on the running kernel. No need to manually replace the kext file when updating your version of macOS. As the Intel Wifi chip does not yet work with the AirportItlwm.kext in macOS Sequoia, you'll need to use the Itlwm.kext and its companion app HeliPort to connect to a Wifi network. You'll find the latest stable HeliPort.dmg in the Tools folder of this repo. This EFI will dynamically load the Itlwm.kext instead of AirportItlwm.kext when you boot into macOS Sequoia.

This repository uses the unofficial OpenCore_NO_ACPI_Build fork of OpenCore by btwise, wich is not endorsed by Acidanthera (the dev team behind OpenCore). The main (and only) difference between this fork and the official OpenCore version is that it allows to prevent ACPI injection (e.g. patches, tables, boot parameters) into other OSes besides macOS.

Windows and Linux should be detected automagically by the OpenCore boot loader even when installed after macOS.

Computer Specifications

Computer Specifications

Device Hardware
CPU Intel Core i7-1065G7 or Intel Core i5-1035G7
iGPU Intel Iris Plus Graphics
Audio Realtek ALC274
RAM 8 or 16 GB RAM
Wifi + Bluetooth Wifi6 AX200, Bluetooth 5.0
Storage Kioxia/Toshiba/SK Hynix PCIe NVMe 2230 SSD
USB Type-C 3.1 Gen 1 Supports Power Delivery and DisplayPort
Camera 720p
IR camera Intel(R) AVStream Camera 2500, ISP Interface
Keyboard / Trackpad
Display 13.50 inch 3:2, 2256 x 1504 pixel or 15 inch 3:2, 2496 x 1664 pixel 201 PPI
Touchscreen 10-point capacitive
Battery
Ambient light sensor
What works

What works

  • CPU power management
  • CPU SpeedStep
  • iGPU with full acceleration
  • SSD drive
  • USB-C port
  • USB-A port
  • WLAN
  • Bluetooth
  • 720p camera
  • Internal speakers, microphone and Combojack
  • Power, volume up and volume down buttons
  • Keyboard with working brightness, volume and mute keys, working caps lock light
  • Trackpad with native multi-touch gestures
  • Touchscreen
  • Surface Pen
  • Ambient light sensor
  • Battery percentage and cycle count
  • Hibernation (hibernatemode 25) - the device successfully wakes up from hibernation mode
  • USB Type-C to HDMI
  • USB Type-C to USB3 & USB2
  • USB Type-C Power Delivery
What needs some more work

What needs some more work

  • Sleep (hibernatemode 3) - the device only turns off the display without sleeping
  • On macOS Sequoia, the user needs to close and open the lid again to wake up the display after hibernation
What will probably never work

What will probably never work

  • IR camera (Windows Hello)
UEFI Settings

UEFI Settings

To enter the UEFI Settings, power on your Surface Laptop 3 and hold the Volume Up Button as soon as the Surface Logo is displayed on the screen.

The Secure Boot setting must be disabled to boot macOS. I also recommend moving USB Storage to the top of the boot configuration list, which makes booting from an USB stick much easier.

Security
Secure Boot Disabled
Boot configuration
USB Storage Move the item to the top of the list
Downgrading the UEFI firmware

Downgrading the UEFI firmware

In order to fix the skipping/lagging trackpad in macOS and make the trackpad and keyboard work after hibernation, you must downgrade your UEFI firmware to the last known working version 13.101.140.0.

  1. Boot with a Linux Live USB stick, preferably a Debian, Arch or Fedora based distribution (I use the Arch-based Manjaro).
  2. Download and unzip the compressed firmware archive SurfaceLaptop3_FW_13.101.140.0.zip from this repository.
  3. Add the line OnlyTrusted=false to the /etc/fwupd/daemon.conf config file. On some Linux distros such as Arch, endeavourOS and Manjaro, the config file to change is /etc/fwupd/fwupd.conf:
sudo nano /etc/fwupd/daemon.conf

or

sudo nano /etc/fwupd/fwupd.conf
  1. Open a terminal and navigate to the folder where you extracted the firmware files.
  2. Connect your Surface device to a power supply.
  3. Copy the following lines and paste them into the terminal:
for f in *; do 
  sudo fwupdmgr install --allow-older --allow-reinstall --no-reboot-check "$f"
done
  1. Close the terminal and reboot the computer.

For some firmware files, the fwupdmgr tool may complain that it is unable to find a matching device. This is normal, as not all Surface Laptop 3 models use the exact same hardware, thus the compressed firmware archive contains all the required files for all models.

The Surface Laptop 3 will reboot and downgrade all UEFI firmwares at once, which takes around 10 minutes. You'll see progress bars with different colours depending on which type of firmware is being flashed. Once the process is done, your laptop will restart a few times and seem to hang on the Surface logo for 20 or 30 seconds each time, this is normal. Then it will restart for good to your OpenCore picker.

Now restart while holding the F4/Volume Up key to check the firmware version in the UEFI. In the Firmware section, System UEFI should now show 13.101.140.

Reboot and you're done.

If you are using Windows on the laptop, you'll have to find a way to prevent Windows Update from automatically updating the firmware to the latest firmware version again on the next reboot into Windows! I haven't found a way to prevent this yet. Any kind of Linux distribution is fine, though.

Replacing BigSurface.kext with BigSurfaceSLB3.kext

Replacing BigSurface.kext with BigSurfaceSLB3.kext

Additionally, to fix the skipping/lagging trackpad in macOS and make the trackpad and keyboard work after hibernation, you also have to replace the official BigSurface.kext with the BigSurfaceSLB3.kext.

In the Kernel -> Add section of your config.plist file, disable or delete the following kexts:

BigSurface.kext/Contents/PlugIns/VoodooGPIO.kext
BigSurface.kext/Contents/PlugIns/VoodooSerial.kext
BigSurface.kext/Contents/PlugIns/VoodooInput.kext
BigSurface.kext
BigSurface.kext/Contents/PlugIns/BigSurfaceHIDDriver.kext

Then enable the following kexts:

BigSurfaceSLB3.kext/Contents/PlugIns/VoodooGPIO.kext
BigSurfaceSLB3.kext/Contents/PlugIns/VoodooSerial.kext
BigSurfaceSLB3.kext/Contents/PlugIns/VoodooInput.kext
BigSurfaceSLB3.kext
BigSurfaceSLB3.kext/Contents/PlugIns/BigSurfaceHIDDriver.kext

Save your config.plist file and reboot. Your trackpad should now be buttery smooth before and after resuming from hibernation. The keyboard will now also work after resuming from hibernation.

Disabling Sleep and enabling Hibernate

Disabling Sleep and enabling Hibernate

As we still haven't found a solution for the Sleep/Wake issues on the Surface Laptop 3, disable Sleep altogether and use Hibernate for now. Open the Terminal and enter the following commands, then reboot for the changes to take effect:

sudo pmset restoredefaults
sudo pmset -a hibernatemode 25

If for whatever reason Hibernate is not working on your system, you should reset the Power Management settings and rebuild the sleepimage file. To do so, open the Terminal and enter the following commands, then reboot for the changes to take effect:

sudo rm /Library/Preferences/com.apple.PowerManagement*
sudo rm /var/vm/sleepimage
sudo pmset hibernatefile /var/vm/sleepimage

Once you are back in macOS, disable Sleep and enable Hibernate again, then reboot:

sudo pmset restoredefaults
sudo pmset -a hibernatemode 25
Fix broken Bluetooth on Wake from Hibernation

Fix broken Bluetooth on Wake from Hibernation

After the device wakes up from Hibernation, Bluetooth may be broken / unable to connect.

A very simple fix for this issue is to download and install Bluesnooze. Launch the app, enable Launch at login and you're done!

Enabling native HiDPI display settings in macOS

Enabling native HiDPI display settings in macOS

On the installed macOS system, the default display resolution is less than ideal. To enable native HiDPI settings in the Display Preferences of macOS, download and run the one-key-hidpi script and select the option (7) Manual input resolution, then copy and paste the resolutions below into the terminal, press Enter and reboot for the changes to take effect. This will give you five sane preset resolutions for your Surface Laptop 3.

For the 13.5-Inch Surface Laptop 3:

2254x1504 1920x1280 1600x1066 1344x896 1280x854 1128x752

For the 15-Inch Surface Laptop 3:

2496x1664 2250x1500 2048x1366 1920x1280 1600x1066 1344x896 1280x854 1248x832

You may also download and install BetterDisplay to change and manage the display resolutions on the Surface Laptop 3.

Installing the IPTSDaemon to enable the touchscreen

Installing the IPTSDaemon to enable the touchscreen

The IPTSDaemon is a tool made by the author of BigSurface Xiashangning. It enables the touchscreen on Surface devices running macOS.

  1. Download the IPTSDaemon
  2. Unzip the downloaded file
  3. Open a Terminal and navigate to the IPTSDaemon folder:
cd /Downloads/IPTSDaemon/IPTSDaemon
  1. Run the install_daemon.sh file:
sudo bash install_daemon.sh
  1. Enter your password to install the daemon

Now you'll see a nasty popup window:

Nasty popup window

This is actually macOS's way of telling you that Apple considers that the software is from an untrusted source because it is unsigned. But it's actually very easy to tell it to open the file anyway.

Click on the "Show in Finder" button of this popup window, then right-click on the libinih.0.dylib file and select the first option, "Open". Nothing will happen, but the annoying popup window will not show anymore for this file. Now repeat the same procedure for the libfmt.9.dylib file and you're done.

Perhaps you'll need to repeat this a few times, as the popup window appearing for one file will block the "Open" popup window for the other file and vice versa. Basically, once there's no warning popup appearing anymore, both files were registered and started.

You may now verify that the multitouch gestures are working on your touchscreen by playing around with the standard macOS multitouch gestures you're used to on your trackpad, but the same gestures now work on the touchscreen as well :-)

These instructions are confirmed working on SL3 and SB3 running macOS Ventura and Sonoma. On macOS Sequoia, the procedure is pretty much similar, but there won't be a "Show in Finder" button in the popup window. To open the dylib files, you'll have to go to the System Settings -> Privacy and Security -> Security section and open the files from there.

Fixing broken Apple Messages and FaceTime

Fixing broken Apple Messages and FaceTime

To fix issues with Apple Messages and FaceTime related to the Intel Wireless driver on macOS Sonoma, disable all AirportItlwm-***.kext entries under Kernel -> Add in your config.plist file and use the itlwm_v2.3.0_stable.kext.zip and its companion app HeliPort instead. The latest version 2.3.0 of itlwm.kext is already included in the Kext folder and config.plist file.

Related repositories

Related repositories

About

macOS on the Microsoft Surface Laptop 3 thanks to Acidanthera's OpenCore bootloader

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published