chowderless random hacks and pointless shenanigans

Skylake iMac and Linux (Part 2)

You may recall (or have searched for) this old post, where I documented the process needed to get Linux booting on a Skylake-based iMac. Since that post, a few things have changed, and it’s about time for an updated post now that I’ve had a few minutes to try some things out.

Installing

Luckily, unlike last time, most recent versions of popular Linux distributions come with shiny new kernels. I’ve tested this with Fedora 27 and Ubuntu 17.10 – I fully expect Arch, or any distro with a default kernel of 4.13 or greater, to work similarly. Here’s the process:

  1. Optional: Use Disk Utility to shrink the Mac OS partition and make some unallocated free space for Linux. You don’t have to do this, but it may come in handy if Apple releases a firmware update. I’d also recommend leaving a small Mac OS partition if you’re using Ubuntu – see the footnote below.1

  2. Prepare a USB flash drive using the installation ISO of your choice.

  3. Hold down the Option key while booting up your Mac, and select the flash drive. It may show up as EFI Boot.

  4. Press e at the installer’s GRUB menu to edit the boot parameters. You’ll need to add this to the end of the line that usually ends with quiet splash or similar:

    acpi=off nomodeset

    Press F10 to continue booting up. Only one CPU core will be visible to the system as a result of these kernel flags – this is temporary, however. Full performance will be restored later. 2

  5. Continue the installation process – if you’re using the whole SSD and not planning to dual-boot Mac OS, feel free to let the Linux installer do what it wants with the whole drive. If you’re are dual-booting, you may need to configure the partition layout manually. Be sure to make a small (512MB or so) partition for /boot, where the bootloader will be installed.

  6. After installation completes, reboot into the new Linux installation. At the GRUB screen, press e and add the following kernel flags:

    irqpoll no_timer_check nomodeset

    Press F10 to continue booting.

  7. After installation, edit the GRUB default configuration to include the kernel flags from step 5 by default. This varies based on distribution – the defaults are typically located in /etc/default/grub. Do note that the Fedora installer includes any kernel flags set in the installation ISO by default, so you’ll need to remove them from the file.

In my testing, this setup persists and remains stable after installation and updates. Fedora 27, for example, was updated from kernel 4.13.9 to 4.14.14 as part of the standard system update process, and the kernel flags were retained and continue to work.


  1. In recent versions of Ubuntu, the default behaviour is to not show the GRUB menu at all if Ubuntu is the only detected operating system installed. A dual-boot configuration will enable the menu by default. You can also attempt to modify the system's GRUB settings from a live USB, but I haven't had the opportunity to test this to any significant degree.
  2. I don't know why this doesn't work using the kernel flags that are used after the system installed -- I can only chalk it up to some weird difference in the live ISO environment.