elementary OS 6 "Odin" on 12" MacBook8,1

elementary OS 6 Beta on 12" MacBook8,1

I first tried various early access builds as well as the Betas (1 and 2) in demo mode (a.k.a live)—see screenshot above.

With the release candidate (RC) elementaryos-6.0-stable.20210805-rc.iso built and made available to GitHub Sponsors on Thu, Aug 5, 2021 I decided that it was finally time to install to disk—though the official release has already been announced for next Tuesday, only three days as of writing.

I failed to install using the default "Erase Disk and Install" option b/c of a libdistinst error:

ERROR: libdistinst: pointer in EFI is null
ERROR: errored while installing system: paritition valdiation: the ESP paritition must be at least 256 MiB in size

I tracked down the error message to libdistinst .

I even found a somewhat related issue and a pull request for the elementary installer—both findings didn't help 🤷.

Packet w/ this additional knowledge I figured that creating my own partition layout should be a feasible way to go. In order to verify this approach, I first installed Pop! OS by System76—which worked like a charm (as usually).

I then re-used the paritition created by the Pop! OS installer for installing elementary OS 6 via the "Custom Install (Advanced)" option.

Unfortunately—again—this didn't work out right away. While the installer seemed to successfully complete the installation, the boot loader (Grub) wasn't able to boot b/c it couldn't find the kernel. 🤔

As I did choose a encrypted (LUKS) partition I figured the installer might not have properly configured Grub.

To verify this assumption I removed the encryption… and the installation and 1th boot succeeded!

Welcome elementary OS 6 on my MacBook.

I guess, I now prepreated for the official release... this coming Tuesday 😎


Webcam

After quite some A LOT of tinkering and research I was finally able to get the FacetimeHD webcam working 💪️.

Disclaimer: video quality is NOT good, but ok'ish for the occasional video call while on the go.

Turns out, following the Getting Started and applying one additional patch was all that's needed 🙃️.

  1. As a prerequisite one need to extract the sensor calibration files as outlined here

  2. Clone the repo patjak/facetimehd

  3. Since the camera is only 480p, one should modify the size/height/width values in two files, as outlined here

# fthd_isp.c

        if (dev_priv->fmt.fmt.width < 640 ||
            dev_priv->fmt.fmt.height < 480) {
                x1 = 80;
                x2 = 480;
        } else {
                x1 = 0;
                x2 = 640;
        }

    ret = fthd_isp_cmd_channel_crop_set(dev_priv, 0, x1, 0, x2, 480);
# fthd_v4l2.c

        dev_priv->fmt.fmt.sizeimage = 640 * 480 * 2;
        dev_priv->fmt.fmt.pixelformat = V4L2_PIX_FMT_YUYV;
        dev_priv->fmt.fmt.width = 640;
        dev_priv->fmt.fmt.height = 480;
  1. Create a signing key to sign the module, as described here:
cd /lib/modules/$(uname -r)/build/certs

sudo tee x509.genkey > /dev/null << 'EOF'
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
[ req_distinguished_name ]
CN = Modules
[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOF

sudo openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pem
  1. Follow the Ubuntu installation steps here. In addition I also set up DKMS (auto-compile on kernal update). Note to self: remeber to manually install linux kernel headers after updating the kernel, e.g. sudo apt install linux-headers-5.13.0-30-generic.

I'm meanwhile rocking elementary OS 6.1 Jólnir and I'm quite happy w/ the setup. 😀️

There are actually only two minor weak points left:

  • Suspend is not working—b/c keyboard and touchpad are available after resuming from suspend.
  • Audio is only available via headphone jack—b/c speakers and microphone are not working.