Edited at

macOS Sierra + Karabiner-Elementsメモ

More than 1 year has 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キーボードとして使っている。


参考