【前編・未完成稿】Surface Pro X (ARM64 Snapdragon 8cx Gen2) カスタムカーネルによるLinux導入実践記
はじめに
周知の通り、ARM64プラットフォームのコンピューターでOSを動作させると、互換性の問題に多く直面します。マイクロソフトの長年の努力により、ARMアーキテクチャのWindowsはますます使いやすくなり、x86_64アプリケーションのエミュレーションもスムーズに行え、パフォーマンスの低下も比較的少なく、さらに長時間のバッテリー駆動が可能になりました。例えば、Surface Pro XはARMプログラムのみを実行している場合、画面点灯状態で驚異の6~7時間ものバッテリー持続時間を実現します。一方、バッテリー容量が約20%大きいSurface Pro 9 Intel版は、省電力モードをオフにすると3.5時間程度、あるいはそれ以下しか持ちません。また、Pro XはPro 9より丸3年早く発売されたにもかかわらず、日常使用におけるパフォーマンスは遜色なく、むしろ高負荷時にはPro 9のファンが激しく回転し、システムがカクつき、パフォーマンスの開放具合では2020年発売のSurface Pro X 第2世代にも及ばないことさえあります。このように、ARMチップ上でPC用OSを動作させることの可能性は、ポータブルデバイスにおいてますます大きくなっています。
しかし、現時点で市場に出回っているLinuxディストリビューションのうち、Snapdragonチップ、特に8cx Gen1およびGen2に正式対応しているものは一つもありません。 私も最初はディストリビューションから攻めようと、7~8種類のディストリビューションを起動しようと試みましたが、全て失敗しました。ありとあらゆる資料(英語やその他の言語の資料も含む)を調べましたが、Surfaceやその他の8cxデバイス向けのインストールチュートリアルを作成した人は誰もいないことがわかりました。これが私の実践に大きな困難をもたらしました。
では、Windowsがこれほど快適に動作するARMマシンがあるのに、なぜわざわざLinuxを動かそうとするのでしょうか?
これには、あの忌々しい微信(WeChat)が関係しています。微信はWindows on ARM64版を提供していません。先ほど述べたバッテリー持続時間の良さは、実行する全てのソフトウェアがARM64に対応していることが前提です。x86-64のソフトウェアがいくつか同時に動くと、バッテリー持続時間は約4時間に戻り、1~2時間も短くなってしまいます。それでは割に合いません。そこで、このマシンにLinuxをインストールしようと考えたのです。
困難な道のり
理由
まず、ARMデバイスでOSを動作させること自体は難しくありません。BIOSが通常のPCと同様にシンプルで、チップが対応しており、OSのカーネルがそのマシンの主要なドライバーに対応していれば、基本的にARM64 PCは動作します。一般的なLinuxカーネルは、よく使われるオープンソースドライバーのほとんどを統合しているため、通常のPCにLinuxをインストールする際、ドライバーインストールという面倒なプロセスを経る必要はなく、ライブ環境で起動し、インストールをクリックし、インストーラーのプログレスバーが完了するのを待つだけで、すぐに使い始められます。 しかし、相手はSurfaceです。 Surfaceはそもそも通常のPCとは異なり、タッチスクリーン、キーボード、スピーカーなど、市販されている一般的なプラグアンドプレイ製品ではありません。これらのドライバーを入手するのは困難です。さらに、Snapdragon 8cx Gen2というチップ自体が、ほとんど全てのLinuxディストリビューションと互換性がありません。そして、このマシンのチップはオリジナルの8cx Gen2ではなく、マイクロソフトによって改造され、Microsoft SQ2と名付けられたものです。そのため、我々はエキスパートが対応してくれるのを待つしかありません。
経過
1日目、無知な私はディストリビューションから始めようとしました。Ubuntu、Debian、CentOS、deepinと試しました。その中で、Debian 13の非フリー版がシステムインストール画面まで起動しましたが、USB、Surfaceのキーボード、タッチスクリーンが全く使えませんでした。ここで、汎用カーネルではSurfaceのようなハードウェアに正常にインストールできないことを理解し始めました。
2日目、私はlinux-surfaceプロジェクトに頼ることにしました。 しかし、このプロジェクトには誤解を招く点がありました。トップページの対応デバイス一覧にSurface Pro Xのサポートが明記されていなかった(対応デバイスは全てx86チップのマシンと記載されていた)ため、当初はこのプロジェクトを考慮せず、Snapdragon 8cxチップで起動可能なLinuxシステムだけを探し求めていました。プロジェクトのホームページに戻ると、オンラインページの片隅に非常に目立たないプロジェクトがありました:aarch64-arch-mkimg。これは起動可能なイメージ(Arch Linux ARM)であり、ライブ環境のみを起動できるUSBブートイメージに相当することがわかりました。驚いたことに、これをUSBメモリに書き込んで起動すると、画面表示は正常、USBも正常、SurfaceキーボードとWi-Fiも正常に動作しました。このイメージがあれば、直接ハードディスクにLinuxをインストールすることはできなくても、少なくとも必要なカーネルプログラムは入手できます。
私の考えは、AIの指示に従って、ディスクのパーティショニングとインストールのプロセスを一歩ずつ進めることでした。しかし、画面に表示される文字はアリのように小さく、非常に見づらく、午前中ずっと操作した後、視力がかなり良くなったように感じました…しかし、成功はしませんでした。システムはLinuxに正常にブートしませんでした。
そこで私は誤った決断を下しました。起動画面まで到達できたDebianを調査することにしたのです。詳細は省きますが、さらに数時間を無駄にしました…
万事休すかと思われたその時、突然あることに気づきました。Wi-Fiに正常に接続できるのなら、なぜエージェントを使ってSSHで自分のコンピューターに接続し、AIに操作させないのか?
早速実行に移しました。パソコンでMimo Codeを使ってSurfaceに接続し、作業を開始しました(実はSSH接続も重労働で、失敗するたびにライブ環境への再起動、Wi-Fi接続、rootへの切り替え、SSHの有効化を繰り返さなければならず、目と頭と指にとってはまさに拷問でした)。7~8回の再起動とエラーを繰り返し、午後1時から4時までぶっ通しで作業しました。
しかし、私はただのバカだったと気づきました。 ログインするのが面倒だったので、ずっとXiaomiの無料ベースモデルを使っていました。こんなことは小さなモデルでも簡単にできると思っていたのです。しかし、転機は午後4時5時、AIの使用ピーク時に訪れました。無料モデルは非常に重くなり、ついにMimoにログインして、再度設定を依頼しました。最後にAIに指示を入力した時、それが成功しました。システムがLinuxのコマンドラインインターフェースまで起動したのです!まだスカスカの状態でしたが、これは大きな一歩でした。
信じられないかもしれませんが、私は一発撮りの動画も保存しています。Proモデルに切り替えたら、最初の一回で成功したのです。この二日間、私は一体何をしていたのでしょう?完全に自分を苦しめていただけじゃないですか?!
3日目、スカスカの状態に装飾を施し始めました。装飾は本当に面倒でしたが、AIの助けがなければ、まるまる1~2週間はかかっていたでしょう。難点は、まず、このシステムはドライバーが不完全で、Wi-Fiに接続できず、SSHも直接できません。そして何より奇妙なのは、アカウントとパスワードがなかったことです。そこでまずログイン問題を解決し(こんな小さなこともAIで解決できます)、次に難関であるネットワーク接続に取り組みました。有線LANを挿しても無効でした。ここで、以前USBブート用として使っていたUSBメモリをフォーマットし、AIに、以前ダウンロードした有用なカーネルを含むイメージを基に、スクリプトを作成させ、ネットワークツールをインストールさせ、opensshをインストールさせ、IPアドレスを自動表示させるようにしました。このステップにも忍耐が必要で、エラーに正面から向き合う必要がありました。後日、要点をまとめて公開します。
次のステップは、再びSSH接続です。タイムラインは再び午後に。しかし、少なくともこれで難点は全て解決しました。私たちは手を休め、MimoCodeにGNOME(好みでKDEも選択可。ただし、私はNyarcherを適用したかった。Arch Linuxにあのアニメ風の雰囲気を吹き込むパッチです)や、微信やQQのLinux ARM64版などの一般的なソフトウェアをインストールしてもらいました。(もちろん、この時点ではWi-FiやBluetoothのドライバーが落ちることがあるので、対処が必要かもしれません)そして、この3日間で最もリラックスした時間が訪れました:お茶を飲む時間です。いや、それはあなたたちの話で、私はまだ学科一の動画を勉強しなければならず、PCはそのまま放置されていました。(ああ、大学入試が終わってからもう一ヶ月が経った気がするけど、毎日仕事をしているようで、全く休暇を取っていない!)
これで、SurfaceへのLinuxインストールは一段落です。 画像付きの詳細なチュートリアルは、次回をお待ちください!