WICの中から

機構設計者が株式投資や育児に奮闘するblog

【自作キーボード】Meishiに文字列を割り当ててパスワードをワンタッチ入力にする時短テク

はじめての自作キーボード、Meishi。

temcee.hatenablog.com

作って満足してたものの、そもそもはパスワード入力用のキーにしたかったんですよ。会社のパスワード、定期更新を強制される上に長文かつ頻繁に入力機会があるんですよね。。。
それをワンタッチで入力できれば素敵じゃないですか。

そんなわけで、今回はMeishiのキーに文字列を割り当てたときのメモをつらつら書いていきます。
※今回のようにキーにパスワードやクレジット情報など、重要な文字列を入れることにはリスクがあります。キーにアクセスできる人なら誰でも、それらの情報にアクセスできるからです。その点を認識した上で、Macrosをご利用ください。

f:id:temcee:20190421092816j:plain

Macrosを使ってみよう

自作キーボードには、QMK Firmwareというオープンソースのファームウェアがよく使われています。Meishiも然りです。

QMK FirmwareのFeaturesを読んでみると、Macrosの項に「1回のキータッチで複数の司令を送る」的なことが書かれています。1つのキーで文字列を入力したいという、僕の要望にピッタリです。

keymap.cの変更

Macrosのページを読みながら、文字列入力の実装をしていきます。

キーの割当を変えるには、keymap.cを編集します。keymap.cは下記フォルダに格納されています。

qmk_firmware>keyboards>meishi>default>keymap.c

Meishiの左2つのキーを変更してみるべく、keymap.cを下記のように変更します。

#include QMK_KEYBOARD_H

//Added
enum custom_keycodes {
  COMNUM = SAFE_RANGE,
  COMPASS
};

//Changed
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
  COMNUM,  COMPASS,  LCTL(KC_C), LCTL(KC_V) \
),
};

const uint16_t PROGMEM fn_actions[] = {

};

void matrix_init_user(void) {

}

void matrix_scan_user(void) {

}

//Changed
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch(keycode){
    case COMNUM:
      if(record->event.pressed){
        //pressed
        SEND_STRING("364364");
      } else {
        //released
      }
      break;
    case COMPASS:
    if(record->event.pressed){
        //pressed
      SEND_STRING("daishikyuimasugu");
    }else{
        //released
      }
      break;
  }

  return true;
}

void led_set_user(uint8_t usb_led) {

}

//Addedの箇所がデフォルトから追加した箇所、//Changedの箇所は、既存の関数や変数から変更した箇所です。

enum

enum custom_keycodes {
  COMNUM = SAFE_RANGE,
  COMPASS
};

最初に指定しているSAFE_RANGEはキーコード定義の最後に宣言されているものです。最初にこの値を定義することで、カスタムキーコードが他のものと被らないようになります。キーをカスタムする際の、毎度のお作法のようです。

const uint16_t PROGMEM keymaps...

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
  COMNUM,  COMPASS,  LCTL(KC_C), LCTL(KC_V) \
),
};

これはキーの配列ですね。enumで定義した2つの変数を割り当てます。後ろ2つはデフォルトのままで、それぞれCtrl+C, Ctrl+Vが割り当てられています。

process_record_user

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch(keycode){
    case COMNUM:
      if(record->event.pressed){
        //pressed
        SEND_STRING("364364");
      } else {
        //released
      }
      break;
    case COMPASS:
    if(record->event.pressed){
        //pressed
      SEND_STRING("daishikyuimasugu");
    }else{
        //released
      }
      break;
  }

キーが押されたときのイベントです。
keycodeの中身に従って、switchで処理を決めていきます。

文字列を入力したい場合はSEND_STRING("文字列")です。

今回は押されたときの処理しかかいていません。//releasedの箇所に処理を書けば、キーが離れたときの挙動も定義することができます。

Meishiを接続して書き込み

ターミナルを起動しqmk_firmwareフォルダまで移動し、下記コマンドでMeishiにビルドして書き込みます。

make meishi:default:avrdude

途中、案内に従いリセットボタンを押してしばらくしたら、Meishiマクロキーボードの出来上がりです。

結果

無事に文字列の入力ができました。一番左のキーをおすと「364364」、二番目のキーをおすと「daishikyuimasugu」が入力されます。

f:id:temcee:20190613230430p:plain

会社でも無事に入力できました。最初のログイン画面から使えるのは、良いですね。今までも別なマクロキーボードは使っていたのですが、プロファイル読み込みが立ち上がり以降になる関係上、最初のログインパスは手打ちするしかなかったんですよね。

市販のマクロキーボードより小さくなってデスクも広く使えるし、Meishi最高ー!

参考

meishi キット | 遊舎工房
meishiキットの購入先、はじめての1台におすすめです

QMK Firmware
他に割り当てられるキーの情報

Meishi keyboard 組み立て方ガイド - たのしい人生
Meishi作成者様による組み立て方ガイド

enumって何だよ - Qiita
enumよく分からなかったので

QMK : キーマップのカスタマイズ
さらなるカスタマイズを目指して、参考になるページまとめ

こんな記事も書いています

temcee.hatenablog.com
Meishiを実用化したことで、この大きなマクロキーボードはそっとデスクの下で眠りにつきました。