Jump to content

[GUIDE] ASUS ZenBook Pro Duo 15 OLED UX582


shiecldk
 Share

13 posts in this topic

Recommended Posts

ASUS ZenBook Pro Duo 15 OLED UX582 using OpenCore 0.7.1 [WIP]

 

ZenBook_Pro_Duo_15_OLED_UX582.png.37d5b3fe6c5c69eb998bcd003daa4bfe.png

 

- A guide of the most high-end Hackintosh laptop after Apple switched to Apple Silicon -

 

Disclaimer: I do not take the responsibility for any damages caused on your laptop following this guide. Please proceed this guide with your own will and use it at your own risk.

 

Summary: A perfect choice for high-end Hackintosh laptop - almost everything is working on this model. 

 

Spec:

BIOS: Version 203

CPU: Intel Core i9-10980HK (varient: Intel Core i7-10870H)

iGPU: Intel UHD 630

dGPU: Nvidia RTX 3070 8GB (won't work; disabled to save battery; could be enabled with UEFIGraphicsFB.kext for HDMI port without graphics acceleration)

RAM: LPDDR4X 32GB

SSD: Samsung PM981A 1TB M.2 SSD (Not compatible with macOS; replaced with PNY CS3030 2TB M.2 SSD)

Audio: Realtek ALC294 & Nvidia RTX 3000 series HDMI

Wireless: Intel Wi-Fi 6 AX201

Touchpad: ELAN TouchPad

Ports: 1x USB 3.2 Gen 2 Type-A; 2x Thunderbolt 3; 1x HDMI 2.1; 1x 3.5mm Combo Audio Jack; 1x DC-in

 

What's working:

  • Intel UHD Graphics 630
  • Intel WiFi 6 (speed could be slow on some very few routers)
  • Intel bluetooth
  • Internal stereo speaker
  • Internal microphone
  • Combo audio jack
  • Camera
  • Battery indication
  • CPU SpeedStep
  • Main touchscreen
  • Secondary ScreenPad Plus (partially works, single touch as cursor)
  • Brightness control (software brightness control workaround with Lunar)
  • Stylus pen (works on both screens without sense of pressure)
  • Keyboard
  • Trackpad
  • FN keys for volume, brightness, keyboard backlight, and enable/disable trackpad
  • USB 3.2 Gen2 Type-A
  • USB 3 Type-C
  • USB 3 Type-C to DP/HDMI (only one port works due to macOS restriction)
  • Thunderbolt 3 (only non-eGPU devices work for now)
  • Power adaptor
  • Sleep/wake
  • iCloud
  • Continuity

 

What's not working for now:

  • Nvidia RTX 3070 (won't work due to no driver in macOS)
  • HDMI port (routed to Nvidia RTX 3070; same as above)
  • Native brightness control with macOS CoreDisplay (need to port driver from Linux for display brightness control; check s-light/ASUS-ZenBook-Pro-Duo-UX581GV)
  • Ambient light sensor (same as above)
  • Thunderbolt eGPU (WIP; need to work with DROM and SSDT)
  • ScreenPad multi-touch control (WIP; working on VoodooI2C)
  • Numpad (need to port driver from Linux; check mohamed-badaoui/asus-touchpad-numpad-driver)
  • Some other FN keys (WIP; check hieplpvip/AsusSMC)

 

ToDo List:

  • Windows in main screen misplaced after restart
  • ScreenPad multi-touch control
  • Brightness auto adjustment with ambient sensor
  • Some other FN keys (FN+F10, fan control, switch main/scecondary monitors, and disable secondary monitor)
  • Numpad
  • Thunderbolt 3 for eGPU (need more SSDT and DROM patches)
  • Update for macOS Monterey
  • Battery ACPI patch (Although battery indication is working OOB with SMCBatteryManager.kext and SSDT-EC-USBX.aml, a SSDT patch may still be needed for better battery management.)

 

Bios Settings:

  • BIOS Lock: Disabled
  • CFG Lock: Disabled
  • Fast Boot: Disabled
  • Secure Boot Control: Disabled
  • VT-d: Disabled
  • SATA Mode Selection: AHCI
  • DVMT Pre-Allocated: 64M
  • DVMT Total Gfx Mem: MAX
  • Force unlock on all GPIO pads: Enabled
  • Kernel Debug Serial Port: Legacy UART
  • Touch Pad Interrupt Mode: GPIO Interrupt
  • Touch Panel Interrupt Mode: GPIO Interrupt
  • Legacy USB Support: Enabled
  • XHCI Legacy Support: Enabled
  • XHCI Hand-off: Enabled
  • EHCI Hand-off: Enabled

 

OpenCore EFI:

Github - shiecldk/ASUS-ZenBook-Pro-Duo-15-OLED-UX582-Hackintosh

 

Edited by shiecldk
Link to comment
Share on other sites

Index

1. Pre-install

- 1.1 Replace and Clone the SSD

- 1.2 Setup the Hidden BIOS settings

- 1.3 Windows SATA Mode Fix-up

- 1.4 OpenCore PlatformInfo

2. Installation

- 2.1 Boot from OpenCore USB drive

- 2.2 macOS Installer

- 2.3 Booting from SSD

3. Post-Install

- 3.1 Kext

- 3.2 ACPI

4. Post-Install: Required Softwares

- 4.1 Brightness Control

- 4.2 Enable/Disable Intel Turbo Boost

5. Post-Install: Useful Softwares for Dual Screen Laptop

- 5.1 Window Resize

- 5.2 Window Preview

6. Results

- 6.1 GeekBench Score

7. Advanced

- 7.1 Update AppleALC

- 7.2 Flash Thunderbolt Firmware

- 7.3 USB WiFi Adapter

8. Driver Development

9. Changelog

 

Edited by shiecldk
Link to comment
Share on other sites

1. Pre-Install

1.1 Replace and Clone the SSD

 

Due to the fact that the factory-preinstalled Samsung PM981A is not compatible with macOS (PM981A causes kernel panic in the second stage macOS installation and other random kernel panic after installation) and there is only one M.2 slot in UX582, I have replaced the M.2 SSD with a cheap-but-not-so-cheap PNY CS3030 2TB M.2 SSD. It is using a Phison controller, which is known to have better compatibility with macOS. I recommend you find a similar SSD with Phison controller, although PNY CS3030 is the cheapest one with a known brand I could find. I do not recommend getting a PCIE 4.0 SSD because the chipset on this laptop is running PCIE 3.0 although it's using an Intel 10 gen CPU.

 

I plan to triple boot windows, macOS, and Ubuntu, so I used Acronis True Image to clone the factory-preinstalled Samsung PM981A to my PNY CS3030 2TB M.2 SSD. After cloning Windows and other factory-preinstalled partitions to my new SSD, I boot into Windows and shrink the C drive and use the spare space to create a new partition in NTFS. This new partition would be used to format as APFS in macOS installer. You may create more partitions with the spare space if you plan to boot more operation systems.

 

 

1.2 Setup the Hidden BIOS Settings

 

Before booting macOS installer with OpenCore EFI, you will need to change the BIOS settings in UX582. The BIOS menu is accessible through pressing F2 on the keyboard. However, since some of the settings are not visible in the BIOS menu, you would need modGRUBShell.efi to modify the hidden BIOS settings. I was hoping to flash the BIOS so that the hidden BIOS settings can be shown in the menu; however, it turns out the BIOS is locked with the PCH chipset after checking the dumped BIOS with UEFITool.app. If you flash a modified BIOS, the laptop will be bricked.

 

modGRUBShell.efi is placed in OpenCore EFI. When you boot with OpenCore, simply select modGRUBShell and use the following commends to change the hidden BIOS settings:

 

Spoiler
  • BIOS Lock: Disabled
    setup_var_cv PchSetup 0x17 0x17 0x0

     

  • CFG Lock: Disabled
    setup_var_cv CpuSetup 0x3E 0x11 0x0

     

  • Fast Boot: Disabled
    setup_var_cv SaSetup 0x136 0x16 0x0

     

  • Secure Boot Control: Disabled
    setup_var_cv SecureBootSetup 0x0 0x2B 0x0

     

  • VT-d: Disabled
    setup_var_cv SaSetup 0xF9 0x16 0x0

     

  • SATA Mode Selection: AHCI
    setup_var_cv PchSetup 0x44 0x17 0x0

     

  • DVMT Pre-Allocated: 64M
    setup_var_cv SaSetup 0xF5 0x16 0x2

     

  • DVMT Total Gfx Mem: MAX
    setup_var_cv SaSetup 0xF6 0x16 0x3

     

  • Force unlock on all GPIO pads: Enabled
    setup_var_cv PchSetup 0x18 0x17 0x1

     

  • Kernel Debug Serial Port: Legacy UART
    setup_var_cv PchSetup 0x8 0x17 0x0

     

  • Touch Pad Interrupt Mode: GPIO Interrupt
    setup_var_cv Setup 0x2AE 0x1 0x0

     

  • Touch Panel Interrupt Mode: GPIO Interrupt
    setup_var_cv Setup 0x2B4 0x1 0x0

     

  • Legacy USB Support: Enabled
    setup_var_cv UsbSupport 0x1 0x27 0x0

     

  • XHCI Legacy Support: Enabled
    setup_var_cv UsbSupport 0x2A 0x27 0x1

     

  • XHCI Hand-off: Enabled
    setup_var_cv UsbSupport 0x2B 0x27 0x1

     

  •  

    EHCI Hand-off: Enabled

    setup_var_cv UsbSupport 0x2 0x27 0x1

     

 

 

1.3 Windows SATA Mode Fix-up

 

If you are dual booting Windows, you will find Windows can no longer boot after setting the SATA mode to AHCI in BIOS. To fix this problem, simply put Windows to safe mode before changing SATA mode to AHCI in BIOS and turn off safe mode after the SATA mode is changed to AHCI. If you have already changed the SATA mode, you may want to switch back the SATA mode before putting Windows to safe mode.

 

 

1.4 OpenCore PlatformInfo

 

To avoid the duplicated serial number causing iCloud issue, please make sure to change the Serial Number, UUID, MLB, and ROM in the PlatformInfo section in OpenCore. I use OpenCore Configuration.app to generate these information. Make sure you are using the corresponding OpenCore Configuration version for your OpenCore version; otherwise, serious problems could occur in the later installation sections.

Edited by shiecldk
Link to comment
Share on other sites

2. Installation

2.1 Boot from OpenCore USB Drive

 

After finishing setting up the BIOS, exit modGRUBShell as instructed in the pre-installation step above. I recommend doing a cold boot instead of a restart after changing the BIOS settings. Choose OpenCore EFI again from the BIOS Menu. This time, boot with the macOS installer, which you may have on the same USB drive. There is a guide on how to create macOS installer on USB drive from Apple.

 

 

2.2 macOS Installer

 

After booting from OpenCore, you will see the macOS installation screen. Remember to format the disk partition you just created to APFS. The lowest supported macOS version on this laptop is macOS Catalina. Follow the instruction in the installer to complete the setup. You will need at least another boot to finish the installation after the installer copy the macOS installer to your SSD.

 

 

2.3 Booting from SSD

 

To boot from the internal SSD, put the OpenCore EFI to your SSD EFI partition after macOS is installed on your SSD. However, the BIOS menu would not show the OpenCore EFI. This is a known issue with many motherboard in hackintosh. To resolve this, you would need a live Linux distro with efibootmgr package installed. Instead of sdX, use nvme0nX for the M.2 SSD.

Edited by shiecldk
Link to comment
Share on other sites

3. Post-Install

3.1 Kext

 

The following kexts are used in OpenCore EFI:

 

ACPIDebug.kext - Can be used with SSDT-RMDT.aml to generates ACPI debug code to identify FN key events and other ACPI events, such as close lid, plugin power adapter, etc.

AirportItlwm-BigSur.kext - Renamed from AirportItlwm.kext; Intel WiFi 6 driver in macOS Big Sur.

AirportItlwm-Catalina.kext - Renamed from AirportItlwm.kext; Intel WiFi 6 driver in macOS Catalina.

AirportItlwm-Monterey.kext - Renamed from AirportItlwm.kext; Intel WiFi 6 driver in macOS Monterey.

AnyiSightCam.kext - Planned to use for WebCam fack-id injection.

AppleALC.kext - Customized version for Realtek ALC294 audio.

AsusSMC.kext - SMC driver for ASUS laptops; needed for keyboard backlight and ALS device; disable SMCLightSensor.kext when using this.

BrightnessKeys.kext - Enable Brightness FN Keys.

CodecCommander.kext - Fix speaker and headphone that have no sound at boot and after sleep/wake.

CPUFriend.kext - CPU power management.

CPUFriendDataProvider.kext - Information generated for CPUFriend.kext.

CpuTscSync.kext - Solve some kernel panics after wake.

DiskArbitrationFixup.kext - No used for now; disabling the "The disk you inserted was not readable by this computer" message at boot on 10.9 or later.

HoRNDIS.kext - Allows the use of Android phone's native USB tethering mode in macOS.

IntelBluetoothFirmware.kext - Injection for Intel Bluetooth.

IntelBluetoothInjector.kext - Injection for Intel Bluetooth.

Lilu.kext - Required kext for arbitrary kext, library, and program patching throughout the system for macOS.

NoTouchID.kext - Lilu plugin for disabling Touch ID support for the use of MBP16 SMBIOS.

NVMeFix.kext - Recommended to enable this for NVMe/M.2 SSD power management in hackintosh.

SMCBatteryManager.kext - Needed for battery indication.

SMCLightSensor.kext - VirtualSMC plugin for SMC light sensor; disabled for AsusSMC.kext.

SMCProcessor.kext -  VirtualSMC plugin for CPU sensor.

SMCSuperIO.kext - VirtualSMC plugin for IO sensors.

VirtualSMC.kext - SMC emulator layer.

VoodooI2C.kext - Required kext for the touchpad and both touchscreens.

VoodooI2CHID.kext - Required kext for the touchpad and both touchscreens.

VoodooPS2Controller.kext - Required kext for the PS2 keyboard.

WhateverGreen.kext - Lilu plugin providing patches to select GPUs on macOS

XHCI-unsupported.kext - Customized kext for the onboard USB ports.

 

CPUFriend

To optimize the CPU power management and save the battery, I use the CPUFriendFriend py script to customize the CPUFriendDataProvider.kext for my i9-10980HK power management settings and the best battery life. If you are using i7-10870H or want to have a better performance more than the battery life, you will have to create and replace the CPUFriendDataProvider.kext in EFI/OC/Kexts with the CPUFriendFriend py script.

 

 

3.2 ACPI

 

SSDT-ALC294.aml

SSDT-ALS0.aml

SSDT-ASUSFN.aml

SSDT-AWAC.aml

SSDT-AsusSMC.aml

SSDT-DDGPU.aml

SSDT-DMAC.aml

SSDT-DTGP.aml

SSDT-EC-USBX.aml

SSDT-ELAN-POLLING.aml

SSDT-GPRW.aml

SSDT-HPET.aml

SSDT-IMEI.aml

SSDT-MEM2.aml

SSDT-OC-XOSI.aml

SSDT-PLUG.aml

SSDT-PMCR.aml

SSDT-PNLFCFL.aml

SSDT-PPMC.aml

SSDT-PS2K.aml

SSDT-PTS.aml

SSDT-RHUB.aml

SSDT-RMDT.aml

SSDT-SBUS-MCHC.aml

SSDT-TB3.aml

SSDT-XSPI.aml

Edited by shiecldk
Link to comment
Share on other sites

4. Post-Install: Required Softwares

4.1 Brightness Control

 

Due to the reason that real Mac do not use OLED panel, there seems to be no way get brightness control work OOB with SSDT patch through SSDT-PNLFCFL.aml. One of the best workaround I have found for now is the use of Lunar.app. The main screen is connected through eDP (hence, it should be identified as LVDS/eDP in Intel Framebuffer) and the secondary screen is connected through DP. However, to get Lunar.app work with the main screen, instead of setting it as LVDS/eDP, I set the connection type as DP. This way, the software brightness control in Lunar.app would work with the main screen.

 

The free license is enough to cover the normal use with the brightness control via FN keys. However, to resolve the brightness control hardware-wise, it is important to look into how brightness is handled by DSDT. In Linux, developers have found a way to call the ACPI commends to adjust brightness for both the OLED panel and the screenPad LCD.

 

 

4.2 Enable/Disable Intel Turbo Boost

 

Without disabling Turbo Boost, the battery life on UX582 is around 1-2.5 hours. To save the battery when you're using the laptop in the mobile, you may want to use Turbo Boost Switcher.app to disable Turbo Boost and re-enable it once you have power adapter available.

Link to comment
Share on other sites

5. Post-Install: Useful Softwares for Dual Screen Laptop

 

In Windows, the window control software is managed by ASUS. You may think that since this laptop is built for Windows, there is few reasons to boot macOS for productive works. However, I have discovered that there are way more softwares in macOS that can boost your productivity way more than the buggy Windows for dual screen laptop.

 

5.1 Window Resize

Magnet

Deskovery3

 

 

5.2 Window Preview

DockMate

 

Edited by shiecldk
Link to comment
Share on other sites

7. Advance

7.1 Update AppleALC

 

Currently, the stock AppleALC.kext does not content the information needed for the onboard ALC294 to fully work. Hence, I modified the platforms.xml and codec to get the onboard audio work. Before AppleALC makes UX582's ALC294 files available to its source code, I use the following setup to update AppleALC:

 

 

7.2 Flash Thunderbolt Firmware

 

For the full functionality of thunderbolt for purposes such as eGPU connection, you may want to flash the thunderbolt ROM.

 

 

7.3 USB WiFi Adapter

 

Due to the fact that AX201 could be very slow with some routers, I purchased an USB WiFi Adapter as a backup in case I need it in some public space. I found the fastest combat dongle I could find is D-Link DWA-181 AC-1300. The driver, Wireless-USB-OC-Big-Sur-Adapter, can be found on GitHub.

Edited by shiecldk
Link to comment
Share on other sites

8. Help Needed with Driver Development

 

There are five main driver-related issues needed to be done with UX582:

 

1. The ScreenPad only works as cursor with click function with VoodooI2C. I am currently working on this issue and need help with more VoodooI2C developers.

2. The trackpad is not working sometimes due to a known VoodooI2C bug: VoodooI2C GitHub Issue #321

3. The numpad is not working in operating system other than Windows. In Linux, this is done by asus-touchpad-numpad-driver. A similar Python driver could be created in macOS.

4. Most FN keys are not working especially the keyboard backlight key is needed the most now. Someone would need to look into how to patch the SSDT or may even need to modify AsusSMC.kext.

5. The brightness control on both the main and secondary screens are done through software control through Lunar.app for now. This is not the correct way to control the brightness as the ScreenPad (secondary screen) is an LCD panel and the power consumption is max-out at max brightness hardware-wise speaking.

Edited by shiecldk
Link to comment
Share on other sites

9. Changelog

Sept 17, 2021:

Set ProcessorType to 0 in config.plist for CPU default recognition.

Updated EFI drivers.

Updated README.md.

 

Sept 14, 2021:

Updated ACPI tables and kexts to fix USB, keyboard backlight, and VoodooI2C polling. (Thanks to [USER=73734]@atrslb[/USER])

Updated README.md.

Removed redundant ACPI tables and kexts.

 

Sept 12, 2021:

Added kexts for Fix-ups and Thunderbolt (currently disabled for more tests to be done).

 

Sept 11, 2021:

Updated the installation guide.

 

Sept 10, 2021:

Pushed initial commit on the installation guide.

Edited by shiecldk
Link to comment
Share on other sites

 Share

×
×
  • Create New...