macOS Sierraでキーを再マップするにはどうすればよいですか(例:右Altから右コントロール)。


44

以前はKarabinerを使用してRight AltをRight Controlに再マップしていました(Emacsユーザーとしては、AltよりもControlをはるかに使用しています)が、Sierraに更新するとこれが壊れました。ダウングレードはオプションではありません。

Sierraでキーを手動で再マップするにはどうすればよいですか?具体的には、右Altを右コントロールに再マップしたいと思います。

回答:


37

AppleのテクニカルノートTN2450では、キーを再マップする方法について説明しています。次のコマンドを実行すると、右Altが右コントロールに再マップされます。

hidutil property --set '{"UserKeyMapping":
    [{"HIDKeyboardModifierMappingSrc":0x7000000e6,
      "HIDKeyboardModifierMappingDst":0x7000000e4}]
}'

上記のコマンドは、右Altと右コントロールを切り替えないことに注意してください。どちらも正しいコントロールになります。MacBookをお持ちの場合、外部キーボードを接続するまでこれに気付かないでしょう。右Altと右コントロールを切り替える場合は、次のような2番目の切り替えコマンドを追加する必要があります。

hidutil property --set '{"UserKeyMapping":
    [{"HIDKeyboardModifierMappingSrc":0x7000000e4,
      "HIDKeyboardModifierMappingDst":0x7000000e6},
     {"HIDKeyboardModifierMappingSrc":0x7000000e6,
      "HIDKeyboardModifierMappingDst":0x7000000e4}]
}'

テクニカルノートの下部にある表には、各キーの16進値のリストがあります。上記の回答を一般化してキーを切り替えるにはor、そのリストの16進値とを一緒に使用する必要があります0x700000000。次のPythonコードは、これを行う1つの方法を示しています。

In [1]: def convert(val):
   ...:     int_val = int(val, 16)
   ...:     int_ref = 0x700000000
   ...:
   ...:     return hex(int_ref | int_val)
   ...:

In [2]: r_alt = '0xE6'

In [3]: print(convert(r_alt))
0x7000000e6

よかった、ありがとう!このコマンドでマッピングをデフォルトに復元する方法はありますか?
Aᴄʜᴇʀᴏɴғᴀɪʟ

1
@Cᴀʟʟᴏᴅᴀᴄɪᴛʏキーをリセットするには、Srcとの両方にそのキーの値を指定してコマンドを再度実行するだけDstです。
スティーブンC.ハウエル

再起動すると元に戻ります。ブートごとにこのコマンドを再実行できますが、これを行わないことをお勧めします。これを永続的にする方法はありますか?
ファイアブッシュ

2
:この永続ようなコマンドを作るためにログインフックを使用することを提案している。このポストを@firebush stackoverflow.com/a/46460200/629530
firebush

1
@ StevenC.Howell関数修飾子の組み合わせはどうですか?たとえば\ 、キーボードのバックスラッシュは、ほとんど使用しないShift+Option+7ような単純なものに置き換えたいものOption+.です。それ、どうやったら出来るの?ご協力いただきありがとうございます。
梨のゴンベ

15

より一般的でユーザーフレンドリーなアプローチはKarabiner-Elementsを使用することです。これはSierraで動作するKarabinerのバージョンです。


2
Karabiner-Elementsのクイックアップデート。macOS High Sierra 10.13.3(17D102)で動作します。正しいコマンドキーとオプションキーを交換しました。
スティーブクレメント

サードパーティのアプリは決して「より一般的」ではありません。OSに組み込まれているアプリの動作でシステムが乱雑になるのはなぜですか?
バクサウ

1
@Bachsauは、キーの組み合わせ、マクロ、プロファイルのセットアップ、内部および外部キーボードの共有および/または分割マッピング構成の使用など、他の多くのことを実行できるという点でより一般的です。
ジャノシュ

@Bachsauキーボードごとに異なるプロファイルを保持しているため、同じように機能します。非常に素晴らしいアプリ
AlexG

8

これは、Steven C. Howellの回答の補遺です。

スカンジナビア語のキーボードを備えた新しいMacBook Proを持っています。この新しいモデルにはEscキーがありません。これは私にとって大きな障害です。

以下は§キー(左上、1の左上、タブキーの上)を翻訳して、今日まで何にも使用したことはないと思いますが、Escを生成することを発見しました。

hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'

Appleのドキュメント(Stevenの回答からリンク)では、これは「Keyboard Non-US \ and |」とラベル付けされています。(0x64)。

