アリエクの Keyball61 (RP2040) を vial-qmk でカスタムした話
はじめに
仕事でぶんぶんマウスを振り回していたら腱鞘炎になったので、トラックボールにしようと思いアリエクで Keyball61 を買った。
届いたキーボードのファームウェアはよくわからなかったんだけど、PC に繋いだら Vial で認識した ![]()
調べてみると、いわゆる「普通の Keyball61」は ZMK らしい。手元のは 最初からカスタムファームが入ってるっぽい。
だいたい一週間使ってみて、気になったのがこれ。
- マウス用レイヤーを自分でキー割り当てして切り替えてるんだけど、切り替えがめんどい
- トラックボールで スクロールできない
なので、こうしたいなと思った。
- トラックボールを動かしたら、勝手にマウス用レイヤーに入ってほしい(調べたら Auto Mouse って仕組みがあるらしい)
- マウスボタンにしてる HJKL; 以外を押したら、普通のレイヤーに戻ってほしい
- レイヤー1のあいだトラックボールを動かすとスクロールしてほしい
- (ついでに)レイヤーごとに LED の色も変えたい
このへんは Vial の画面いじるだけじゃ無理で、ファームウェア側をいじる必要があった。
ファームを自分で作ってみることにした
vial-qmk を見ても keyball 用の設定は入ってない。公式は ZMK だった。
手元の構成そのまんま使える完成品ファームは見つからなかった。
ChatGPT に聞いたら「vial-qmk ベースでカスタムできるよ」とのことだったので、AI に指示出しながら進めることにした。
とりあえずこの2つを clone して、Cursor で作業開始。
最初は Pro Micro だと思っていた
Keyball61 のマイコンは普通は Pro Micro らしい。
AI もその前提でガリガリ進めてくれて、ファームのビルドも通って .hex までできた。
で、キーボードにフラッシュしようとしたら……qmk flash がデバイスを検出できず、延々と進まない。
おかしいなと思って RESET を2回押してみたら、ストレージに RPI-RP2 が出てきた。
中の INFO_UF2.TXT を開くとこう書いてある。
UF2 Bootloader v3.0
Model: Raspberry Pi RP2
Board-ID: RPI-RP2
……あれ? Pro Micro じゃなくて Raspberry Pi RP2(RP2040) じゃん。
最初に気づいておけばよかったやつ。
AVR 前提の .hex と qmk flash じゃ、そもそも土俵が違った。
RP2040 向けに作り直したら、壊れた(ように見えた)
半ば諦めかけてたけど、AI に聞いたら「RP2040 向けにも組めるよ」とのこと。
一通りビルドしてフラッシュしたら……キーが反応しない。USB も認識しない。 いろいろ壊れた。
壊したかと思った。
しかも 元のファームウェアを持ってなかったので、かなり焦った ![]()
左右を別々に焼いたり色々試したけど、ダメ。
そこで holykeebs のコンパイル済みファーム を書き込んでみたら、ちゃんと動いた。ハードは生きてた。めちゃくちゃ安心した
で、AI 曰く原因はだいたいこんな感じだったらしい。
- Keyball の duplex matrix が、今の QMK / vial-qmk の API(
matrix_scan_customとか)や RP2040 の split と合ってない - ボード定義やブートローダー設定が AVR(Pro Micro)前提のまま混ざってる
- トラックボール用センサ周りのシンボル不足
holykeebs みたいに、すでに RP2040 向けに直してある実装を参考にしつつ直していくと、なんとかキー入力とトラックボールが動くところまで戻った。
フラッシュは毎回これ。
-
RESET を素早く2回 →
RPI-RP2が出る .uf2をコピー- 左右それぞれ同じ UF2 を焼く
TRRS ケーブルを毎回抜き差しする必要があるので、非常にめんどくさい。
Vial でも認識した ![]()
完成したもの
いま使ってるファームの挙動は、だいたいこんな感じ。
レイヤー構成
| レイヤー | 用途 |
|---|---|
| 0 | 通常入力 |
| 1 |
LT(1, …) で出すレイヤー。長押し中はトラックボールがスクロール |
| 2 |
LT(2, …) のユーティリティ |
| 3 | Auto Mouse 用(トラックボール操作で自動オン) |
以前みたいに「マウス用レイヤーに手動で切り替えるキー」は、Auto Mouse のおかげで 不要になった ![]()
トラックボール / Auto Mouse
- トラックボールを動かすと、自動でマウス用レイヤー(レイヤー3)に入る
- そのあいだ、右手ホームの H / J / K / L / ; はマウスボタン
- それ以外のキーを押すと、通常レイヤーに戻る
- しばらく何もしないと、一定時間後に自動で戻る(自分の設定では 2 秒)
HJKL; を「常に」マウスキー扱いすると、普通に文字打つときまでマウスモードに入っちゃう。
なので マウスモード中だけ特別扱いしてる。
あと、レイヤー1やレイヤー2を出してるあいだは Auto Mouse を止めてる。
LT1 長押し中にボール動かすと、スクロールじゃなくてまたマウスレイヤーが乗っちゃう、みたいな競合を避けるため。
スクロール
- レイヤー1(LT1 長押し)中にトラックボールを動かすとスクロール
- あとから、
,を押しっぱなしでもスクロールできるようにした(マウスモードに入る前から押せる) -
,を短く叩いたときは、普通に,が入る
実際にスクロールしてみたら、動きがかなりピーキーだった。
軽く動かした程度じゃ反応しないのに、一定を超えるとめちゃくちゃスクロールする始末 ![]()
このあたりはしきい値や速度をいじって、なんとか使えるレベルにはなった。
レイヤー別 LED
ついでに入れたつもりが、これがかなり便利。
| レイヤー | LED |
|---|---|
| 0 | 流れる虹 |
| 1 | 赤(スクロール) |
| 2 | 青 |
| 3 | シアン(マウスモード) |
マウスモードに入った/抜けたのが色でわかるので、「今マウスレイヤーにいるのかな?」が一目でわかる。
おまけのつもりが、いちばん気持ちいい変更かもしれない ![]()
PC スリープ時は消灯するようにしてる。
仕上げでハマった話(スイッチのせいじゃなかった)
動くようになってからも、入力まわりで変な挙動が残ってた。
チャタリングっぽい何か
「U と I がチャタる」ように見えた。
最初はスイッチ不良かと思って交換したんだけど、直らない。よく見ると:
- U / I を単体で押す分には大丈夫
- O → I や U → O、P → I のときにおかしい
- O → Y や O → P では起きない
- キーとキーのあいだに一拍置くと起きない
Keyball61 のマトリクスは duplex で、同じ行を二方向にスキャンしてピンを使い回してるらしい。
ざっくり言うと、O と Y は同じ物理ピンの別フェーズ、O と I は別ピンの別フェーズ、みたいな配置。
再現パターンを並べると、別ピン × 別フェーズをまたぐロールのときだけ壊れてる。
スイッチじゃなくて、スキャン方向を切り替える瞬間の過渡状態による誤検出だった、とのこと。
対策は フェーズ切替の前にピンを戻して、短い settle を入れること。
これでかなり改善した ![]()
out と打つと otu になる
settle を入れたあと、今度は素早く out と打つと otu になることがあった。
これはデバウンスを「押しても離しても、安定するまで待ってから確定」にしてたせいで、O→U のあとに U の確定が遅れ、そのあいだに T が入ってた、という話だった。
最終的にはこう変えた。
- 押した瞬間はすぐ反応
- 離すときは安定を待つ
duplex 側の settle はそのまま残してるので、誤入力対策と入力順の両立が取れた。
いまの操作感(まとめ)
| やりたいこと | いまの動き |
|---|---|
| マウス操作 | ボールを動かすだけでマウスレイヤーへ |
| クリック類 | マウスレイヤー中の HJKL; |
| マウス解除 | HJKL; 以外のキー、またはタイムアウト |
| スクロール | レイヤー1長押し、または , 押しっぱなし |
| 今どのモードか | LED の色でわかる |
おわりに
アリエク版 Keyball61(RP2040 + 謎 Vial ファーム)から始めて、vial-qmk 上に自分用ファームを載せるところまで行った。
最初は Pro Micro だと思って空振りして、次は RP2040 向けファームで無反応になって本気で焦った。
でも元ファームが無くても、ブートローダー(RESET 2回 → RPI-RP2)に入れて UF2 を流し直せば立て直せる、というのは後からわかった。RP2040 でよかった……。
AI 使うと、知識ゼロからでもカスタムファームまで持っていけるのでかなり便利。
同じ構成でファームいじる人の、とっかかりになればうれしいです ![]()
参考
- 今回作ったカスタムファームのリポジトリ
https://github.com/shatee/vial-qmk/tree/keyball61-rp2040