肩こりがひどいという言い訳で分割キーボードを作る(4) アームレストでうちやすさが格段に

仕事が忙しくて大量に文字を売った結果かなり馴れてきたと言える。ほぼ打ち間違いもなくなりいい感じになってきているがそもそもそんなに精度が高いわけではないので矯正された分以前よりはむしろ良くなった気がする。ようやくYは左手だと覚えてくれたみたいだ。Bが逆の人も同じ気分だろう。

記号などの配置がまだこなれてなくてここじゃなくても良いかなという部分はあるがこれはおいおいできたら良いかなと感じている。

一番の貢献をしているのはこのアームレストかもしれない。最終的には、木で作ろうとまずはホームセンターで加工しやすいスチール素材のようなもの 10mmの厚さのやつをカッターで切り100均のシートで巻いて滑り止めやらつけて本体ともずれないように固定をしている(取れるようにはなっている)。以外に柔らかい素材がいい感じに効いていている。

普段の入力で不要なキーはTwitterで教えてもらったスイッチブロッカーというものを利用して塞いでいる。個人的にはもっと薄いほうが嬉しい気がします。このキーボードの問題だと思いますがプレートの上に乗っているのでケースがあるとまた違うのでしょうね。

分割キーボードの難しさはポジションが狂うとかなり打ちづらくなるということですが結果的には大型のアームレストを使うことでこの問題を解決したのかなとおもいます。その分移動ができなくなったので完全にデスクトップ専用になりつつあります。

肩こりがひどいという言い訳で分割キーボードを作る(3) qmkを使ってOSの判断

普段仕事はmacを使っているが個人ではLinuxを使っている関係上どうしても困るのが日本語変換まわり。Linuxでも同じキーでなんとかしたいと思っていたのだが自作キーボードのファームウェアの設定素ライブラリであるqmkを使うことで対応ができた。

レイヤー0にはmacで使う定義を記載

レイヤー(1)にはLinuxで使う定義を記載

ターミナルに貼り付けることが多いのであえて ctrl+shift を割り当てている。とはいえブラウザ上でのはctrl+c/vが有効なので間違えて打つと面倒なのでブラウザ側でも調整が必要

qmkの定義(rules.mk)

OS_DETECTION_ENABLE = yes
DEFERRED_EXEC_ENABLE = yes

keymap.c の変更点

#include "os_detection.h"

void keyboard_post_init_user(void) {
  uint32_t get_host_os(uint32_t trigger_time, void* cb_arg) {
    switch (detected_host_os()) {
      case OS_UNSURE:  // Don't change default layer if unsure.
        break;
      case OS_MACOS:   // On Mac, set default layer to 0.
      case OS_IOS:
        set_single_persistent_default_layer(0);
        break;
      default:         // On Windows and Linux, set to 1.
        set_single_persistent_default_layer(1);
        break;
    }
    return 0;
  }
  // Set default layer based on the detected OS after a 500 ms delay.
  defer_exec(500, get_host_os, NULL);
}

これで少し幸せになりました(あとはブラウザのCtrl+cの挙動は別で変えるしかない)

追記(2024/02/12)
layer_move()関数に変更した。キーが確定したらdefault_layerでも良いかもしれない。

Linux Bluetoothが再認識しない場合の対処

ふとした拍子に、キーボードの接続を削除してしまったらその後どうしても発見してくれない状態になってしまうことがあります。

根本的に解決になっているわけではないですが以下の方法で認識することが有ります。

rm -rf /var/lib/bluetooth/<番号>/cache

番号には、それぞれ環境によって異なります。サービスなどを再起動すればよいのかと思いますが強制的に消してしまっているのでシステムが再起動できれば再起動してしまうほうが良いです。再起動後、機器をペアリングモードにすることで無事に接続ができたことを確認できました。