Skip to content

Instantly share code, notes, and snippets.

@74th
Last active August 20, 2023 03:37
Show Gist options
  • Save 74th/ac8613a35aac5a16b71affe1853c563f to your computer and use it in GitHub Desktop.
Save 74th/ac8613a35aac5a16b71affe1853c563f to your computer and use it in GitHub Desktop.
MacBookAir(2020) へ のUbuntuのインストール

MacBookAir9,1(2020)へ の Ubuntu 20.04 のインストール (installing Ubuntu 20.04 to MacBookAir9,1(2020))

MacBookPro でも動作すると思います。(The followings work on other MacBookPro.)

自分の環境では、以下は動作しませんでした。(WiFi on MacBookAir does not work on my machine.)

  • WiFi : USB の外付け WiFi アダプタで代用 (I use USB WiFi Adapter instead of WiFi on MacBookAir.)

資料(References)

必要なもの (Requirements)

  • USB メモリ (USB stick)
  • USB キーボード (USB keyboard)
  • USB マウス (USB mouse)
  • USB WiFi アダプタ、Ethernet アダプタ (USB WiFi adapter or USB Ethernet adapter)

パーティションの分割 (split partitions)

macOS を起動し、Utilities -> Disk Utilities からパーティションを作成。(boot macOS, launch Utilities -> Disk Utilities and create partitions.)

  • MacintoshHD 50G
  • Linux exfat 200G

(exfat にしたのは特に理由はありません。exfat is not for anything.)

Boot 可能な USB メモリの作成 (create bootable USB stick)

Ubuntu 20.04 Desktop を使用。USB メモリの作成手順については、Ubuntu サイトの上部の Download タブを開き、TUTORIALS の Create a bootable USB stick on ...を参照。(see Ubuntu site "Create a bootable USB stick on".)

BIOS の設定的なの (setting BIOS)

macOS を再起動し、 Cmd+R をおしながら起動する。(Boot MacBookAir with Cmd+R.)

macOS Utilities が表示されたら、上部メニューバーの Utilities -> Startup Security Utility を起動し、以下を設定する。(When macOS Utilities is diplayed, launch Utilitis -> Startup Security Utility and set the followings.)

  • Secure Boot : No Security
  • Allowed Boot Media : Allow booting from external or removable media

Utilities -> Terminal を起動し、以下を設定する (Launch Utilities -> Terminal and set followings.)

csrutil disable

USB メモリの起動と、インストーラーの起動 (Boot USB stick and launch Installer)

Option キーを押しながら起動する。(Boot MacBookAir with Option.) USB メモリっぽい EFI Boot が 2 つ表示される(2 つ表示されない場合は、電源を長押しして再起動する)ため、右側を選択する。(There are two EFI Boots, select right one. If there is only one EFI Boot, you need reboot.)

Grub メニューでは Ubuntu を選択する。(Select Ubuntu on Grub.)

Ubuntu のインストーラが立ち上がるが、新たに接続した USB キーボードとマウスしか反応しないため、これを使用する。(Ubuntu Installer was launched, it needs USB Mouse and Keyboard.)

Ubuntu の Desktop が表示されるが、Try Ubuntuを選択する。(Ubuntu Desktop was launched, and select "Try Ubuntu".)

左下のメニューから、Terminal を起動し、Bootloader なしのオプションを追加して Ubuntu のインストーラを起動する。(Launch Terminal from left side menu, and launch Ubuntu Installer with no Bootloader option.)

sudo ubiquity -b

インストール先の設定 (installation destination)

インストール先の選択で、Something else を選択する。(Select "Something else" for installation destination.)

/dev/nvme0n1p3 が分割したパーティションに当たるため、これを、Format Ext4、Mount Path / に設定する。(Set /dev/nvme0n1p3 to Format: Ext4 and Mount Path: / .)

Boot Loader のインストール先は /dev/nvme0n1p3 を選択する。(Select /dev/nvme0n1p3 as Boot Loader installation destination.)

その他のインストールの設定はお任せ。(No need other settings.)

GRUB のインストール (installing GRUB)

再び USB メモリでTry Ubuntuで Ubuntu を起動し、Terminal を起動する。(Boot Ubuntu with USB stick and Try Ubuntu, and launch terminal.)

以下のコマンドで、パーティション nvme0n1p1 、nvme0n1p2 、nvme0n1p3 があることを確認する。(Check partitions with the following command)

lsblk

ここではパーティションは以下としている (I uses partitions as the following purpose)

  • nvme0n1p1 : EFI
  • nvme0n1p2 : macOS
  • nvme0n1p3 : Ubuntu

