hello-world
webエンジニアのメモ。とりあえずやってみる。

[mac]ErgoDox EZにfnキーを割り当てる

公開日時

ErgoDox EZのキーカスタマイズをしていたところ、「そういえばfnキーがない」ということに気が付きました。

普段 fn + F1 でディスプレイの明るさ調整を行っていたので、fnキーも割り当てたいと思い調べてみたところ、

Apple/Mac keyboard Fn Not supported.

FAQ Keymap · tmk/tmk_keyboard Wiki

とのことでした。

macbookの場合、「明るさ調整の場合だけ内蔵キーボードを使う」という風にすればそれでもよかったのですが、せっかくなので色々調べてみたところ、「Karabiner」と「Seil」を使うことでfnキーを割り当てることができました。

今書いておかないとすぐ忘れてしまうのと、キーボードに慣れる練習を兼ねてやり方を残しておきます。

結構手間のかかるやり方になっているのでもっと良い方法をご存じの方がいらっしゃればアドバイスいただけますとうれしいです。

対応方法

やることとしては「 SeilでCapsLockをF19キーに割り当て、KarabinerでF19キーをfnに割り当てる 」ことをします。

直接CapsLockをfnに割り当てていないのは「 通常キーボードの場合はCapsLockはcontrolとして割り当て、ErgoDox EZの場合のみfnとして割り当てる 」というのを実現したかったからです。

1. CapsLockを無効化

「システム環境設定」 => 「キーボード」 => 「修飾キー」 で全てのキーボードのCapsLockを「アクションなし」に設定します。

k1

2. SeilでCapsLockのキーコードをF19に変更

Seilを起動してCapsLockのキーコードを 80番(F19) に設定します。

k2

3. ErgoDox EZのvendoridとproductidを調べる

SeilのFAQにある「caps lockを特定のキーボードでのみ変更するには?」を参考に設定していきます。

ErgoDox EZのvendoridとproductidを調べるにはKarabinerインストール時に付いてくる「 EventViewer 」というアプリを起動します。

「Devices」タブを開くと各キーボード等のvendoridとproductidが表示されているのでメモしておきます。

k3

4. private.xmlの編集

Karabinerの設定画面を開いて「Open private.xml」を選択。

k4

private.xmlを開いて、以下を入力します。(vendoridとproductidは先ほどメモしたものに置き換えて下さい)

<devicevendordef>
  <vendorname>My_Keyboard_VendorID</vendorname>
  <!-- *** Replace this value with yours. *** -->
  <vendorid>0xXXXX</vendorid>
</devicevendordef>

<deviceproductdef>
  <productname>My_Target_Keyboard_ProductID</productname>
  <!-- *** Replace this value with yours. *** -->
  <productid>0xXXXX</productid>
</deviceproductdef>

<item>
  <name>Change f19 key to function key</name>
  <appendix>(Change f19 key to caps lock key in internal keyboard.)</appendix>
  <identifier>private.f19_hack</identifier>
  <block>
    <!-- change f19 key to function key -->
    <device_only>
      DeviceVendor::My_Keyboard_VendorID,
      DeviceProduct::My_Target_Keyboard_ProductID
    </device_only>
    <autogen>__KeyToKey__ KeyCode::F19, KeyCode::FN</autogen>
  </block>
  <block>
    <!-- change f19 key to control key in other devices -->
    <autogen>__KeyToKey__ KeyCode::F19, KeyCode::CONTROL_L</autogen>
  </block>
</item>

ファイルの保存後に「Reload XML」を実行すると上記の設定が追加されているので、チェックを入れます。

k5

5. fnキーとの組み合わせの設定

最後にfn + F1で明るさ調整ができるように設定を切り替えます。

以下のようにKarabinerの「Change F1..F19 Key」の設定にチェックを入れます。

k6

これでCapsLockをfnキーとして使うことができるようになりました。

もちろんErgoDox EZ以外のキーボードではこれまでどおりcontrolとして使えています。

ErgoDoxのキーマップに関しては、Symbol Layerの空いている場所にCapsLockを割り当てて使うようにしています。

qmk_firmware/keymap.c at ergodox_ez/hilotter · hilotter/qmk_firmware · GitHub

まとめ

Karabinerすごい


Related #ErgoDox

ErgoDox EZを買った

これまでキーボードには特にこだわりがなく、macbookのキーボードをひたすら使い続けていたのですが、会社で使っている人がいて「使い始めて姿勢が良くなった」という話を聞いたので買ってみました。