Karabiner-Elementsでデュアルキーボードを使用する

# 更新
2023.07
以下で動作確認がとれました
- macOS Ventura 13.1
- Karabiner-Elements 14.12.8


# 概要
Karabiner-ElementsのVirtual Keyboardはいいぞ。


# まえがき

もともとmacOS El Capitanでは2台のキーボードを同時に使っていたのですが
Sierraにアップグレードしてからはいくつかの問題が発生しました。


## Sierraでの問題点
### 1. コンビネーションキーが同じキーボード内でしか認識しない

左で⌘、右でHを押しても、Hのみとして認識されます。
ショートカットだけ気をつけるというのも難しい…

### 2. 左右で入力に遅延にムラが発生
Bluetoothで接続していると左右のキーボードで入力の順序がズレるという問題がありました。
致命的です。ゆっくり入力するしかありません:innocent:

### 3. KarabinerがSierraで動作しない

Sierra以降はKarabiner-Elementsでサポートになりましたが開発初期段階で機能は少なかったです。

### 4. NoEjectDelayが動作しない
SierraではNoEjectDelayが動作しなくなりました。

AppleKeyboardのEjectキーもDelete Forwardとして実質使えなくなりました。

(NoEjectDelayはAppleKeyboardではEjectキーが連打防止されているのでそれを無効化するアプリです。

[NoEjectDelay](https://pqrs.org/osx/karabiner/noejectdelay.html)
 (NoEjectDelay does not work on macOS Sierra)


### しかし

iOSエンジニアなのでXcodeのVerupの都合で泣きながらSierraにあげました。

その頃は皆、Hammerspoonに流れたようですが、私の目的には使えなかった記憶があります。



# Karabiner-Elementsがパワーアップしていた

いつの間にか大幅に機能が追加され、11.0.0から始まったverも12.1.0に

試しにインストールしてみると新しいキーボードのセットアップ画面が！

<img width="728" alt="New Keyboard" src="https://qiita-image-store.s3.amazonaws.com/0/275986/4fd3cf5a-5895-cff4-76fe-977462047a52.png">


## VirtualHIDKeyboard

キーボードの一覧に見慣れないものが:thinking_face:

<img width="780" alt="スクリーンショット 2018-12-15 16.40.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/275986/f5c96e36-22c9-0458-7185-4d46318bf6a7.png">

どうやら、仮想キーボードとして認識させることでキーバインドのリマップやその他諸々を実現しようということらしいです。

キーボードを2台併用していても、一旦仮想キーボードとしてレイヤーに吸収されるので、左右のコンビネーションなども、macOSから見れば1台のキーボードで入力したものと変わらないということですね。



## キーバインドのカスタマイズ

設定の一例です。
⌘キーは押しやすい方が良いだろうということでControlに割り当てるとだいたいこんな感じになるかなぁと。

<img width="780" alt="今までのキーバインド" src="https://qiita-image-store.s3.amazonaws.com/0/275986/19ab7573-749d-a623-6fb3-61dc42ef2766.png">

Karabiner-ElementsではSimple Modificationsの画面で簡単に設定可能です。
Complex ModificationsのRulesから使用できるリマップのJSONも書いたのですが、まだGUIと併用しています。
CapsLockはそこまで使わないのでReturnキーに設定しています。
スクリプトで自動化させてる方は割り当てても良いかもしれませんね。
標準の設定画面と違いどのキーでも割当できるのは良いです。

<img width="1112" alt="設定例" src="https://qiita-image-store.s3.amazonaws.com/0/275986/a3c262d4-b8e1-1b94-278a-2a8a957e7874.png">


## Ejectキー

先程のスクショはMacBookのものなのでEjectキーがありませんが
iMac / Mac miniのキーボードでEjectキーをDelete Forwardに割り当てればOKです。

※ MacのキーボードだとdeleteがWindowsでいうBack-Spaceなので混乱しますよね

## 右の⌘はかえたくない

俺は右の⌘キーはそのままでいいんだ！
という方も以下のように別れているので問題ありません

- left_command
- right_command

左右のコマンドキーを別々に割当可能です。

## プロファイル選択

どんなにカスタマイズしてもプロファイルの選択で切り替えが可能です。

ちょっと人に貸すときも、メニューバーから切り替えできるのでイラっとされなくてすみます。

<img width="1112" alt="プロファイル" src="https://qiita-image-store.s3.amazonaws.com/0/275986/f56c83ef-b600-a61a-1563-0a9313027d99.png">

ここでは自分用に「Customized Profile」、ノーマルを「Default Profile」としています。

# まとめ

大幅アップデートで快適に使用できるようになったKarabiner-Elementsですが
El Capitan対応版のときよりも様々な用途で活用できそうです。

VirtualKeyboardが何台まで認識できるのかは気になるところです。
また、High Sierra、Mojave、Catalinaでも動作します。

ダウンロードはこちらから
[Karabiner](https://pqrs.org/osx/karabiner/)

# 最後に

もし好評なら次回は以下に触れてみたいと思います。

- Shell Command Execution
- アプリケーション毎のリマップ

# 2020.8 追記

## 注意点
新規マウスを接続したときに、特に多ボタンマウスでドライバやSteerMouseから上手く認識されないことがあります。
その場合は、以下のチェックを外せばOKでした。

- Deviceタブ -> Basic configuration -> Modify events from this device

macOS Catalina 10.15.6（19G73） でも安定して運用できています。
Complex modificationsも強力で素晴らしいツールですね。