「US以外の」キーのいくつかは、通常、使用しているキーボードのラベルが異なるキーを参照するため、発見が困難です。(私はまた、「墓のアクセントとチルダは」私のキーボードの上に生成し、左シフトとzの間のキーを意味していることを発見し<、私はどのキーに対応する「非米国確立することができませんでした。#とは~」と私が見つけた後は、さらに実験しませんでした試してみたい場合は、必要なキーが見つかるまで端末でスクリプトを実行してみてください。

for ((i=1;i<=128;++i)); do
    printf '0x7000000%0x\n' "$i"
    printf '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x7000000%0x,"HIDKeyboardModifierMappingDst":0x70000000a}]}' "$i" |
    xargs -0 hidutil property --set >/dev/null
    read -p "Type some stuff: "
    hidutil property --set '{"UserKeyMapping":[{}]}' >/dev/null
done

これはキーコードをループし、一度に1つずつ変更します。試行錯誤によって、特に役に立たないキーを見つけることができます。求められたら何かを入力してみてください- g期待したものの代わりにを取得した場合、正しいキーコードが見つかりました。(便利な選択ではない0x70000000a場合gは、何か他のものに変更します。gキーを再マップしたいのでしょうか?)入力が終わったら、Enterキーを押して次のキーに進みます。

価値があるのは、ループ内の最後のコマンドは、すべてのUserKeyMapping設定をザップする方法です。

hidutil property --set '{"UserKeyMapping":[{}]}'

最初に実行するhidutil property --get UserKeyMappingと、

(null)

ただし、この値をフィードバックして設定をザップすることはできません(または、この入力を受け入れますが無視します)。

(ターミナルに慣れていない場合は、プロンプトまたは同様のメッセージが表示されるforまで、物をコピーして貼り付けてdoneくださいbash$。)

この関連するスタックオーバーフローの質問に従って、コマンドをホームディレクトリのスクリプトファイルに入れ、launchd構成に追加して、この変更を永続的にすることができます。

一部の読者が自分でこれを行うことに不安がある場合、これを行う簡単なスクリプトを次に示します。繰り返しますが、ターミナルプロンプトでこれをコピー/貼り付けしてください。

mkdir -p "$HOME"/bin
printf '%s\n' '#!/bin/sh' \
    'hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}' \
    >"$HOME"/bin/userkeymapping
chmod 755 "$HOME"/bin/userkeymapping
cat<<: >"$HOME"/Library/LaunchAgents/userkeymapping.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>userkeymapping</string>
    <key>ProgramArguments</key>
    <array>
        <string>$HOME/bin/userkeymapping</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
:
launchctl load "$HOME"/Library/LaunchAgents/userkeymapping.plist

明らか0x700000064に、スクリプトでそれを変更する必要がある以外のキーで終わった場合、または"$HOME"/bin/userkeymapping既に上記を実行した場合はファイルで作成されます。


この回答の以前のバージョンは、使用を推奨してLoginHookいましたが、私にとってはうまくいきませんでした。stackoverflow.com/ a / 22872222/874188に基づいて、launchd代わりにアプローチに切り替えました。
トリプリー

熱心なvi / vimファンとして、これはまさに私が探していたものです。ありがとうございました。
フィリップカーンズ

7

単一のキーを再マッピングするだけの場合

例:Macでエスケープキーを再マップする方法

  1. アップルメニューに移動して[システム環境設定]を選択し、[キーボード]設定パネルに移動して[キーボード]タブを選択します

  2. 右下隅の「修飾キー」ボタンをクリックします

  3. エスケープ機能を実行するために再マップおよび変更するキーを選択します:Caps Lock(推奨)、Control、Option、またはCommand
  4. ハードウェアエスケープキーとして再マップするキーに対応するドロップダウンリストから「エスケープ」を選択し、「OK」をクリックして変更を設定します。

参照


1
これにより、この回答に列挙されている4つのキーのみを制御できます。
トリプリー

正しい、そして非常に役立つ。誰かが追加のキーを再マッピングしたい場合は、カラビナを考慮してください
jasonleonhard

「right⌥」など、特定のキーを指定する方法もないようです。あなたが得ることができる最も具体的なものは、「any⌥」のような信号です。
メルチャコ

正しいですが、良い点は、それが機能するだけのものをインストールする必要がないことです。
ジェイソンレオンハルト

1

デフォルトに戻したい場合:

# setting it to 'null' does not work on my MBP High Sierra
hidutil property --set '{"UserKeyMapping":[]}'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.