12インチMacBook(2016)をUbuntu 22.04で使う
一年の終わりが近い
ので、毎年のように書いている自分の作業環境の話を2023年版にアップデートしておく
920g、黄金時代のMacBook
MacとmacOS
まずmacOSのライフサイクルについておさらいすると、macOSは毎年6月のWWDCあたりで発表され、10月頃のiPhone発売と近い時期にリリースされ、初期リリースから33ヶ月ほどでセキュリティーfixが止まる
セキュリティーfixが止まった頃には次のOSのメジャーバージョンがリリースされているのでそちらへアップデートしろということになるが、非対応デバイスは切り捨てられる*1
歴史的にMacの発売からセキュリティーfixが終了するまでの期間は約7年で、それぐらい経つうちには数回バッテリーがヘタり、バッテリーのGenius Barでの修理受付が終了し、互換バッテリー在庫も枯渇していく*2、というライフサイクルである
[*1] OpenCore Legacy Patcherを利用して新macOSを無理やり旧Macへインストール派閥も存在するがHackintoshの類なのでここでは扱わない
[*2] ちなみに12インチMacBookはキーボードが故障しやすいので交換用パーツを一式手元に抑えてある
あまり知られていないが、もう8年近くも重量1kgを下回るMacBookは発売されていない
いっぽうで2023年にリリースされたmacOS 14(Sonoma)では全世代の12インチMacBookがサポートを打ち切られ、2022年リリースのmacOS 13(Ventura)の2025年7月最終アップデート(見込み)によって全てのサポートが終了する
これがMacBookにおける2025年問題である
サポートの切れたOSを日常利用するのはセキュリティー上望ましくないので12インチMacBookユーザーはそろそろ逃げ道を本格検討する必要があり、その際に有力な選択肢がLinuxである
MacとLinux
12インチMacBookのようなクラシックなデバイスはLinux、とりわけUbuntuでの利用と相性が良い
現代のUbuntu標準GNOME Desktopは非力なCPUでも十分実用的に動作するし、メモリを一定抑制しやすいようにFirefoxを常用するなどすれば*3日常的な作業における支障は少ない
[*3] Appleが低レンジMacにおいて「メインメモリ8GBでいいでしょ?」と設計する裏側にはmacOSのメモリ圧縮機能とSSDへのスワップアウト性能の良さを前提としている部分があり、デスクトップLinuxは必ずしもこの思想と相性が良くないためChromeは正直きびしい部分がある
年が明けたらUbuntu 24.04が近づいてくる
Ubuntuの非サーバー構成インストールではインストール後も定期的にkernelバージョンが上がっていくのでメジャーなLTS更新だからといって基盤部分で大きな変化はないことが多い*4が、メジャーなアップデートではPipeWireやWayland、Flutterの利用領域拡大によって確実に前向きな変化が起きるので早い段階でバージョンアップするようにしている
OSのメジャーバージョンアップは何かとトラブルを引き起こして忌避されがちであるが、個人的にはdist-upgradeせずにOS新規インストール&Homeディレクトリの式年遷宮をする派*5なので、次の遷宮機会時にはこれまでMac標準のAPFSへ割り当てていたディスク領域を大幅にshrinkさせてLinux用に再割当てするのが楽しみ、という程度のお気楽な2年に1度のイベントである
[*4] 逆にLTSライフサイクル中を通じてkernelの新規featuresも取り込まれていきほぼ最新を使い続けられるというメリットがあり、Ubuntuを積極的に選ぶ要素のひとつでもある
[*5] どのみちapt/snapで導入できないものは数えるほどしかインストールしない
さて、Ubuntuでの利用を前提として12インチMacBookのLinuxでのドライバサポート状態をレビューしておく
12インチ MacBook Early 2016(MacBook 9,1)のLinuxドライバサポート状況
内蔵キーボード、トラックパッド、Wi-Fiまでは標準ドライバで賄える
オーディオ出力
スピーカーと有線イヤフォンの利用にはクセがある
- Linux標準ドライバだと「イヤフォンジャック経由の出力ができる」
- https://github.com/leifliddy/macbook12-audio-driverの非公式ドライバだと「スピーカーからの出力ができる」
これらを手動または半自動で切り替えることになる
個人的には本体スピーカーから音を出したい場面がないので詳しく調べていない
バッテリー管理
前述のように本体内蔵バッテリーはサポートの切れたMacを延命する重要な要素で、バッテリー寿命をのばすためには充電系のコントロールが欠かせない
Mac内部の設定値を適宜いじることでmacOSには及ばないもののそれなりの延命は期待できる
GNOME Desktopから手軽にバッテリー充電上限を設定できるようにhttps://github.com/muojp/itawalyシェル拡張を自作したので、機会があれば試してみてほしい
Bluetooth
厄介その1がBluetoothで、標準サポートされていない
https://github.com/leifliddy/macbook12-bluetooth-driver
ここのBluetoothドライバを導入すれば動作する
kernel更新の都度カーネルモジュールをビルドして組み込むのは若干面倒であるが、作業量自体が多いわけではなく基本的に2-3分で終わる
HIDたとえばトラックボールやHHKB Proを接続して使う分には問題ないが、SBCの音声ストリームですらかなり途切れ途切れになるためBluetoothヘッドセットを接続してBGMを流すような用途にはほぼ使えない
おそらくBT通信チップの初期化シーケンスでネゴシエーションしている動作モードが低ビットレート版のもので 本来は接続機器にあわせてモード変更コマンドを発行する必要があるのだろう(高レートで固定すると消費電力へ響くというパターンもありうる)
このあたりは非公式情報によって構築されたドライバの弱みポイントではあり、オーディオ出力やオンライン会議用の利用については内蔵BT利用を諦めてUSB接続のBluetoothドングルを利用するほうが格段に安定する
ちなみに2015年モデル(MacBook 8,1)は前述の非公式ドライバを導入してもBluetoothモジュールが動作しないためBluetoothドングルが必須である
Webカメラ(FaceTime)
厄介その2がWebカメラである
2011年以降のMacはFaceTimeを搭載している
これらの多くはFaceTime HDと呼ばれているが12インチMacBookではどうも縦解像度480が上限のようで、どうひいき目に評してもSDである
この手の内蔵カメラモジュールは内部で適当なUSBインタフェースへ接続されるのが普通かと思っていたらFaceTime HDは内部がPCIe接続になっている
なぜPCIe?と思うが仮に60fps 1080pを24bit ベタRGBで伝送しようとすると約3Gbps必要であり(実際にはFaceTime HDは720pの時代が長くフレームレートも15-20fps程度なので500Mbpsない程度)、内蔵のUSB 2.0へぶら下げるのには多少荷が重い
Wi-Fi/BluetoothモジュールがPCIe x1接続になっているパターンは今でもそれなりに見かけるし、特にプラグアンドプレイを前提とせず電源管理の柔軟性を確保したいデバイスなら悪くない選択肢なのだろう
さて、Linux kernel自体にFaceTimeサポートのコードは取り込まれていないが、https://github.com/patjak/facetimehdの非公式ドライバによって動作することが知られている*6
[*6] 初期化シーケンスで必要となるファームウェアの再配布問題を考えるとおそらくFaceTime/HDサポートが標準へ取り込まれることはないだろう
12インチMacBookについては少々特殊で、前述の非公式ドライバをそのままビルドして組み込んでも初期化でコケて動作しない
https://github.com/patjak/facetimehd/issues/196#issuecomment-569858722のパッチを当てると無事に動作する
ChromeOS Flexという選択肢
仮にAppleがまだ最新OSでデバイスをサポートしているとしてもOS挙動が重すぎて使いたくない、というのはよくある話である
いっぽうChromeOSと廉価版Chromebook群によるPC業界の学びは、用途を十分に絞り込めば現代でもメインメモリ4GB+16GB eMMCという貧弱な構成から十分に実用的なPC環境を構築・維持できるということである
そして2020年にGoogleがCloudReadyを買収し、2022年にChromeOS Flexを公開したことにより非Chromebookへの限定的なChromeOSサポートが拡大しており、古いMacへChromeOS Flexをインストールするという道も現実味を帯びてきている
これが一筋縄でいかないのはChromeOSの構造に由来する
ChromeOSは枯れたLinux kernelにモダンなユーザーランドを組み合わせることでアップデート速度とメンテナンスコストのバランスを取るようになっているため、つまりは搭載しているLinux kernelが極端に古かったりする
MacでLinuxを使う際にはこのあたりの問題を踏みやすい(なにぶんほとんどのハードウェア要素の詳細が非公開で有志による解析と非公式ドライバの開発に依存している)
12インチMacBookは特にMac側のアーキテクチャ分断のモダン側の崖っぷち部分に位置しており、同機が発売された時点のLinux標準ドライバでは内蔵SPIインタフェースのキーボードが利用できない、内蔵NVMe SSDへアクセスできない、といった典型的なペリフェラルサポートにまつわる問題があった
これらは2017年頃までに概ね解消してLinux kernel 5.3周辺で大きく改善したが、ChromeOSのベースバージョンが問題となる
1年ぐらい前に試した際には
- ChromeOS 105:Linux 5.10ベース
- ChromeOS Flex:Linux 4.4あたりベース
であり*8、ChromeOS FlexのインストーラーをUSBドライブから起動した時点で何も操作できなくなり電源ボタン長押し(これはOSサポートと関係なくPC/AT的な挙動で通る)するしかなくなる状態だった
Chrome OS Flexのベースバージョンも今年の半ばにはLinux 5.10まで上がっている*7ので、おそらくBluetooth・カメラを除けば12インチ用MacBookの安定稼働環境として実用的な状態になっているのではないだろうか
[*8] 厳密には出荷時期の古いChromebookでは最新ChromeOSユーザーランドに古いkernelを組み合わせて動作し続けるケースがあるので正確ではない
ChromeOSはすごい
特にArmベースでWidevineのきちんとしたプロファイルが通って各種動画ストリーミングサービスを問題なく視聴できる環境としてはArmbian系よりもChromeOS系のほうが苦労せずに済むという点から考えてもなかなか強い環境である(あるいは用途を絞り込んでSTB向けAndroidを動かす、という二択)
今後もLinux kernelへ各種コミュニティ開発ドライバが取り込まれていくと 最終的にChromeOS Flexがビンテージ/クラシックPC用の最も手軽でアップデートを受け続けられる環境になる可能性がある
まとめ
Appleが1kg未満のMacを新規発売するのと手元12インチMacBookが全台朽ち果てるのとどちらが早いか、来年もご期待ください