macOS Sierraで変わったこと、できなくなったことは少なくない。例を挙げれば、PPTPによるVPN接続ができなくなり、署名のないアプリが起動不許可とされ(システム環境設定「セキュリティとプライバシー」から「すべてのアプリケーションを許可」オプションが削除)、Java 6のサポート終了に伴い一部アプリケーションが起動不能になる……と、ユーザによっては影響が大きいものも。セキュリティ対策など事情はあるが、ユーザが困ることは確かだ。

「キー・リマップ」が難しくなったことも、Sierraにおける悩みのひとつ。よく知られたキー・カスタマイズアプリ「Karabiner」(旧名:KeyRemap4MacBook)は、Sierraでは動作しないのだ。すでに「英かな」など他のキー・カスタマイズアプリがSierra対応を遂げているが、キーリピート機能がないなどの点でKarabinerのアップデートを待つユーザも多いと聞く。

筆者は"Karabiner待ち"を決め込んでいるが、AppleのWEBサイトで公開されている開発者向け文書を漁っていたところ、「Remapping Keys in macOS 10.12 Sierra」(リンク)なるテクニカルノートを発見。これである程度のことはできてしまいそうだ。

ノートの内容をかいつまんで説明すると、「hidutil」コマンドを利用すればキー・リマップは可能で、1つのキーを別の(1つの)キーで置き換えできる、IOKitのHID APIを利用すると恒常的なキー・リマップを行うアプリを開発できる、ということになる。

その書式は以下のとおり。「UserKeyMapping」というキーに、HIDKeyboardModifierMappingSrc(入れ替え前)と対応するキーID「0x7000000○○」、HIDKeyboardModifierMappingDst(入れ替え後)と対応するキーID「0x7000000△△」の計2対の定義をくわえる、という流れだ。

hidutilコマンドで施した設定はシステム終了に伴いリセットされるが、ログインスクリプトなどに記述しておけば次回以降の利用には手間がかからない。コマンドラインはかなり冗長になるが、シェルスクリプトに記述しておけばいい話で、実行に際し管理者権限は必要ないため気軽に使える。安定動作を確認するまで(シェルでヒストリを行き来しながら)繰り返し実行する、という使いかたも可能だ。

$ hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":  0x7000000○○,"HIDKeyboardModifierMappingDst":0x7000000△△}]}'

Sierraでは「hidutil」コマンドだけでキー・リマップを実行できる(画像はイメージです)

問題はキーIDで、テクニカルノートの後半にリストアップされている「Key Table Usages」では情報が足りない。「英数」や「かな」などJISキーボード固有のキーが掲載されていないのだ。「Key Table Usages」にないが有用なキーIDを表にまとめておいたので、参考にしてほしい。

では、実例を示してみよう。キー・リマップの対象は「delete」、これを"EmacsのC-d(control-d)"に置き換えようという算段だ。Macの「delete」キーはWindowsにおけるBackSpaceであり、カーソル位置の文字を消す操作は「fn」+「delete」とせねばならず、これを苦にするユーザもいるはず……という考えからだ。

テクニカルノートで確認すると、「delete」のキーIDは「0x2a」(16進数の「2a」)、「delete」(「fn」+「delete」、Emacsの「C-d」)のキーIDは「0x4c」であり、それを前掲の書式にあてはめると以下のコマンドラインとなる。実行直後には、「delete」キーが"EmacsのC-d"に置き換えられたことを確認できることだろう。

$ hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":  0x70000002a,"HIDKeyboardModifierMappingDst":0x70000004c}]}'

なお、設定を取り消すにはシステムを再起動するか、以下の要領で「HIDKeyboardModifierMappingSrc」と同じキーIDを「HIDKeyboardModifierMappingDst」に与えればいい。bashのヒストリ機能(C-p)を使い実行済のコマンドラインを呼び出せば、すぐに完了するはずだ。

$ hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":  0x70000002a,"HIDKeyboardModifierMappingDst":0x70000002a}]}'
Technical Noteに記載がないMacBook(Air/Pro含む)の特殊キー
ID(16進数) キー
0x66 JISキーボード「英数」
0x68 JISキーボード「かな」
0xe3 左Command
0xe7 右Command

動作を確認できたら、恒常的な設定に向けての準備へ進もう。以下の要領でキー定義の部分を抜き出し、読みやすい位置で改行(バックスラッシュ「¥」を挿入)しつつ、「,」でつなげばいちどに実行できる。コマンドの自動実行にはLoginHookを利用できるので(sudo defaults write com.apple.loginwindow LoginHook ~)、GUI環境にも有効だ。

hidutil property --set {"UserKeyMapping":[ ¥
{"HIDKeyboardModifierMappingSrc":0x70000002a,"HIDKeyboardModifierMappingDst":0x70000002a}]}', ¥
{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x70000004c}]}', ¥
{"HIDKeyboardModifierMappingSrc":0x7000000e3,"HIDKeyboardModifierMappingDst":0x700000028}]}', ¥
]}'

やや冗長になるが、一般ユーザの権限でコマンドを実行すればキー・リマップできてしまう