Ubuntu18でqmk_firmwareのセットアップ


使用機器

Pro Micro

Pro Microは、sparkfun社のArduino Leonardo互換の赤色のボードで、こういうもの。
https://www.sparkfun.com/products/12640

本物は高いので、格安で手に入る下のようなクローンを使用している。
https://ja.aliexpress.com/item/32775200720.html?spm=a2g0o.productlist.0.0.2b3e5552qtr8HQ&algo_pvid=d3d54e93-d970-4bce-b74a-86b235103680&algo_expid=d3d54e93-d970-4bce-b74a-86b235103680-9&btsid=0ab6f83115884739823885590e52ed&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_

キーボード

7sKBを使っている前提。キーマップの指定部分を変更すれば、他のキーボードでも同じように設定できるはず。

環境構築

手順

以下を順番に実行。

qmk firmareをクローンして、レポジトリルートに移動

$ git clone https://github.com/qmk/qmk_firmware
$ cd qmk_firmware

インストールスクリプトを実行

必要なものを一気に入れてくれるスクリプトがあるので実行

$ ./util/qmk_install.sh

サブモジュールをビルド

インストールスクリプトで入れてくれないサブモジュールをビルドする。これをやらないと、tmk_core/protocol/lufa.mk:14: lib/lufa/LUFA/makefile: No such file or directoryのようなエラーが出てくる。

$ make git-submodule

モデムマネージャーをアンインストール

これが動いていると、シリアルポートが塞がってしまい、Pro Microに書き込みができない。

$ sudo apt remove modemmanager

キーボード配列の書き込み

手順

以下を順番に実行。

キーボード配列の変更

https://docs.qmk.fm/#/keycodes にキーコードの表がある。

$ vi keyboards/7skb/keymaps/default/keymap.c

書き込みたいキーボード配列のmakeターゲットを実行

$ make 7skb:default:avrdude

Pro Microをリセット

コントローラーをリセットしろと以下のように出てくるので、Pro Microをリセットする。

Detecting USB port, reset your controller now...........

USBの口を上にした状態で、右側の上から2番と3番目が、GNDとRESETになる。その2つをショートするとPro Microがリセットされる。

初回は素早く2回ショートする必要あり。ピンセットでショート可能。

キーボードデバイスを書き込み可能に

コントローラーをリセットすると、デバイスとしてマウントされて、以下のようなメッセージが出てくる。

Device /dev/ttyACM0 has appeared; assuming it is the controller.
Waiting for /dev/ttyACM0 to become writable.

そこで、別のターミナルからそのデバイスを書き込み可能にすると、書き込みが実行される。

デバイスは数秒でアンマウントされてしまうので、上のメッセージが出たらすぐに書き込み権限を与える必要がある。

$ sudo chmod 777 /dev/ttyACM0 

スクリプト

キーボード配列を変えるたびに、上の手順を実行するのは大変なので、スクリプト化した。

#!/bin/bash

keyboard=/dev/ttyACM0
keymap=7skb:default

make $keymap:avrdude &
pid=$!

while :
do
  ls -1 $keyboard 2>/dev/null
  if [ $? == 0 ]; then
    break
  fi
  sleep 1
done
sudo chmod 777 $keyboard

wait $pid