USキーボード初挑戦めも(Keychron V10)

USキーボード初挑戦めも(Keychron V10)

USキーボードを導入したので、闘い(?)の記録を残します。

モチベーション

  • Vimユーザーなので [ ] が左右に並ぶ配列が打ちやすそうに見えてた
  • 安価なPCやミニPCがUS配列のモデルが増えてきた結果、「欲しいけどJIS配列じゃないから買えない」なんてパターンに遭遇することが増えた
  • キーボード購入時の選択肢を広げたい
  • なんだかかっこいい

キーボード選び

以下条件にマッチするものを探します。

  • F1~F12キーがある
  • テンキーレス
  • キーストロークが深い
  • キーマップが変更できる
  • 他のキーボードが使えなくなるようなクセがないレイアウト

買った

Keychron V10 を購入しました。

Keychron V10 (Alice Layout) QMK Custom Mechanical Keyboardwww.keychron.com

Alice Layout が特徴的なキーボードですが、タイピングに関して特殊な癖はないので左右に距離があっても困らない…はずです。

Keychronは日本向け(.jp)とグローバル(.com)のサイトがあるのですが、購入時により安価だった.jpで購入しました。

購入時価格は送料無料の 16,224円 でした。

つなげて終わり、じゃないんだよ

いろいろな理由から、JIS配列のキーボードとして認識&入力されるようにします。

  • OSのキーボード設定がJIS配列
  • やんごとない理由で OSの設定が変更できないPCあり
  • JIS配列のノートPCを使うこともあるため、OSの設定をUS配列にできない

Kiriで頑張ってみる(※断念しました)

以前↓作成したキーマップ入れ替え用のRaspberry Piに手を入れて、キーマッピングしてみます。

aose.hatenablog.jp

KiriはRaspberry PiをPCをキーボードの間に挟み込むように接続することで、キーをリマップできます。

リマップ用にコードを修正している途中で気づいたのですが、kiriだと問題が発生しました。

  • キーボード以外のデバイスとして認識させる必要のあるデバイスが使えない
  • Shiftキーありで押下するけど、リマップ先ではShiftのいらないキー押下にしたいやつは対応してない
    • @ はUS配列では Shift+2 だけどJIS配列では @ キーのみ
    • 自分でコードを直せばいいんだろうけど面倒

QMK Firmwareを焼き直してみる

Keychron V10は、QMK Firmwareによるファームウェア改造が可能です。

他のキーボードで今回やりたいことを作ってる方がいたので、Keychron V10のファームウェアを焼き直して改造してみます。

https://github.com/eswai/qmk_firmware/blob/master/keyboards/eswai/anhedral67/keymaps/srlby2/twpair_on_jis.c

ファームウェア修正

まずは手元で標準のファームウェアコンパイルして焼いてみて、正常に動作することを確認します。

参考: https://docs.qmk.fm/#/newbs_getting_started

sudo apt install python3-pip
python3 -m pip install --user qmk
echo 'PATH="$HOME/.local/bin:$PATH"' >> $HOME/.bashrc && source $HOME/.bashrc
git clone https://github.com/qmk/qmk_firmware.git
cd qmk_firmware
qmk compile -kb keyboards/keychron/v10/ansi_encoder -km via

Keychronのファームウェア更新手順をもとに、作成したファームウェアをQMK Toolboxで焼きます。 https://www.keychron.com/blogs/archived/how-to-factory-reset-or-flash-your-qmk-via-enabled-keychron-v10-keyboard

手元の環境でコンパイルしたファームウェアでも正常に動作することが確認できたので、早速修正してきます。

一度素のファームウェアを消して。。。

make clean

修正してコンパイルします

cd ./keyboards/keychron/v10/ansi_encoder/keymaps/via
wget 'https://raw.githubusercontent.com/eswai/qmk_firmware/master/keyboards/eswai/anhedral67/keymaps/srlby2/twpair_on_jis.h'
wget 'https://raw.githubusercontent.com/eswai/qmk_firmware/master/keyboards/eswai/anhedral67/keymaps/srlby2/twpair_on_jis.c'

keymap.c を修正

git diff keymap.c
diff --git a/keyboards/keychron/v10/ansi_encoder/keymaps/via/keymap.c b/keyboards/keychron/v10/ansi_encoder/keymaps/via/keymap.c
index 939edd9548..83b791fad1 100644
--- a/keyboards/keychron/v10/ansi_encoder/keymaps/via/keymap.c
+++ b/keyboards/keychron/v10/ansi_encoder/keymaps/via/keymap.c
@@ -15,6 +15,7 @@
  */

 #include QMK_KEYBOARD_H
+#include "twpair_on_jis.h"

 // clang-format off

@@ -70,3 +71,7 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
     [WIN_FN]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }
 };
 #endif // ENCODER_MAP_ENABLE
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    return twpair_on_jis(keycode, record);
+}

rules.mk を修正

git diff rules.mk
diff --git a/keyboards/keychron/v10/ansi_encoder/keymaps/via/rules.mk b/keyboards/keychron/v10/ansi_encoder/keymaps/via/rules.mk
index f1adcab005..2e4c158240 100644
--- a/keyboards/keychron/v10/ansi_encoder/keymaps/via/rules.mk
+++ b/keyboards/keychron/v10/ansi_encoder/keymaps/via/rules.mk
@@ -1,2 +1,3 @@
 VIA_ENABLE = yes
 ENCODER_MAP_ENABLE = yes
+SRC +=  twpair_on_jis.c

コンパイル

qmk compile -kb keychron/v10/ansi_encoder -km via

できた!

Shift + 2 キーを入力すると、PCではUS配列の表記どおり @ が入力されました!

VIAによるキーリマップ

QMK Firmwareなので、最低限のキーリマップを設定します。

あんまりカスタマイズすると、普通の英語キーボードがつかえなくなるので最低限です。

  • CapsLock -> LCtrl
  • LCtrl -> RCtrl
  • RAlt -> LWin

IMEのオン・オフ設定

最初 Shift + Space を設定しましたが、IMEオンのときに半角スペースを入力するときに使用するキーです。

一気にタイプミスが増えてしまったので、現在は Ctrl + Space に変更しました。

感想

Alice Layout 自体は自然に使うことができました。

あとはUS配列の狭いEnterキーと記号の位置さえ慣れれば…といったところです。

これは時間が解決してくれるでしょう。たぶん。