本文へスキップ
aBER

手元にあるこの Q20(SQC100-2、システム 10.3.3.3216)は、高校1、2年生の頃に購入し、メイン端末として半年以上使用していました。

2022年にBlackBerryが開発者サイトと署名サービスを終了し、BB10のストアはそれより早くなくなりました。新しいアプリをインストールできなくなり、当時インストールした、かろうじて利便性を高めてくれた旧バージョンのAndroidアプリ(電子書籍リーダーなど)と、システムにプリインストールされていたあまり役に立たない数個のアプリしか残っていませんでした。

AIの助けを借りて、今ではネイティブアプリやAndroidアプリをいくつか作成でき、物理キーボードを備えたこの古い端末でもっと遊ぶ楽しみが生まれました。しかし、ネイティブアプリにはBlackBerryの公式署名証明書が必要ですが、現在は入手できません。そうなると、ルート化のためにROMをフラッシュするという道しか残されていません。

コミュニティの方法は、公式のautoloaderを分解して修正し、再度フラッシュするというものです。root権限を追加し、ツールをプリインストールし、セットアップウィザードを削除し、一度で完了させます。この記事では、私がそれをフラッシュした過程と、何度か失敗した原因について記録します。最後の段落では、フラッシュ後についでに修正したTerm49ターミナルについて書きます。

ROMフラッシュを始める前に

準備する必要があるのは、Q20に対応する10.3.3.3216のMODパッケージ、コミュニティが移植したbb10mt(私はmacOS ARM64版を使用)、そしてそれに対応するbb10mt.iniとloaders.datです。

MODパッケージは2つのイメージに分解されます。

イメージ 内容 サイズ
.0.unsigned システム(root権限とプリインストールツールを含む) 約2.5 GB
.1.signed ベースバンド 約54 MB

両方ともフラッシュする必要があり、先にシステム、次にベースバンドの順です。

ROMフラッシュを開始

フラッシュコマンドを実行すると、ツールは端末の電源が入りBootROMウィンドウが開く数秒間を待機する必要があります。ケーブルを早く接続しすぎると、そのタイミングを逃してしまいます。

Windowsでもフラッシュ可能です。パッケージをautoloader(システム2.6 GB、ベースバンド64 MBの2つのexe)に変換し、BlackBerry Linkに付属のUSBドライバをインストールした後、ダブルクリックするだけです。

コンピュータを端末に接続した後、システムイメージをフラッシュします。手順は、まずコマンドを実行 → 電源オフ → ケーブル接続 → パスワード入力です。

Terminal window
./bb10mt_aarch64_darwin flash -r loaders \
-i ../Q30_Z30-Classic-Leap_10.3.3.3216-MOD.0.unsigned

プログレスバーにMaking QCFM stream、ブロック数、パーセンテージが表示されれば、書き込みが開始された合図です。途中でケーブルを抜いたり、ボタンを押したりしないでください。書き込みが完了すると、ツールによって端末が自動的に再起動します。

最後にLIBUSB_ERROR_OTHERというメッセージが表示されることがありますが、これは端末の再起動によってUSB接続が切れたためであり、失敗ではありません。

システムのフラッシュが完了したら、ベースバンドをフラッシュします。所要時間は1~3分です。

起動時にセットアップウィザードが表示されず、直接ホーム画面に入れば、フラッシュは成功です。ホーム画面にはプリインストールされたTerm49があり、通知バーにもroot権限の表示が現れます。

起動時になおウィザードが表示される場合は、フラッシュが成功していません。前の手順をもう一度やり直してください。

セットアップウィザードのWi-Fiページでフリーズする場合

純正ファームウェアをフラッシュした場合や、パッケージが正しくフラッシュされなかった場合、起動時にセットアップウィザードで停止し、しかもWi-Fiのページでフリーズします。「次へ」も「スキップ」も表示されないのです。これはBlackBerryのサーバーが終了したため、接続できなければ先に進められないからです。

回避策は、まずWi-Fiに接続し、「ホットスポットログイン(Hotspot Login)」のページまで進みます。そして、BlackBerryのロゴ画像を長押ししながら、通話終了キー(End call)を押します。すると、画面が直接ホーム画面に戻ります。

注意すべきは、BlackBerryのロゴ画像であって、BlackBerryキーではない点です。私はここでかなり時間を費やしましたが、BlackBerryキーだと勘違いしていました。

この方法はウィザードをスキップするだけで、端末を再起動すると再びウィザードが実行されます。

Term49ターミナルの改造

fastfetch ssh + herdr

Term49はROMパッケージにプリインストールされているターミナルです。私はまずTerm49C(Term49をベースにショートカットキーとタッチパッドサポートを追加したフォーク)に置き換えました。これはSDL 1.2 + QNX Screenのネイティブアプリで、キーボードからのイベントしか受け取れず、システムの中国語入力(IME)が使えません。また、1つのウィンドウで1つのセッションしか開けません。

書き直されたTerm49Xも同じSDL 1.2 + QNX Screenの構成ですが、Term49Cのソースコードにいくつかの要素を追加しました。マルチセッションのタブと切り替え機能、内蔵された小鶴双拼と全ピン、スクロールバック検索、そしてNerdフォントのアイコンです。

システムの入力法を使う方法も試しましたが、インターフェースが独自のもので、リバースエンジニアリングで再現しようとしたバージョンでは入力法からコールバックが一切返ってきませんでした。最終的には自分で入力バーを作成し、ソフトウェア内に入力法を組み込むことになりました。

中国語に関しては、シェルにも落とし穴があります。QNXにはUTF-8のロケールデータがなく、BerryCoreに付属しているzsh 5.0.2はコンパイル時にマルチバイト対応が有効になっていませんでした。そのため、プロンプトの後ろで中国語を入力すると、四角いブロックの羅列になってしまいます。その後、zsh 5.9をクロスコンパイルし、QNXに欠けているwcwidth/iswprintを補完して、ようやく正常な入力とバックスペース操作が可能になりました。

必要であれば、Term49Xリポジトリの詳細をご参照ください。

参考