hhkb Pro JP Type-S + Alternative ControllerでBluetooth接続
create: 2019-6-18
Windows10 HHKB

有名な Alternative Controller for HHKBのススメ 記事をもとに、Alternative Controller(以下、AltCon)導入とJISキーでBluetooth接続するためにやったこと。
ローマ字打ちだけど日本語(JIS)配列キーボードでがんばる。

hhkb Pro JP Type-S

購入したのはこちら。hhkbのラインナップ中、JIS + 静音キー の組み合わせはこれのみ。


Alternative ControllerでBluetooth化

前述の Alternative Controller for HHKBのススメ を参考に、AltCon を購入しました。
あとは互換性のあるLiPoバッテリーが必要なのですが、本家サイトでは海外からの購入ログばかり。

たぶん電圧とピンが同じなら大丈夫だろうと判断して、千石通商のせんごくネット通販で購入。
EEHD-4YZN リチウムイオンポリマー電池 3.7V 1000mAh DTP603450(PHR)
単価1,575円 + 送料648円で、2,223円でした。
送料648円は高いかな~と思ったけど、往復の電車賃やお店と商品を探し出す手間を考えたらむしろ安いかなと思います。ネットバンザイ。

Altenerative Controllerのインストール

hhkb Pro JP にはUSBハブとしての機能はないので、AltConをインストールするための穴がありません。
加工が必要ですが、LEDとBluetoothのスイッチが外から見えるように穴を空けるだけです。
ラジコン工具のハンドリーマーで位置取りをして、電動ドリルで簡単に加工できました。

LiPoバッテリは小さめのものを選んだのでケース内でも余裕がありました。
どうせ見えないのできれいに加工しようとはせず、ガムテープでくっつけました。

Bluethooth接続を試す。

AltCon 本家のスレッドにある通り、搭載しているBluetoothチップ RN42 の制約上、変換無変換 などのキーコードが 0x65 以上のものは送信されません。
JISキーでいうと、\_ のキーも無反応になります。

USキーとしてOSに認識させる

そのままではBluetooth接続したところでまともに使えないので、キーマップを書き換えます。
AltConでキーマップを書き換えられますが、 0x65 以上のキーは結局送信できないので、そもそもの仕組みを変える必要があります。

USキーの範囲では問題ないので、OS側にUSキーとして認識させることでキーマップの解決を図ります。

WindowsならULE4JIS というソフトを常駐させることで、JISキーをUSキーとして変換してくれます。
レジストリ書き換えとかしないので便利。

キーマップを書き換える

これでキーボードとして使えるようになりましたが、使えないキーは残ったままだし、US配列なので @^ など、いろんなキーの打ち方がJIS配列とは異なります。
使い慣れたJISキーとして使えるようにキーマップを書き換えます。

  • 「全角/半角」キーは Alt + ` `` にする
  • 「変換」「無変換」は諦める
  • @Shift + 2 のように、US打ちをJISキーに割り当てる
  • hhkbレイヤには、ついでにBash移動キーを登録

後日、キーマップの設定で変換・無変換を使えるようにしました。
HHKB(JP) + Alternative ControllerでMacでいう英数/かなキーを実現する

RDPの不具合

ここまでやればローカルマシン接続の場合は問題なく動きます。
しかし、Windowsの Remote Desktop Protoco(以下RDP) を用いてリモートデスクトップ接続すると、Shift キーや Alt キーの組み合わせで送信しているキーが正しく送られないことがあります。

ちゃんと調べていませんが、どうやらネットワーク回線が低速なときに発生するような。

@Shift + 2 の組み合わせですが、 同時送信の定義済みコマンドではなくマクロで Shift2 のキーコードの送信タイミングをずらしてやると発生頻度は減りました。
発生頻度を見ていると、ずらしを大きくすればよいというものでもなさそうです。
またキーにマクロを登録してしまうと、キー押しっぱなしによる連続入力ができなくなります。
しばらく使っていますが、連続入力できなくても全然困ったことはありません。

2019/06/18追記
MACROでもキー連打できる方法がありました。 event.pressed でkeydown、else でkeyupをコールすればいいみたいです。
キーインターバルには20msを設定しています。

// インターバル wait 20ms
#define WMS 20 

~中略~

case MACRO_Z_H: // 「半角・全角」は 「Alt + `」、ただしRDPでの不発率が高い
    return (record->event.pressed
        ? MACRO( I(WMS), D(LALT), D(GRAVE), END ) 
        : MACRO( I(WMS), U(GRAVE), U(LALT), END )
    );

2019/9/11 追記:
HHKB(JP) + Alternative ControllerでMacでいう英数/かなキーを実現する でキーバインドを変更しました。

完成!!

AltCon のインストール、キーマップの書き換え、キーマクロの登録と手間はかかりましたがこれでだいぶ快適な入力環境ができました。
LiPoバッテリは1000mAhの小容量のものを選びましたが、AltCon では 850mAhで12時間との情報もあり、1日使っていても問題ないです。

充電機能、バッテリ切れでもUSB接続できるのはhhkbのBluetooth版にはない機能です。
というか、充電機能はともかくUSB接続できないので本家BT版はやめました。Type-Sもないし。

いろいろ手間はかかりますが、キーボードの「このキーはここがいいのに」「こんな事ができたらいいのに」がほぼできるので大満足です!!

メモ: Bluetooth接続の仕方

https://geekhack.org/index.php?topic=71517.0 より

How to connect
Try following steps when you are in trouble.

1. Turn on blueooth on keyboard by slide switch on controller.
2. Turn on blueooth on your computer, and remove/disconnect keyboard if it is already paired/connected.
3. Press Left Shift, Right Shift and P on keyboard to remove pairing infos. You should see red BT LED blinking at this time and it indicates that your keyboard is discoverable from computer now.
4. Add keyboard on computer. These may help:

右Shift + 左Shift + P でリセットな。
すぐ忘れるからキーボードの裏にでも書いておこうかな。