ここで EFI と Ubuntu のパーティションをマウントして、grub-install を行う。 この時 --force を付ける必要があった。(Mount partitions of EFI and Ubuntu, do grub-install. It needs --force option.)

sudo -s
mount /dev/nvme0n1p3 /mnt
mount /dev/nvme0n1p1 /mnt/boot/efi
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
grub-install --force /dev/nvme0n1
update-grub

PC を再起動する。このとき、Option キーを押しながら起動し、EFI Bootを選ぶ。すると、Ubuntu が起動するようになる。この Ubuntu ではキーボードとトラックパッドがまだ使うことができないため、USB のキーボード、マウスを利用する。(Reboot MacBookAir with Option and select EFI Boot. Ubuntu will launch. But TrackPad and Keyboard on MacBookAir does not work, you need use USB mouse and keyboard.)

また、私の場合には WiFi が使えるようにならなかったため、USB の WiFi アダプタを使用する。(It also needs USB WiFi Adapter.)

キーボードとトラックパッドが動くまで(complete work of keyboard and TrackPad)

今動いているカーネルのバージョンを確認する。(Check kernel version.)

uname -r

bce というモジュールをビルド、インストールする。(Build module bce and install.)

git clone https://github.com/MCMrARM/mbp2018-bridge-drv.git
cd mbp2018-bridge-drv
make
sudo cp bce.ko /usr/lib/modules/5.4.0-37-generic/kernel/drivers/pci/bce.ko

起動時にモジュールを読み込むようにする。(Load the module at boot time.)

# vi /etc/modules
bce

ここのドライバをインストールする。(Install following driver.)

sudo apt install dkms
git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git /usr/src/apple-ibridge-0.1
sudo dkms install -m apple-ibridge -v 0.1

再起動する。上の 2 つのモジュールが正しく読み込まれればキーボードとトラックパッドが動作する。ただしトラックパッドはクリックができるだけで、2 本指タップや 2 本指スクロールができないため、以下のカーネルパッチを当てる必要がある。(Reboot again. If is success loading two modules, keyboard and trackpad will work. But trackpad is not able to scroll with two fingers, it need following kernel patch.)

Kernel にパッチを当てて、トラックパッドを快適に使う (kernel patch for suitable trackpad)

https://github.com/aunali1/linux-mbp-arch

自分の環境では、全てのパッチを当てると動作しなかったため、以下のパッチのみを適用している。(When I used all patches, MacBookAir did not boot. So I uses the followings.)

3002-applesmc-make-io-port-base-addr-dynamic.patch
3003-applesmc-switch-to-acpi_device-from-platform.patch
3004-applesmc-key-interface-wrappers.patch
3005-applesmc-basic-mmio-interface-implementation.patch
3006-applesmc-fan-support-on-T2-Macs.patch
4001-touchpad.patch
4002-keyboard-backlight.patch

パッチと、Linux Kernel を入手する。(Get patches and Linux Kernel code.)

git clone https://github.com/aunali1/linux-mbp-arch
git clone https://github.com/torvalds/linux
cd linux
git checkout v5.6

トラックパッドは USB デバイスとして認識する。(Tackpad is recognized as USB Device.) マシンによって、ProductID が異なるので、dmesg でそれを確認する。ここでは、 0x0280 であることが確認できる。(Its ProductID is different on each machine, so check it with dmesg. Here, it can be confirmed it is 0x0280. )

# dmesg
[    2.546351] usb 5-5: New USB device found, idVendor=05ac, idProduct=0280, bcdDevice= 9.20
[    2.546353] usb 5-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[    2.546355] usb 5-5: Product: Apple Internal Keyboard / Trackpad
[    2.546356] usb 5-5: Manufacturer: Apple Inc.
[    2.546357] usb 5-5: SerialNumber: FM7020402GHN1QWAH+CML

これをパッチ中の適当なデバイスのものを上書きする。このリストにあるマシンならば変更は不要。自分は USB_DEVICE_ID_APPLE_WELLSPRING10_T2_Aに上書きした。 本来なら PR にすべきところなのだが、patch の作り方を心得ていなくて出せていない。(Update available device. If it available on list, its not need the change. I updated device id of USB_DEVICE_ID_APPLE_WELLSPRING10_T2_A.)

# vi linux-mbp-arch/4001-touchpad.patch
 #define USB_DEVICE_ID_APPLE_WELLSPRING9_ISO		0x0273
 #define USB_DEVICE_ID_APPLE_WELLSPRING9_JIS		0x0274
