JANSI+hidutil:外付けWindows用JIS配列キーボードのJANSI化

Macにキーボードを外付けしてJANSI化(=英数/かなキー付きの英語配列)して使いたい時がありますヨネ!AppleのJIS配列キーボードならば、JANSIのkeylayoutファイルを置くだけで簡単にこの要望は実現できるわけですが、そうそう都合よくAppleのJIS配列キーボードが転がっているとは限りません。

仕方なくWindows用JIS配列キーボードを繋ぐわけですが、英数、かな、右Command、ESCあたりがMacのJIS配列と異なりとても残念な思いをします。そこでhidutilコマンドを使って追加の調整をやろうというのが今回の話になります。

本文書に基づいた作業によるいかなる結果についても当方は責任を負いません。またご質問やご要望を頂いてもサポートはしませんので、自己の責任で実施、対処してください。


設定手順

1. JANSIのkeylayoutファイルでベースとなる英語配列を適用する

リンク先の通り、keylayoutファイルを適用します。

2. hidutilを使ってWindows用のキーを調整するスクリプトを用意する

マッピングを調整する以下のスクリプト「hidutil.jis2us.sh」を作成します。
#!/bin/zsh
# hidutil.jis2us.sh

apply_mapping() {
echo "=== apply UserKeyMapping ==="
/usr/bin/hidutil property --set '{
"UserKeyMapping": [
{
"HIDKeyboardModifierMappingSrc": 0x70000008B,
"HIDKeyboardModifierMappingDst": 0x700000091
},
{
"HIDKeyboardModifierMappingSrc": 0x70000008A,
"HIDKeyboardModifierMappingDst": 0x700000090
},
{
"HIDKeyboardModifierMappingSrc": 0x700000088,
"HIDKeyboardModifierMappingDst": 0x7000000E7
},
{
"HIDKeyboardModifierMappingSrc": 0x700000035,
"HIDKeyboardModifierMappingDst": 0x700000029
}
]
}'
}

clear_mapping() {
echo "=== clear UserKeyMapping ==="
/usr/bin/hidutil property --set '{"UserKeyMapping":[]}'
}

show_status() {
echo "=== show UserKeyMapping ==="
/usr/bin/hidutil property --get UserKeyMapping
}

notify() {
local message="$1"
local current_time=$(date "+%Y-%m-%d% %H:%M:%S")
osascript -e "display notification \"${message}\" with title \"hidutil.jis2us.sh\" subtitle \"${current_time}\""
echo ${message}
}

show_help() {
echo "Windows用JIS配列キーボードをJANSI化するためにリマッピングを設定/解除します"
echo " 無変換 -> 英数"
echo " 変換 -> かな"
echo " カタ/ひら -> 右Command"
echo " 半角/全角 -> ESC"
echo "-----"
echo "Usage: hidutil.jis2us.sh [map | unmap | help]"
echo "Options:"
echo " map : リマッピングします"
echo " unmap : リマッピングを解除します"
echo " help : このヘルプを表示します"
echo ""
}

case "$1" in
map)
apply_mapping
notify "リマッピングを適用しました"
;;
unmap)
clear_mapping
notify "リマッピングを解除しました。"
;;
help)
show_help
;;
*)
show_status
;;
esac

このスクリプトでは、show_helpにあるように、「map」オプションをつけて実行すると、以下の形でWindowsのJIS配列キーボードをMacのJIS配列キーボード風にリマッピングします。
  • 「無変換」を「英数」
  • 「変換」を「かな」
  • 「カタカナ/ひらがな」を「右Command」
  • 「半角/全角」を「ESC」

細かいところは色々ありますが[1]、これでかなりJANSI度が高まります。


3. スクリプトをショートカットアプリにして「ログイン時に開く」に登録する

毎度ターミナルからスクリプトを手打ちするのは面倒なので、ショートカットのアプリの形にして自動起動[2]するようにします。「hidutilキー設定実行」という名前にしました。(<yourdir>のところは自分の環境に合わせてください)

作成したショートカットに対して「Dockに追加」メニューからアプリの形に出力すると、「~/Applications/hidutilキー設定実行.app」というアプリとして保存されます。システム設定の「一般>ログイン項目と機能拡張」の「ログイン時に開く」の+ボタンを押して同アプリを選択します。これで起動時に実行されるようになります。(「プライバシーとセキュリティ>入力監視」にて当該アプリの監視を求められたら承諾します)


余談:Windows用JIS配列キーボードをJANSI化するなら

AppleのJIS配列キーボードはスペースキーが短めになっており、英数/かなキーを親指操作するのに適した配置になっています。今回の話の目的でWindows用JIS配列キーボードを探すときにはこの点を気を付けて近い配置のものを探すと良いと思います。

たとえば、サンワサプライのSKB-KG3BKN2はスペースキーが短めで、とてもJANSI向きだと思います。安価なので使い潰すにはいいキーボードだと思います。


1: 外部接続されるキーボードをhidutil --matchingで特定することで細かい調整ができますが、掲載のスクリプトは汎用的な形にしました。複数キーボードを接続するような場合などはスクリプトの拡張を検討した方がいいかもしれません。

2: セキュリティ観点と思いますが、最近のOSアップグレードでlaunchdの制約が強くなっているようです。難しくしないためにショートカットの自動起動を使うことにしました。

0 件のコメント:

コメントを投稿