自作キーボード ErgoDashをKINESISっぽくプログラムしてみる
【目次】
在宅勤務が増えてきました・・・・
始まった頃は、たまに在宅勤務くらいの勢いかと思っていたのですが、気づけばなんだか9割以上在宅に。。。
普段オフィスではKINESISキーボードを使っていたのですが、自宅用にはもちろんありません。なので、会社から持って帰ってきても良いのですが、また、会社に持っていくのも面倒なあのデカさ。
じゃあ、自宅にももう1つKINESISを買うかというとそれもいまいち能がないし、そもそも値段が高すぎるw。
そんなときにふと思い出したのが、自作キーボード。なんだかギーク界隈では最近、はやっていると聞く。

自作キーボードマニアの知人に声かけたら1つ、使っていないのがあるから貸してあげるよ、とのこと!
ErgoDashくん、こんにちは
ちなみに自作キーボードにもいろいろあるようなのですが、今回借りたのはこちらの、ErgoDashというモデル。

格好えええ。しかし、本体だけで13,000円。そしてキー部分とスイッチが別売りなのでそれも買うと2万円は超えるという・・・まずはその前にお試しできてよかった。
ちなみに市販品でこれに近いのはErgoDox。これも人気で会社で使ってるのを見たことがありました。最初はこれにしようかとも思ったのですが中古でも3万円くらいするんですよね。。

KINESISと大きさの違い

結局会社から持って帰ってきました。
ファンクションキー類が無いとは言え、縦も横も2倍位違いますね(苦笑)これで、同じ効果が出せるのなら超ありです。
キーマップ変更にトライ
KINESIS(US)を目指す
というわけで、普通に使いたいならUSBでつなぐだけなのですが、折角なので元のキーマップが持ち主によって書き換えられていたので、自分好みに変更します。
普段がUS配列のKINESISを使っているので、できるだけそれに近い状態を目指してみました。

Firmwareの書き換えかた
プログラマーではない人向けのQMK Firmware入門 – Qiita :
↑例に挙がっているキーボードの種類は違いますが、手順のみを参考にしました。
途中で、qmk_firmware_master.zipを解凍するところで2万ファイルとか表示されて、「まじか!?アーカイブがぶっ壊れてるのか?」と焦りましたが、世界中(?)keymapが入ってるらしく、これで正しかったという。

あとは手順通りに進めていきましたが、最後のところで、エラーが出ました。

うーん、なんだろう・・・LUFAというのが悪いっぽいので調べてみると対処しているケースを発見。
【DZ60】ファームウェアをmakeできない – 蟹好きのメモ :
LUFAをGithubからzipでダウンロードすれば良いらしい。
ダウンロードして解凍し、所定のフォルダにコピーするだけで難なく通りました。
オリジナルのキーマップを作成する

リビジョンが1.1と書かれていたので、rev1のergodashのキーマップが保存されているところから、オリジナルのファイルを、新しくフォルダ(xbeeing)を作成して、そこへコピーします。
$ cp -R keyboards/ergodash/rev1/keymaps/default/ keyboards/ergodash/rev1/keymaps/xbeeing
コピーしたファイルを元に、ビシバシ自分好みに改造していきます。
当然、KINESISとはキー配置が異なる部分が多いのですが、上部の消しゴムみたいなファンクションキー類はあまり使っていないので、ファンクションキー類は、Raise(都合FN)キーを押したら使えるデフォルト設定を利用し、その中でも、仕事でよく使うプリントスクリーンとESCは、Raiseキーを押さずに使えるところへ配置しました。
完成したら、まずはテストでコンパイル。エラーが出たらソースコードを確認。OKだったら左側のキーボードのUSBポートにつないで、書き込みを実行しRESETボタンを押す。これを右側のキーボードでも同様にやれば完成!使うときはつないでる側が左側になるようにする。
IMEのON/OFF切り替え問題

ところで、皆さん、IMEはどういうキーでON/OFFを切り替えてますか?
US配列キーボードをお使いの方にお聞きします。IMEのON/OFFはど… – 人力検索はてな :
2007年のデータですが「alt」+「`」が6割以上!いやー、ちょっと私は無理です。
普段はKINESISでは、上記のキー操作をマクロにして親指ですぐに切り替えられるようにバインドしてました。仕方なく、日本語JISキーボードのときは「半角/全角キー」を、レジストリをいじって「変換」キーにアサインすることで似た状態を作っています(こういうの自分ぐらいなのかしら?)
というわけで、このErgoDashでも1キーでIMEを切り替えたかったのですが、Google日本語入力で、「Ctrl+Space」に割り当てるくらいが精一杯のようであきらめようとしていたところ、うまいことプログラムする方法を見つけました。
QMKで、1キーでIMEの入力モードを切り替える (ひらがな <-> 半角英数) – たねやつの木 :
おおっ!確かに、せっかくプログラマブルなキーボードなのだから、できるかも?
enum custom_keycodes { QWERTY = SAFE_RANGE, LOWER, RAISE, ADJUST, // 1. マクロ用のキーコード名の宣言 M_HNZN_TGL = SAFE_RANGE, // IMEトグル用 }; bool process_record_user(uint16_t keycode, keyrecord_t *record) { // 2. マクロの実装 if (record->event.pressed) { switch(keycode) { case M_HNZN_TGL: SEND_STRING(SS_LALT("`")); return false; } }
あまり良くわかってませんが、上記のようなコードを追加することで、M_HNZN_TGL、というコードでALT+`を実現できました!
完成!

借り物なので、無いキーはありあわせということで、プリントスクリーンにSUPERキー、Windowsキーは、空白。IME切り替えにCODEというキーにしてみました。
試し打ちをしたところ、親指のALTとWindowsキーと、中央上部のFNとSUPERがミスタイプしまくるので、悩んだ結果、打ち間違って押したキーも同じキーにする、もしくは単独で押しても反応しないキー(FN)にするという暴挙に出て作ったのがこれ。

代わりにHOMEとENDが犠牲になりましたが、割といい感じになりました。できれば親指のところは3列にして、ENTERやDELETEは2つ分のキートップにするとかがいいんでしょうね。

あなたは段々、これがKINESISに見えてくる~。
次はパームレストが欲しいな~。
参考リンク
MIX profile “Big Bang" Ortholinear Keycap Set available on KBDfans NOW – deskthority : 今回お借りしたのはこのMIX1.0(MDA)というプロファイル