macOS Big Sur(ベータ版)でキー入力をリマップする


はじめに

macOS Big Surのデベロッパ向けベータ版が公開されましたね。
早速インストールしてみたところ、愛用しているKarabiner-Elementsが動作しなかったため1、macOS標準の機能を利用してキー入力をリマップする方法について調査し、本記事としてまとめました。

macOS Big Surのデベロッパ向けベータ版は、本日より、developer.apple.com/jpを通じてApple Developer Programのメンバーに提供されます。Macユーザーに対しては来月中にパブリックベータプログラムがbeta.apple.comで提供されます。macOS Big Surは今秋、無料のソフトウェア·アップデートとして提供されます。互換性のあるMacのモデルを含む詳しい情報は、apple.com/macos/big-sur-previewをご覧ください。提供される機能は変更される場合があります。一部の機能は、国や地域、言語によっては利用できない場合があります。
https://www.apple.com/jp/newsroom/2020/06/apple-introduces-macos-big-sur-with-a-beautiful-new-design/

本記事では、次のmacOS標準の機能2つを組み合わせてリマップを実現しています。2

  1. 修飾キーのアクション変更
  2. hidutil3を利用したリマップ
リマップ元の物理キー 1. 修飾キーのアクション変更 2. hidutilを利用したリマップ リマップ先の論理キー
Caps Lock4 Caps Lock

Left Command
Left Command
Left Command Left Command

Left Control
Left Control

英数
英数
Right Command Right Command

Right Control
Right Control

かな カナ
かな カナ

この方法は、macOS Sierraで導入されたhidutilを利用しているため、macOS Sierra以降で動作します。
なお、macOS CatalinaおよびBig Sur(ベータ版)については動作検証も実施済です。

修飾キーのアクション変更

  1. 「システム環境設定」アプリで、「キーボード」を選択。
  2. 「修飾キー...」を選択。
  3. 次のように「修飾キー」のアクションを変更します。(Caps Lockについてはお好みで。)5

hidutilを利用したリマップ

hidutilにリマップ元およびリマップ先のキーコード(hex)6を指定して実行します。

$hidutil property --set '{"UserKeyMapping":[
  {
    "HIDKeyboardModifierMappingSrc": 0x7000000E0,
    "HIDKeyboardModifierMappingDst": 0x700000091
  },
  {
    "HIDKeyboardModifierMappingSrc": 0x7000000E4,
    "HIDKeyboardModifierMappingDst": 0x700000090
  },
]}'

今回利用したキーコード(hex)は以下となります。

キー キーコード(hex)
Left Control 0x7000000E0
Right Control 0x700000091
英数 0x7000000E4
かな カナ 0x700000090

なお、hidutilで設定した値はmacOSの再起動時にクリアされてしまいます。
対処方法としては、~/Library/LaunchAgents に以下の com.example.KeyRemapping.plist7 を配置することで、macOS起動時に毎回hidutilが実行されるようになります。

com.example.KeyRemapping.plist
<?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.example.KeyRemapping</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/hidutil</string>
        <string>property</string>
        <string>--set</string>
        <string>{"UserKeyMapping":[
          {
            "HIDKeyboardModifierMappingSrc": 0x7000000E0,
            "HIDKeyboardModifierMappingDst": 0x700000091
          },
          {
            "HIDKeyboardModifierMappingSrc": 0x7000000E4,
            "HIDKeyboardModifierMappingDst": 0x700000090
         }
        ]}</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

macOS Big Sur beta 5 で日本語入力への切替ができなくなった場合の対応方法(追記)

macOS Big Sur beta 5 にアップデートしたところ、日本語入力への切替ができなくなるという現象が発生しました。
同様の現象が発生した方がいましたら、現象発生時の対応方法をまとめたので参考にしてください。

参考文献


  1. Karabiner-ElementsでBig Surがサポートされました。詳細はKarabiner-Elements 13.0.0のリリースノートを参照してください。 

  2. 今回の「Left Command」のように、リマップ元とリマップ先に同じキーがあるとhidutilだけでは実現できなかったため、修飾キーのリマップを組み合わせています。リマップ元とリマップ先に同じキーがないリマップの場合はhidutilだけで事足りると思います。 

  3. hidutilはmacOS Sierraから導入されているキーリマップツールです。 

  4. Apple内蔵キーボードはCaps Lock。外付けのHHKB Professionalも利用しているので、そちらはLeft Controlをリマップしています。 

  5. macOS Big Surはまだベータ版のため、スクリーンショットはmacOS Catalinaで採取したものになります。 

  6. USBキーボードのキーコードTechnical Note TN2450 Remapping Keys in macOS 10.12 Sierraにも載っていなかった「英数」、「かな カナ」キーの記載もあり、とてもわかりやすかったです。 

  7. https://gist.github.com/chuyeow/2ab2d3e6a649389cea58f4d31f7f6d53#file-com-example-keyremapping-plist を参考にしています。また、好みの問題ですが私はexampleの部分をuserIdに変更して利用しています。