こちらは、MacBookAir9,1(2020)で実践しましたが、MacBookProでも動作すると思います。
2016年以降のMacには、T2セキュリティチップがあり、単純にはLinuxを実行できなくなりました。
しかし、有志でドライバやLinuxカーネルへのパッチが作られ、おおよそのハードウェアは動作するようになっています。
各世代のMacBookAir/Proで動作するものリスト https://github.com/Dunedan/mbp-2016-linux
なお、自分の環境では、以下は動作しませんでした。
- WiFi : USBの外付けWiFiアダプタで代用
資料
- https://gist.github.com/gbrow004/096f845c8fe8d03ef9009fbb87b781a4
- keyboard,touchpad driver https://github.com/roadrunner2/macbook12-spi-driver/tree/mbp15
- T2 Driver https://github.com/MCMrARM/mbp2018-bridge-drv/
- トラックパッドを快適に使うためにカーネルパッチを当てる https://github.com/aunali1/linux-mbp-arch
- 各世代のMacBookAir/Proで動作するものリスト https://github.com/Dunedan/mbp-2016-linux
必要なもの
- USB メモリ
- USB キーボード
- USB マウス
- USB WiFiアダプタ、もしくは、Ethernetアダプタ
USBキーボードとマウスは、ドライバが動作するまで必要になります。
パーティションの分割
macOS を起動し、Utilities -> Disk Utilities からパーティションを作成。
- MacintoshHD 50G
- Linux exfat 200G
( exfat にしたのは特に理由はありません )
Boot 可能な USB メモリの作成
Ubuntu 20.04 Desktop を使用。USB メモリの作成手順については、Ubuntu サイトの上部の Download タブを開き、TUTORIALS の Create a bootable USB stick on ...を参照。
BIOS の設定的なの
macOS を再起動し、 Cmd+R をおしながら起動する。
macOS Utilities が表示されたら、上部メニューバーの Utilities -> Startup Security Utility を起動し、以下を設定する
- Secure Boot : No Security
- Allowed Boot Media : Allow booting from external or removable media
Utilities -> Terminal を起動し、以下を設定する
csrutil disable
USB メモリの起動と、インストーラーの起動
Option キーを押しながら起動する。
USB メモリっぽい EFI Boot が 2 つ表示される(2 つ表示されない場合は、電源を長押しして再起動する)ため、右側を選択する。
Grub メニューでは Ubuntu
を選択する。
Ubuntu のインストーラが立ち上がるが、新たに接続した USB キーボードとマウスしか反応しないため、これを使用する。
Ubuntu の Desktop が表示されるが、Try Ubuntu
を選択する。
左下のメニューから、Terminal を起動し、Bootloader なしのオプションを追加して Ubuntu のインストーラを起動する。
sudo ubiquity -b
インストール先の設定
インストール先の選択で、Something else を選択する。
/dev/nvme0n1p3
が分割したパーティションに当たるため、これを、Format Ext4、Mount Path / に設定する。
Boot Loader のインストール先は /dev/nvme0n1p3
を選択する。
その他のインストールの設定はお任せ。
GRUB のインストール
再び USB メモリでTry Ubuntu
で Ubuntu を起動し、Terminal を起動する。
以下のコマンドで、パーティション nvme0n1p1 、nvme0n1p2 、nvme0n1p3 があることを確認する。
lsblk
ここではパーティションは以下としている
- nvme0n1p1 : EFI
- nvme0n1p2 : macOS
- nvme0n1p3 : Ubuntu
ここで EFI と Ubuntu のパーティションをマウントして、grub-install を行う。
この時 --force
を付ける必要があった。
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 のキーボード、マウスを利用する。
また、私の場合には WiFi が使えるようにならなかったため、USB の WiFi アダプタを使用する。
キーボードとトラックパッドが動くまで
今動いているカーネルのバージョンを確認する。
uname -r
bce というモジュールをビルド、インストールする。
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
起動時にモジュールを読み込むようにする。
# vi /etc/modules
bce
ここのドライバをインストールする。
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 本指スクロールができないため、以下のカーネルパッチを当てる必要がある。
Kernel にパッチを当てて、トラックパッドを快適に使う
自分の環境では、全てのパッチを当てると動作しなかったため、以下のパッチのみを適用している。
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 を入手する。
git clone https://github.com/aunali1/linux-mbp-arch
git clone https://github.com/torvalds/linux
cd linux
git checkout v5.6
トラックパッドは USB デバイスとして認識する。
マシンによって、ProductID が異なるので、dmesg でそれを確認する。ここでは、 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の作り方を心得ていなくて出せていない。
# 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
パッチを適用する。
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。
make menuconfig
カーネルをビルドする。-j16
は 16 並列のビルドを行うことを示すので、CPU のスレッド数を設定する。自分の場合は別マシンでビルドを行っていた(MacBookAir だと貧弱)。
make-kpkg -j 16 --rootcmd fakeroot --initrd --append_to_version=-mbp20 kernel_image kernel_headers
ビルドが終わると、Debian パッケージができるのでインストールする。
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 を設定し、再起動する。
sudo grub-reboot 2
sudo reboot
Ubuntu 起動後、目的のカーネルで起動しているかどうかを確認する。
uname -r
bce を再ビルドしてインストールする。再ビルドインストールの方法は上と同じ。
spi ドライバが正しく起動しないことがあったため、再インストールする。
sudo dkms uninstall -m apple-ibridge -v 0.1
sudo dkms install -m apple-ibridge -v 0.1
再起動する。
sudo grub-reboot 2
sudo reboot
正しくトラックパッドのパッチがあたっている場合、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 を使うと直感的に変更できるので便利です。
sudo apt install grub-customizer
sduo grub-customizer
キーボードとトラックパッドのカスタマイズ
# Functionキーをメディアキーではなく、Functionキーとして使う
echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode
# CmdキーをAlt、OptionキーをSuperに割り当てる
echo 1 | sudo tee /sys/module/hid_apple/parameters/swap_opt_cmd
# 2本指タップでの右クリックを有効にする
xinput set-prop 'bcm5974' 'libinput Tapping Enabled' 1
# ダブルタップドラッグを無効化する
xinput set-prop 'bcm5974' 'libinput Tapping Drag Enabled' 0