MacBook Pro (May 2019)にUbuntuを入れる その1
Index 目次
- The Appeal of Macbook 魅力
- Twists and Turns はまりまくりまくりすてぃ
- Installation 構築
- Give a Rest 今回はここまで
The Appeal of Macbook 魅力
以前までは10年以上前に使っていたMacBook Air(11”, Mid 2011)を使っていた。
お金もなかったので中古で購入。OSもMac OS Xと呼ばれていた時代。
バージョンはMountain Lionまで入れたかな?
そうそう当時はネコ科動物の名前を当てていた。懐かしい。
さすがにもうバッテリもヘタってたり、MagSafeのアダプタが使いづらかったり
WiFiが802.11nまでしか対応してなかったり、容量も不安になってきたので。
今回新しくMacBook Pro (13”, 2019)を中古で手に入れた。
現在はAppleシリコン製CPUが主流となっているが、Intel CPU搭載のシリーズ後継機種。
キーボードの上部にタッチバーと、指紋センサーを兼ねている電源ボタンがある。
このタッチバーが曲者で、シチュエーションに応じていろんなボタンを便利に表示させるもので、これが本当に厄介。
コーダやSIerにとってFunctionキーやESCキーが打鍵感の皆無なタッチパネルになっていることはつらい。
特に致命的はESCキーで、VimmerやEmacsenにとって死活問題。
コマンドモードに戻るのに慣れない Ctrl + [ を押したり、M-xを押すのに Alt + x を押したりと不便。
指にフィードバックがないのでブラインドタッチも慣れが必要だし、あと普通にバッテリ浪費している、本当に無用の長物。
現に今のモデルには非搭載。黒歴史と言っていい。

それ以外は特に不満はない。Thunderbolt 3ポートが4つもついているし、Ratinaディスプレイだし、キーピッチも好み。
ということで、この端末を手に入れた。
ただmacOSを動かすには若干非力なので、DebianかUbuntuを入れるって話。
それでも中古なので、バッテリがかなり心配。
新しいのに換装したほうが良いのかもしれない。やり方知らないで無責任に書いてるけど。
あ、あと、SecureBootをOFFにするので、そういうの気になる人とかビジネス用途の人は止めた方がよい。
Twists and Turns はまりまくりまくりすてぃ
簡単に行くもんだと高を括ってた。ところがさすがAppleのノート、一癖あるのがわかってくる。
今回何度もスクラップ&ビルドを繰り返してみてようやく分かった。
なので、2度と繰り返さないようにここに備忘として残す。
ハマったポイントは大まかに4つ
- キーボード・トラックパッドの認識
- タッチバーの認識
- 無線LANデバイスの認識
- カメラの認識
そしてまだ完璧には構築はできておらず、課題が残っている。
ま、それを踏まえて、さてやっていこう。
大きく工程としては3つ
- USBブート
- Ubuntuインストール
- Macbook用調整
Gave up Debian デビアン失敗
Ubuntu構築を紹介する前に、いろいろ失敗したのでちょっと紹介。
元よりDebianが好きだったので、まずはDebianを入れてみた。
USBBootディスクも持っていたので、すぐにでも始められたから。
結果からいうとうまく行かなかった。
今思うとカーネルとドライバさえ入れられれば、Debianでも動いたんじゃないか説。
ただ、本記事ははそこまで突っ込んでいないのであしからず。
トライしてみたことは、bookwormを入れて、apple-bce、apple_ibridgeをいれて、純正WiFiファームウェアからWiFiインタフェースを有効にできなくて頓挫した。(のちに失敗した理由が分かった)
てことで、Ubuntuを入れることに。
あまりUbuntuに詳しくないので、調べて22.04 Jammyというのが目に入ったのでそれにする。
Installation 構築
必要なものを全部書いていく。
The Necessities
- Macbook Pro
- 主役
- USBメモリ 64GB
- 容量は4.5GB以上あればひとまずよいのでは
- USB TypeA(メス) <-> TypeC(オス)変換アダプタ
- USBメモリのコネクタがTypeCなら不要
- USB接続マウス
- インストール中に使用
- USB接続キーボード
- インストール中に使用
- USB接続イーサネットアダプタ
- インストール中に使用した方がよい
- インターネット環境
- インストール中に使用した方がよい
楽に構築したい場合は最低限これらが必要になる。
Creating Boot Disk
家にUbuntuのLive USBディスクはないので、それを作るところから。
用意するものはこれ。
- Windowsマシン
- USBメモリ 64GB
- USB TypeA <ー> TypeC変換アダプタ(USBメモリのコネクタがTypeCだったら不要)
- Ubuntu 22.04.4 LTS (Jammy) ISO
- Rufus
Desktop版のISOイメージをダウンロードして、Rufusで焼けば良い。
はい、終わり。
つぎー。
Installing Ubuntu
あ、そうだ。大事なこと書くの忘れてた。
私はプレインストールされていたmacOSには未練がないので、全ディスクをUbuntuに用意することに。Dual bootしても面白いけどね。
ただ、他にもMacは保有しているので今回は専用機とする。
というわけで、さらばmacOS。こんにちはUbuntuちゃん。

さて、USB Bootするには設定を変える必要がある。
ここらへんのMacbookからはセキュリティ目的のT2セキュリティチップというのが搭載されているので、その設定を変更して上げる必要がある。
x86マシンでいうところのBIOSやらUEFIを守るあれね。
Configuring Boot Security Settings
電源が落ちている状態から、右上の電源ボタンを押す。
すぐに、Command⌘ + k を押し続ける。
するとmacOS復旧用の画面が表示される、
ここで起動セキュリティユーティリティを起動して、「安全な起動」を「セキュリティなし」に、「許可する起動メディア」を「外部メディアまたはリムーバブルメディアからの起動を許可」に設定する。
詳しくはApple T2 セキュリティチップを搭載した Mac の起動セキュリティユーティリティについて - Apple サポート (日本)に書いてある。
Booting from USB
さてやっとUSBブートできる。
Macbook ProにUSB接続イーサネットとUSBメモリ、USBキーボード、USBマウスを挿して(ここ大事)、電源が落ちている状態で、 MacbookのキーボードのOption⌥ を押しながら起動すると、起動メディアを選択する画面が出てくるので、EFIって表示されているオレンジ色(?)のディスクを選択して、「↑」ボタンをクリックする。
USBからの起動がうまく行くと起動メニューが表示される。
ここから先はしばらくUSBキーボードとUSBマウスしか動かないので注意。
Try Ubuntuを選んでデスクトップが表示されるまで待つ。
んで、ここからはUbuntuのインストールウィザードになるのだが、ここは割愛。
ポイントは、サードパーティ製ドライバ用リポジトリもAPTに追加しておくこと、SSDのディスク全体をUbuntuで使うように設定すること。
インストールが終わったら、USBメモリを抜いて再起動。
Booting Ubuntu うぶんつすたーてぃん

再起動が終わったタイミングで、Ubuntuのきれいなデスクトップが見えているはずだが、このままでは
- WiFiが使えない
- キーボードが使えない
- トラックパッドが使えない
- タッチバーが使えない
- カメラが使えない
- Bluetoothは使えそう
- 指紋認証使えない
- A の左隣がCtrlじゃない(個人的な好み)
こんな状態。険しい道のりにみえるが、意外に簡単に解決する。(それもそのはず、何度も失敗しているから)
では、ひとつずつやっつけていく。
Up-to-dating
まずは何はともあれ最新化。
$ apt-get update
$ apt-get -y upgrade
$ apt-get -y install git curl gnupg make python3 libinput-tools python3-gi python-gobject meson gettext dmg2img
カーネルやその他のソフトが最新化される。
git 、cURL、GnuPG、makeなどはこのあとに必要なのでここで入れておく。
はい、これで一回目の再起動。
Enabling keyboard, trackpad and touchbar using linux-t2-lts
t2linux/T2-Debian-and-Ubuntu-Kernel: Ubuntu Kernel for T2 Macs.を参考にカーネルを差し替える。
README.mdを見ればわかるがさらっと紹介。
一番最初のCODENAMEの設定は、導入バージョンが22.04なのでjammyを設定。
$ CODENAME=jammy
$ curl -s --compressed "https://adityagarg8.github.io/t2-ubuntu-repo/KEY.gpg" |\
gpg --dearmor |\
sudo tee /etc/apt/trusted.gpg.d/t2-ubuntu-repo.gpg >/dev/null
$ sudo curl -s --compressed -o /etc/apt/sources.list.d/t2.list "https://adityagarg8.github.io/t2-ubuntu-repo/t2.list"
$ echo "deb [signed-by=/etc/apt/trusted.gpg.d/t2-ubuntu-repo.gpg] https://github.com/AdityaGarg8/t2-ubuntu-repo/releases/download/${CODENAME} ./" |\
sudo tee -a /etc/apt/sources.list.d/t2.list
$ sudo apt update
$ sudo apt install linux-t2-lts
これでまた、新しいカーネルが追加されることに。
その新しいカーネル(6.6.46-1-t2-jammy)はapple-bceとapple-ibrigdeというドライバが自動的に導入されるので、キーボードとトラックパッドとタッチバーが使えるようになるはず。
再起動後に晴れてUSBキーボードとUSBマウスを抜いてもよい。
ただ、このままだとgrubは今のカーネルをブートするはずなので、それをgrub.cfgを修正する必要があるが、ここでは詳しいことは割愛。
ここでは、新カーネルの起動順序の変更を行ったこととして、2回目の再起動。
Improvement of Trackpad
ただこのままではトラックパッドの動作が非常に怪しい。
なんというか反応が鈍いような。そこで次にトラックパッドを少し直していく。
トラックパッドを調整していく。
使用者(私)をinputグループに追加する。
$ sudo gpasswd -a $USER input
ここで一度今のログインセッションを抜けて再度ログインするか、再起動しておく。
$ mkdir work && cd work
$ git clone https://github.com/bulletmark/libinput-gestures.git
$ cd libinput-gestures
$ sudo make install
$ sudo ./libinput-gestures-setup install
んでサービス起動。
libinput-gestures-setup start
libinput-gestures-setup autostart
これでデフォルトの設定ファイルでサービスが起動しているはず。
設定ファイルは /etc/libinput-gestures.conf に保存されている。
仕組みとしてはトラックパッドのジェスチャーを受け取って、xdotoolに渡している。
んで、個人用に設定ファイルを残したい場合は、~/.config/libinput-gestures.conf
最後に設定用のツールを導入する。
$ git clone https://gitlab.com/cunidev/gestures
$ cd gestures
$ meson build --prefix=/usr
$ ninja -C build
$ sudo ninja -C build install
$ cp /etc/libinput-gestures.conf ~/.config/
$ cd ..
インストールが完了すると、アプリ一覧にGesturesが追加されるので、
gestures
このツールを使うとマルチタッチのいろんなジェスチャをカスタマイズできる。
Enabling Wifi Network Interface
一番はまったのがここ。
うまくいったときは思わず叫んでしまった。
ただここでは淡々と解説する。(なぜなら何度も失敗しているので)
これからやることを軽く説明する。
- macOSの純正ファームウェアを適切に取得する。(ここ間違えると何時までも有効にならない沼へ)
- 起動しているカーネルが参照しているファームウェアディレクトリにファームウェアファイルを適切なファイル名で保存する。(ここ間違えると何時までも有効にならない沼へ)
そう、ファームウェアを取得できればこちらの勝ちってこと。
Downloading Recovery OS
OSX-KVM/fetch-macOS-v2.py · GitHubにて、Pythonスクリプトを取得する。
このスクリプトを使って、RecoveryOS(ここではVentura)のディスクイメージをダウンロードする。
んで、そのままの勢いでディスクイメージをマウントする。
$ python3 fetch-macOS-v2.py
1. High Sierra (10.13)
2. Mojave (10.14)
3. Catalina (10.15)
4. Big Sur (11.7)
5. Monterey (12.6)
6. Ventura (13) - RECOMMENDED
7. Sonoma (14)
Choose a product to download (1-7): 6
$ ls
BaseSystem.chunklist BaseSystem.dmg gestures libinput-gestures
$ dmg2img -i BaseSystem.dmg BaseSystem.img
$ ls
BaseSystem.chunklist BaseSystem.dmg BaseSystem.img gestures libinput-gestures
$ sudo losetup --find --show ./BaseSystem.img
/dev/loop14
$ sudo partprobe /dev/loop14
(ここでUbuntuがloopデバイスを認識して、Dockにドライブアイコンが表示されるので、ドライブをダブルタップ)
$ mount |grep $USER
/dev/loop14p1 on /media/$USER/macOS Base System type hfsplus (rw,nosuid,nodev,relatime,umask=22,uid=1000,gid=1000,nls=utf8,uhelper=udisk2)
$
Obtaining Firmware Files
さてリカバリディスクから何を取得するかは、ブートシーケンスでカーネルが教えてくれているはず。
確認してみる。
$ sudo grep -i -E "(error|failed)" /var/log/syslog
Aug 18 21:32:45 ubuntu kernel: [ 7.925150] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.apple,maui-HRPN-u-7.5-X3.bin failed with error -2
Aug 18 21:32:45 ubuntu kernel: [ 7.925351] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.apple,maui-HRPN-u-7.5.bin failed with error -2
Aug 18 21:32:45 ubuntu kernel: [ 7.925384] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.apple,maui-HRPN-u.bin failed with error -2
Aug 18 21:32:45 ubuntu kernel: [ 7.925415] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.apple,maui-HRPN.bin failed with error -2
Aug 18 21:32:45 ubuntu kernel: [ 7.925445] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.apple,maui-X3.bin failed with error -2
Aug 18 21:32:45 ubuntu kernel: [ 7.925473] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.apple,maui.bin failed with error -2
Aug 18 21:32:45 ubuntu kernel: [ 7.925499] brcmfmac 0000:01:00.0: Direct firmware load for brcm/brcmfmac4364b2-pcie.bin failed with error -2
Aug 18 21:32:45 ubuntu kernel: [ 7.925502] brcmfmac 0000:01:00.0: brcmf_pcie_setup: Dongle setup failed
$
ロード出来ていないファームウェアの製品名とコードネームから、取得すべきファイル名を推測する。
ここではbrcmfmac4364b2-pcie.apple,maui-HRPN-u-7.5-X3というのが分かる。
キーワードとしては、brcmfmac、4364、maui、HRPN、-u、X3あたり。
この情報を基にリカバリディスク内で探してみる。
$ cd /media/$USER/macOS\ Base\ System
$ find . -print 2>/dev/null |grep 4364 |grep maui |grep X3
./usr/share/firmware/wifi/C-4364__s-B2/maui-X3.clmb
./usr/share/firmware/wifi/C-4364__s-B2/maui-X3.trx
./usr/share/firmware/wifi/C-4364__s-B2/maui-X3.txcb
./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X3_M-HRPN_V-m__m-7.5.txt
./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X3_M-HRPN_V-m__m-7.7.txt
./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X3_M-HRPN_V-u__m-7.5.txt
$
いくつか見つかる。
ファイルの種類には以下のものがあることがわかる。
- trxファイル (Firmware)
- txcbファイル (TxCap)
- clmbファイル (Regulatory)
- txtファイル (NVRAM)
これらファイルを適切に取得する。
シンボリックリンクになっているものがあるので、念の為実ファイルをコピーすることにする。
$ find . -print 2>/dev/null |grep "C-4364__s-B2" |grep maui |while read i;do ls -l $i;done
lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-ID.clmb -> maui.clmb
lrwxr-xr-x 1 $USER $USER 8 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-ID.trx -> maui.trx
lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-ID.txcb -> maui.txcb
lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X0.clmb -> maui.clmb
lrwxr-xr-x 1 $USER $USER 8 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X0.trx -> maui.trx
lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X0.txcb -> maui.txcb
lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X2.clmb -> maui.clmb
lrwxr-xr-x 1 $USER $USER 8 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X2.trx -> maui.trx
lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X2.txcb -> maui.txcb
lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X3.clmb -> maui.clmb
lrwxr-xr-x 1 $USER $USER 8 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X3.trx -> maui.trx
lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui-X3.txcb -> maui.txcb
-rw-r--r-- 1 $USER $USER 33226 1月 6 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui.clmb
lrwxr-xr-x 1 $USER $USER 9 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui.trx -> ekans.trx
-rw-r--r-- 1 $USER $USER 721 1月 6 2023 ./usr/share/firmware/wifi/C-4364__s-B2/maui.txcb
lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-ID_M-HRPN_V-m__m-7.5.txt -> P-maui_M-HRPN_V-m__m-7.5.txt
lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-ID_M-HRPN_V-m__m-7.7.txt -> P-maui_M-HRPN_V-m__m-7.7.txt
lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-ID_M-HRPN_V-u__m-7.5.txt -> P-maui_M-HRPN_V-u__m-7.5.txt
lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X0_M-HRPN_V-m__m-7.5.txt -> P-maui_M-HRPN_V-m__m-7.5.txt
lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X0_M-HRPN_V-m__m-7.7.txt -> P-maui_M-HRPN_V-m__m-7.7.txt
lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X0_M-HRPN_V-u__m-7.5.txt -> P-maui_M-HRPN_V-u__m-7.5.txt
lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X2_M-HRPN_V-m__m-7.5.txt -> P-maui_M-HRPN_V-m__m-7.5.txt
lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X2_M-HRPN_V-m__m-7.7.txt -> P-maui_M-HRPN_V-m__m-7.7.txt
lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X2_M-HRPN_V-u__m-7.5.txt -> P-maui_M-HRPN_V-u__m-7.5.txt
lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X3_M-HRPN_V-m__m-7.5.txt -> P-maui_M-HRPN_V-m__m-7.5.txt
lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X3_M-HRPN_V-m__m-7.7.txt -> P-maui_M-HRPN_V-m__m-7.7.txt
lrwxr-xr-x 1 $USER $USER 28 9月 16 2023 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui-X3_M-HRPN_V-u__m-7.5.txt -> P-maui_M-HRPN_V-u__m-7.5.txt
-rw-r--r-- 1 $USER $USER 12560 8月 6 2021 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui_M-HRPN_V-m__m-7.5.txt
-rw-r--r-- 1 $USER $USER 12964 8月 6 2021 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui_M-HRPN_V-m__m-7.7.txt
-rw-r--r-- 1 $USER $USER 12905 8月 6 2021 ./usr/share/firmware/wifi/C-4364__s-B2/P-maui_M-HRPN_V-u__m-7.5.txt
$
見るとシンボリックリンクが貼られている。
先程のキーワードを基に以下のファイルとした。
- P-maui_M-HRPN_V-u__m-7.5.txt
- maui.clmb
- ekans.trx
- maui.txcb
この4ファイルを以下のファイル名で保存する。なぜこのファイル名かというと、何度も失敗してはログファイルを確認して分かったから。
- P-maui_M-HRPN_V-u__m-7.5.txt -> brcmfmac4364b2-pcie.txt
- maui.clmb -> brcmfmac4364b2-pcie.clm_blob
- ekans.trx -> brcmfmac4364b2-pcie.apple,maui-HRPN-u-7.5-X3.bin
- maui.txcb -> brcmfmac4364b2-pcie.txcap_blob
こんな感じね。
$ sudo cp ./usr/share/firmware/wifi/C-4364__s-B2/P-maui_M-HRPN_V-u__m-7.5.txt /lib/firmware/brcm/
$ sudo cp ./usr/share/firmware/wifi/C-4364__s-B2/maui.clmb /lib/firmware/brcm/
$ sudo cp ./usr/share/firmware/wifi/C-4364__s-B2/ekans.trx /lib/firmware/brcm/
$ sudo cp ./usr/share/firmware/wifi/C-4364__s-B2/maui.txcb /lib/firmware/brcm/
$ cd /lib/firmware/brcm
$ sudo ln -s P-maui_M-HRPN_V-u__m-7.5.txt brcmfmac4364b2-pcie.txt
$ sudo ln -s maui.clmb brcmfmac4364b2-pcie.clm_blob
$ sudo ln -s ekans.trx brcmfmac4364b2-pcie.apple,maui-HRPN-u-7.5-X3.bin
$ sudo ln -s maui.txcb brcmfmac4364b2-pcie.txcap_blob
これで再起動。
画面右上に電波のマークが表示されていれば、WiFiインタフェースが有効になっているはず。
USB接続のイーサネットアダプタは外して良くなる。
Give a Rest 今回はここまで
長くなったのでここでやめておく。
かなり疲れた。
次は、カメラや指紋認証にトライしてみる。