これはなに
PC 用キーボードを Mac で使う際などのカスタマイズユーティリティとしては Karabiner-Elements が有名で、使用できる状況であれば Karabiner を入れておしまいだが、今回のものは何らかの理由で使用できない場合の代替手段。
ただし、この方法で可能なのは 「○キーを△キーとして認識」等の単純な1対1の置き換えのみ で「ctrl + w を ↑ として認識」等の高度な設定は行えないため、そういった場合は残念ながら代替手段にはなりえない。
自分の環境では macOS Ventura にアップデートした際 Karabiner がどうやっても動かなくなりこの方法を使用した。
仕組み
別途アプリケーションの導入などは不要で、macOS Sierra 以降は OS 標準でキーマップをカスタマイズする「hidutil」というコマンドが用意されているので、それ用の設定ファイルを準備するだけで良い。
hidutil コマンドによるキーマップ変更は再起動すると元に戻ってしまうため OS 起動時に変更を行う仕組みを作る必要があるが、それもシステムライブラリの「Launch Agents」に実行内容を記した XML ファイルを置くだけで完了する。
実際の手順
XML ジェネレータが公開されているので hidutil key remapping generator for MacOS で編集した内容を UTF-8 / LF のテキストファイル「com.local.KeyRemapping.plist」として作成し「~/Library/LaunchAgents/com.local.KeyRemapping.plist」に置けば準備完了。
元に戻したい場合は「com.local.KeyRemapping.plist」を削除。
日本語キーボード特有のキー
hidutil key remapping generator for MacOS には残念ながら日本語 PC キーボード用のキーが含まれないため「無変換」「変換」「カタカナひらがな」については自分で記述する必要がある。
キー | |
---|---|
無変換 | 0x70000008B |
変換 | 0x70000008A |
カタカナひらがな | 0x700000088 |
※「半角/全角」キーは「Controls and symbols > grave_accent_and_tilde」
おまけ:一般的な PC → Mac 用キーボード設定
下記の変換を行う場合の設定。
- Windows キー → 左Option
- Alt → 左Command
- 無変換 → 左Command
- 変換 → 右Command
- カタカナひらがな → 右Command
- Application (メニューアイコンのキー) → 右Option
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.local.KeyRemapping</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/hidutil</string>
<string>property</string>
<string>--set</string>
<string>{"UserKeyMapping":[
{
"HIDKeyboardModifierMappingSrc": 0x7000000E3,
"HIDKeyboardModifierMappingDst": 0x7000000E2
}, {
"HIDKeyboardModifierMappingSrc": 0x7000000E2,
"HIDKeyboardModifierMappingDst": 0x7000000E3
},
{
"HIDKeyboardModifierMappingSrc": 0x70000008B,
"HIDKeyboardModifierMappingDst": 0x7000000E3
},
{
"HIDKeyboardModifierMappingSrc": 0x70000008A,
"HIDKeyboardModifierMappingDst": 0x7000000E7
},
{
"HIDKeyboardModifierMappingSrc": 0x700000088,
"HIDKeyboardModifierMappingDst": 0x7000000E7
},
{
"HIDKeyboardModifierMappingSrc": 0x700000065,
"HIDKeyboardModifierMappingDst": 0x7000000E6
}
]}</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>