Help us understand the problem. What is going on with this article?

macOS Sierra + Karabiner-Elementsメモ

More than 3 years have passed since last update.

中古の New MacBook (Early 2015) を手に入れた。
キーボードはJIS。

諸事情によりmacOS Sierraにアップグレードした後で KarabinerがmacOS Sierraでは使えなくなっている事を知り、Karabiner-Elementsさんと仲良くすることになった話、というか諸々のメモ。

元々OS X Mavericksが入ってたんだけど、これまで使っていたMacBook Air (Mid 2011; El Capitan) の中身をTime Machine経由で移そうとしたら、移行先のOSが移行元より古いバージョンだと移行できない、と言われてEl Capitanを入れようとして、ところが以前MBAにEl Capitanをインストールする時に作ったインストーラ入りUSBメモリが壊れてる判定されたので諦めてSierraをですね

なぜそもそもKarabiner(ないしKarabiner-Element)を?

元々USキーでAの左にctrlを持ってくる為にKarabinerを使ってたクチなのだけれど、JISキーボードではそれは不要。ではなぜそもそもKarabiner(ないしKarabiner-Element)を?

JISキーボードの左commandって打ちにくい。12-inchのコンパクトな筐体はパームレストが狭いから特に。かといって右commandを使うようには自分の脳の配線が出来ていない。
せめて英数キーあたりの位置に左commandキーがあってほしい。

英数キーを左commandにして、さらに言えば、かな変換・無変換のトグルのためにcommand-spaceとかするのは面倒だから、出来れば英数キーを単独で押した時は英数として機能してほしい。

とりあえず、英数キーを左commandにするだけならKarabiner-Elementsで容易に実現できた。

英数だけ打ったときに英数として効かせるのは、wwwjfy氏のstandalone-modifiersブランチをマージしたら実現できた(※本家に対しpull-requestは出てるけど2016年10月21日現在未マージ

Karabiner-ElementsでJISキーボードが強制的にUSキーボードになる問題

JIS external keyboard recognized as US (ASCII) keyboard after v0.90.47

英数を左commandにするのはうまく行ったんだけど、現行バージョン(0.90.52で確認)では強制的にUSキーボードとして認識されてしまう。

バージョン0.90.46ならJISのまま、という話だったがそうでもない(いつの間にかUSになってる)

これまでUSキーボードを使うことが多かったしそれならそれで別に構わないんだけど、JISキーボードをUSキーボードとして認識されると ~ とか \ とか打てなくなるんだよね。ホームディレクトリとか参照できなくて死ねる。

それってKarabiner-Elementsでどうにかならない?

答。まあ、なんとかなるにはなる。

バックスラッシュはJISキーボードの¥マークに割り当てて、「`」はLの3つ右(「む」のキー)に割り当ててみた。右shiftの左(「ろ」のキー)のアンダースコアをアンダースコアとして活かせたら嬉しいんだけど設定が分からなかったのでとりあえず割当なしで。

変換前 JISの該当キー 変換後 USの該当キー
international1 vk_none 割当なし
international3 backslash \
japanese_eisuu 英数 left_command 左⌘
backslash grave_accent_and_tilde `

karabiner.jsonはこんな風になってる。

~/.karabiner.d/configuration/karabiner.json
{
  "profiles" : [
    {
      "fn_function_keys" : {
        "f1" : "vk_consumer_brightness_down",
        "f2" : "vk_consumer_brightness_up",
        "f3" : "vk_mission_control",
        "f4" : "vk_launchpad",
        "f5" : "vk_consumer_illumination_down",
        "f6" : "vk_consumer_illumination_up",
        "f7" : "vk_consumer_previous",
        "f8" : "vk_consumer_play",
        "f9" : "vk_consumer_next",
        "f10" : "mute",
        "f11" : "volume_down",
        "f12" : "volume_up"
      },
      "selected" : true,
      "simple_modifications" : {
        "international1" : "vk_none",
        "international3" : "backslash",
        "japanese_eisuu" : "left_command",
        "backslash" : "grave_accent_and_tilde"
      },
      "standalone_modifiers" : {
        "left_command" : "japanese_eisuu"
      },
      "name" : "Default profile"
    }
  ]
}

強制的にUSキーボードになる問題の回避

強制的にUSキーボードになる問題は、とりあえずdcato氏が作ってくれたパッチ patch.txt をあてて回避した。

patch.txt
diff --git a/src/share/hid_system_client.hpp b/src/share/hid_system_client.hpp
index 945511e..2d83474 100644
--- a/src/share/hid_system_client.hpp
+++ b/src/share/hid_system_client.hpp
@@ -39,6 +39,7 @@ public:
                                                              std::bind(&hid_system_client::matched_callback, this, std::placeholders::_1),
                                                              std::bind(&hid_system_client::terminated_callback, this, std::placeholders::_1));
     }
+    logger_.info("modified karabiner_event_dispatcher executing....");
   }

   ~hid_system_client(void) {
@@ -85,7 +86,8 @@ public:
     event.key.charCode = 0;
     event.key.keyCode = key_code;
     event.key.origCharSet = NX_ASCIISET;
-    event.key.keyboardType = 0;
+//    event.key.keyboardType = 0;
+    event.key.keyboardType = 45; //JIS_MACBOOK_2008 45

     IOGPoint loc{};
     post_event(event_type == krbn::event_type::key_down ? NX_KEYDOWN : NX_KEYUP,

こんなパッチなので、

$ cd Karabiner-Elements
$ patch -p1 < patch.txt
$ make clean ; make

とかやって、結局

~/.karabiner.d/configuration/karabiner.json
      (略)
      "simple_modifications" : {
        "japanese_eisuu" : "left_command"
      },
      "standalone_modifiers" : {
        "left_command" : "japanese_eisuu"
      },
      (略)

設定はこれだけ残して(英数キー回りの設定をいじるだけで)あとは普通にJISキーボードとして使っている。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away