+#define USB_DEVICE_ID_APPLE_WELLSPRING10_T2_A	0x0280
+#define USB_DEVICE_ID_APPLE_WELLSPRING10_T2_B	0x027b
+#define USB_DEVICE_ID_APPLE_WELLSPRING10_T2_C	0x027c

パッチを適用する。(Apply patches.)

patch -p1 --verbose < 3002-applesmc-make-io-port-base-addr-dynamic.patch
patch -p1 --verbose < 3003-applesmc-switch-to-acpi_device-from-platform.patch
patch -p1 --verbose < 3004-applesmc-key-interface-wrappers.patch
patch -p1 --verbose < 3005-applesmc-basic-mmio-interface-implementation.patch
patch -p1 --verbose < 3006-applesmc-fan-support-on-T2-Macs.patch
patch -p1 --verbose < 4001-touchpad.patch
patch -p1 --verbose < 4002-keyboard-backlight.patch

ビルドする設定が設定できるが、特に標準のままで OK。(Select default for kernel build settings.)

make menuconfig

カーネルをビルドする。-j16は 16 並列のビルドを行うことを示すので、CPU のスレッド数を設定する。自分の場合は別マシンでビルドを行っていた(MacBookAir だと貧弱)。(Build kernel. -j16 means build 16 parallels build, so set the number of CPU threads. On my case, I use other machine, because of MacBookAir is not strong.)

make-kpkg -j 16 --rootcmd fakeroot --initrd --append_to_version=-mbp20 kernel_image kernel_headers

ビルドが終わると、Debian パッケージができるのでインストールする。(After builds, install the debian package.)

sudo apt install ./linux-headers-5.6.0-mbp20+_5.6.0-mbp20+-10.00.Custom_amd64.deb ./linux-image-5.6.0-mbp20+_5.6.0-mbp20+-10.00.Custom_amd64.deb

次の起動でこのカーネルが起動するように Grub を設定し、再起動する。(Set Grub for booting the kernel, and reboot.)

sudo grub-reboot 2
sudo reboot

Ubuntu 起動後、目的のカーネルで起動しているかどうかを確認する。(After booting Ubuntu, check the target kernel is used.)

uname -r

bce を再ビルドしてインストールする。再ビルドインストールの方法は上と同じ。(Rebuild bce in the same way.)

spi ドライバが正しく起動しないことがあったため、再インストールする。(When spi driver does not work, reinstall it.)

sudo dkms uninstall -m apple-ibridge -v 0.1
sudo dkms install -m apple-ibridge -v 0.1

再起動する。(Reboot.)

sudo grub-reboot 2
sudo reboot

正しくトラックパッドのパッチがあたっている場合、bcm5974 というトラックパッドが認識する。(When trackpad patch success, trackpad was recognized bcm5974.)

# xinput list
⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ bcm5974                                 	id=12	[slave  pointer  (2)]

大丈夫そうならば、Grub で起動するカーネルをビルドしたものに変更する。grub-customizer を使うと直感的に変更できるので便利。(Set default boot kernel.grub-customize is suitable.)

sudo apt install grub-customizer
sduo grub-customizer

キーボードとトラックパッドのカスタマイズ(Customize Keyboard and Trackpad)

# FunctionキーをFunctionキーとして使う(Using Function Keys as Function Key(not as Media Keys).)
echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode

# CmdキーをAlt、OptionキーをSuperに割り当てる(Assign Cmd Key to Alt and Option Key to Super.)
echo 1 | sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd

# 2本指タップでの右クリックを有効にする(Enable two finger tap as right click.)
xinput set-prop 'bcm5974' 'libinput Tapping Enabled' 1

# ダブルタップドラッグを無効化する(Disable double tap dragging.)
xinput set-prop 'bcm5974' 'libinput Tapping Drag Enabled' 0
@74th
Copy link
Author

74th commented Jul 29, 2020

I didn't try it.
Please see https://github.com/Dunedan/mbp-2016-linux#wi-fi .

@natokeda123
Copy link

質問なのですが,「Bootloader なしのオプションを追加して Ubuntu のインストーラを起動する。」とありますがその後に「Boot Loader のインストール先は /dev/nvme0n1p3 を選択する。(Select /dev/nvme0n1p3 as Boot Loader installation destination.)」とあります.これはブートローダーなしのオプションは使ってないのですか?それともブートローダーだけを後から入れる方法があるということですか?

@74th
Copy link
Author

74th commented Oct 31, 2020

@natokeda123 指摘の通り、Boot Loaderなしオプションを使って、Boot Loaderをインストールしないほうが正しそうです。
後の工程で GRUB Intsall しているので。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment